diff --git a/CMakeLists.txt b/CMakeLists.txt index 4dd83523f..5cffe031f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -221,7 +221,7 @@ if(NOT EMU_BUILD_NUM) set(EMU_BUILD_NUM 0) endif() if(NOT EMU_COPYRIGHT_YEAR) - set(EMU_COPYRIGHT_YEAR 2024) + set(EMU_COPYRIGHT_YEAR 2025) endif() # Libasan @@ -230,4 +230,6 @@ if(LIBASAN) add_link_options(-fsanitize=address) endif() +set(CMAKE_TOP_LEVEL_PROCESSED TRUE) + add_subdirectory(src) diff --git a/src/86box.c b/src/86box.c index 71f877599..2c2d45e61 100644 --- a/src/86box.c +++ b/src/86box.c @@ -88,7 +88,7 @@ #include <86box/scsi_device.h> #include <86box/cdrom.h> #include <86box/cdrom_interface.h> -#include <86box/zip.h> +#include <86box/rdisk.h> #include <86box/mo.h> #include <86box/scsi_disk.h> #include <86box/cdrom_image.h> @@ -1056,47 +1056,50 @@ usage: vmm_enabled = 1; pclog("# VM Manager enabled. Path: %s\n", vmm_path); } - /* - * We are about to read the configuration file, which MAY - * put data into global variables (the hard- and floppy - * disks are an example) so we have to initialize those - * modules before we load the config.. - */ - hdd_init(); - network_init(); - mouse_init(); - cdrom_global_init(); - zip_global_init(); - mo_global_init(); - /* Initialize the keyboard accelerator list with default values */ - for (int x = 0; x < NUM_ACCELS; x++) { - strcpy(acc_keys[x].name, def_acc_keys[x].name); - strcpy(acc_keys[x].desc, def_acc_keys[x].desc); - strcpy(acc_keys[x].seq, def_acc_keys[x].seq); - } + if (!vmm_enabled) { + /* + * We are about to read the configuration file, which MAY + * put data into global variables (the hard- and floppy + * disks are an example) so we have to initialize those + * modules before we load the config.. + */ + hdd_init(); + network_init(); + mouse_init(); + cdrom_global_init(); + rdisk_global_init(); + mo_global_init(); - /* Load the configuration file. */ - config_load(); + /* Initialize the keyboard accelerator list with default values */ + for (int x = 0; x < NUM_ACCELS; x++) { + strcpy(acc_keys[x].name, def_acc_keys[x].name); + strcpy(acc_keys[x].desc, def_acc_keys[x].desc); + strcpy(acc_keys[x].seq, def_acc_keys[x].seq); + } - /* Clear the CMOS and/or BIOS flash file, if we were started with - the relevant parameter(s). */ - if (clear_cmos) { - delete_nvr_file(0); - clear_cmos = 0; - } + /* Load the configuration file. */ + config_load(); - if (clear_flash) { - delete_nvr_file(1); - clear_flash = 0; - } + /* Clear the CMOS and/or BIOS flash file, if we were started with + the relevant parameter(s). */ + if (clear_cmos) { + delete_nvr_file(0); + clear_cmos = 0; + } - for (uint8_t i = 0; i < FDD_NUM; i++) { - if (fn[i] != NULL) { - if (strlen(fn[i]) <= 511) - strncpy(floppyfns[i], fn[i], 511); - free(fn[i]); - fn[i] = NULL; + if (clear_flash) { + delete_nvr_file(1); + clear_flash = 0; + } + + for (uint8_t i = 0; i < FDD_NUM; i++) { + if (fn[i] != NULL) { + if (strlen(fn[i]) <= 511) + strncpy(floppyfns[i], fn[i], 511); + free(fn[i]); + fn[i] = NULL; + } } } @@ -1395,7 +1398,7 @@ pc_reset_hard_close(void) cdrom_close(); - zip_close(); + rdisk_close(); mo_close(); @@ -1446,6 +1449,8 @@ pc_reset_hard_init(void) scsi_reset(); scsi_device_init(); + ide_hard_reset(); + /* Initialize the actual machine and its basic modules. */ machine_init(); @@ -1489,9 +1494,6 @@ pc_reset_hard_init(void) fdd_reset(); - /* Reset the CD-ROM Controller module. */ - cdrom_interface_reset(); - /* Reset and reconfigure the SCSI layer. */ scsi_card_init(); @@ -1499,9 +1501,12 @@ pc_reset_hard_init(void) cdrom_hard_reset(); + /* Reset the CD-ROM Controller module. */ + cdrom_interface_reset(); + mo_hard_reset(); - zip_hard_reset(); + rdisk_hard_reset(); /* Reset any ISA ROM cards. */ @@ -1664,7 +1669,7 @@ pc_close(UNUSED(thread_t *ptr)) cdrom_close(); - zip_close(); + rdisk_close(); mo_close(); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8cf67043f..724e1fda6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -16,6 +16,10 @@ # Copyright 2024 Jasmine Iwanek. # +if(NOT CMAKE_TOP_LEVEL_PROCESSED) + message(FATAL_ERROR "Incorrect source directory specified. Delete your build directory and retry with the top-level directory instead") +endif() + if(APPLE) set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) endif() @@ -99,7 +103,7 @@ if(INSTRUMENT) add_compile_definitions(USE_INSTRUMENT) endif() -target_link_libraries(86Box cpu chipset mch dev mem fdd game cdrom zip mo hdd +target_link_libraries(86Box cpu chipset mch dev mem fdd game cdrom rdisk mo hdd net print scsi sio snd utils vid voodoo plat ui) if(HAIKU) @@ -149,16 +153,6 @@ if(APPLE) target_link_libraries(86Box Freetype::Freetype) endif() -find_package(SDL2 REQUIRED) -include_directories(${SDL2_INCLUDE_DIRS}) -if(STATIC_BUILD AND TARGET SDL2::SDL2-static) - target_link_libraries(86Box SDL2::SDL2-static) -elseif(TARGET SDL2::SDL2) - target_link_libraries(86Box SDL2::SDL2) -else() - target_link_libraries(86Box ${SDL2_LIBRARIES}) -endif() - find_package(PNG REQUIRED) include_directories(${PNG_INCLUDE_DIRS}) target_link_libraries(86Box PNG::PNG) diff --git a/src/cdrom/CMakeLists.txt b/src/cdrom/CMakeLists.txt index 621b069b0..7e18a72a0 100644 --- a/src/cdrom/CMakeLists.txt +++ b/src/cdrom/CMakeLists.txt @@ -23,6 +23,7 @@ add_library(cdrom OBJECT cdrom.c cdrom_image.c cdrom_image_viso.c + cdrom_mke.c ) target_link_libraries(86Box PkgConfig::SNDFILE) diff --git a/src/cdrom/cdrom.c b/src/cdrom/cdrom.c index 3bfada9ec..ffccbdcb4 100644 --- a/src/cdrom/cdrom.c +++ b/src/cdrom/cdrom.c @@ -32,6 +32,7 @@ #ifdef USE_CDROM_MITSUMI #include <86box/cdrom_mitsumi.h> #endif +#include <86box/cdrom_mke.h> #include <86box/log.h> #include <86box/plat.h> #include <86box/plat_cdrom_ioctl.h> @@ -121,8 +122,10 @@ static const struct { // clang-format off { &cdrom_interface_none_device }, #ifdef USE_CDROM_MITSUMI - { &mitsumi_cdrom_device }, + { &mitsumi_cdrom_device }, #endif + { &mke_cdrom_noncreative_device }, + { &mke_cdrom_device }, { NULL } // clang-format on }; @@ -295,7 +298,7 @@ msf_to_bcd(int *m, int *s, int *f) void cdrom_compute_ecc_block(cdrom_t *dev, uint8_t *parity, const uint8_t *data, uint32_t major_count, uint32_t minor_count, - uint32_t major_mult, uint32_t minor_inc) + uint32_t major_mult, uint32_t minor_inc, int m2f1) { uint32_t size = major_count * minor_count; @@ -308,6 +311,9 @@ cdrom_compute_ecc_block(cdrom_t *dev, uint8_t *parity, const uint8_t *data, for (uint32_t minor = 0; minor < minor_count; ++minor) { uint8_t temp = data[index]; + if (m2f1 && (index < 4)) + temp = 0x00; + index += minor_inc; if (index >= size) @@ -323,14 +329,14 @@ cdrom_compute_ecc_block(cdrom_t *dev, uint8_t *parity, const uint8_t *data, } } -extern void -cdrom_generate_ecc_data(cdrom_t *dev, const uint8_t *data) +static void +cdrom_generate_ecc_data(cdrom_t *dev, const uint8_t *data, int m2f1) { /* Compute ECC P code. */ - cdrom_compute_ecc_block(dev, dev->p_parity, data, 86, 24, 2, 86); + cdrom_compute_ecc_block(dev, dev->p_parity, data, 86, 24, 2, 86, m2f1); /* Compute ECC Q code. */ - cdrom_compute_ecc_block(dev, dev->q_parity, data, 52, 43, 86, 88); + cdrom_compute_ecc_block(dev, dev->q_parity, data, 52, 43, 86, 88, m2f1); } static int @@ -338,21 +344,23 @@ cdrom_is_sector_good(cdrom_t *dev, const uint8_t *b, const uint8_t mode2, const { int ret = 1; - if (mode2 && (form == 1)) { - const uint32_t crc = cdrom_crc32(0xffffffff, b, 2072) ^ 0xffffffff; + if (!mode2 || (form != 1)) { + if (mode2 && (form == 1)) { + const uint32_t crc = cdrom_crc32(0xffffffff, &(b[16]), 2056) ^ 0xffffffff; - ret = ret && (crc == (*(uint32_t *) &(b[2072]))); - } else if (!mode2) { - const uint32_t crc = cdrom_crc32(0xffffffff, b, 2064) ^ 0xffffffff; + ret = ret && (crc == (*(uint32_t *) &(b[2072]))); + } else if (!mode2) { + const uint32_t crc = cdrom_crc32(0xffffffff, b, 2064) ^ 0xffffffff; - ret = ret && (crc == (*(uint32_t *) &(b[2064]))); + ret = ret && (crc == (*(uint32_t *) &(b[2064]))); + } + + cdrom_generate_ecc_data(dev, &(b[12]), mode2 && (form == 1)); + + ret = ret && !memcmp(dev->p_parity, &(b[2076]), 172); + ret = ret && !memcmp(dev->q_parity, &(b[2248]), 104); } - cdrom_generate_ecc_data(dev, &(b[12])); - - ret = ret && !memcmp(dev->p_parity, &(b[2076]), 172); - ret = ret && !memcmp(dev->q_parity, &(b[2248]), 104); - return ret; } @@ -379,7 +387,7 @@ read_data(cdrom_t *dev, const uint32_t lba, int check) else if (dev->raw_buffer[dev->cur_buf ^ 1][0x0012] == dev->raw_buffer[dev->cur_buf ^ 1][0x0016]) form = ((dev->raw_buffer[dev->cur_buf ^ 1][0x0012] & - 0x20) >> 5) + 1; + 0x20) >> 5) + 1; } else if (dev->raw_buffer[dev->cur_buf ^ 1][0x000f] == 0x02) dev->mode2 = 1; @@ -1184,6 +1192,12 @@ cdrom_is_early(const int type) return (cdrom_drive_types[type].scsi_std == 1); } +int +cdrom_is_dvd(const int type) +{ + return (cdrom_drive_types[type].is_dvd == 1); +} + int cdrom_is_generic(const int type) { @@ -1235,6 +1249,26 @@ cdrom_get_type_count(void) return count; } +void +cdrom_generate_name_mke(const int type, char *name) +{ + char elements[2][512] = { 0 }; + + memcpy(elements[0], cdrom_drive_types[type].model, + strlen(cdrom_drive_types[type].model) + 1); + char *s = strstr(elements[0], " "); + if (s != NULL) + s[0] = 0x00; + + memcpy(elements[1], cdrom_drive_types[type].revision, + strlen(cdrom_drive_types[type].revision) + 1); + s = strstr(elements[1], " "); + if (s != NULL) + s[0] = 0x00; + + sprintf(name, "%s%s", elements[0], elements[1]); +} + void cdrom_get_identify_model(const int type, char *name, const int id) { @@ -1673,7 +1707,7 @@ cdrom_audio_track_search(cdrom_t *dev, const uint32_t pos, dev->seek_pos = MSFtoLBA(ti.m, ti.s, ti.f) - 150; else { cdrom_log(dev->log, "Unable to get the starting position for " - "track %08X\n", ismsf & 0xff); + "track %08X\n", pos2 & 0xff); cdrom_stop(dev); } break; @@ -1791,7 +1825,7 @@ cdrom_audio_play_toshiba(cdrom_t *dev, const uint32_t pos, const int type) dev->cd_end = MSFtoLBA(ti.m, ti.s, ti.f) - 150; else { cdrom_log(dev->log, "Unable to get the starting position for " - "track %08X\n", ismsf & 0xff); + "track %08X\n", pos2 & 0xff); cdrom_stop(dev); } break; @@ -1824,7 +1858,7 @@ cdrom_audio_scan(cdrom_t *dev, const uint32_t pos) uint8_t ret = 0; if (dev->cd_status & CD_STATUS_HAS_AUDIO) { - cdrom_log(dev->log, "Audio Scan: MSF = %06x, type = %02x\n", pos, type); + cdrom_log(dev->log, "Audio Scan: MSF = %06x\n", pos); if (pos == 0xffffffff) { cdrom_log(dev->log, "(Type 0) Search from current position\n"); @@ -2093,9 +2127,10 @@ cdrom_get_current_subcodeq_playstatus(cdrom_t *dev, uint8_t *b) cdrom_get_current_subcodeq(dev, b); switch (dev->cd_status) { - default: case CD_STATUS_EMPTY: - case CD_STATUS_DATA_ONLY: case CD_STATUS_DVD: - case CD_STATUS_STOPPED: case CD_STATUS_PLAYING_COMPLETED: + default: case CD_STATUS_EMPTY: + case CD_STATUS_DATA_ONLY: case CD_STATUS_DVD: + case CD_STATUS_STOPPED: case CD_STATUS_PLAYING_COMPLETED: + case CD_STATUS_DVD_REJECTED: ret = 0x03; break; case CD_STATUS_HOLD: @@ -2444,7 +2479,7 @@ cdrom_readsector_raw(cdrom_t *dev, uint8_t *buffer, const int sector, const int ecc_diff = 0; } - if (dev->cd_status != CD_STATUS_EMPTY) { + if ((dev->cd_status != CD_STATUS_EMPTY) && (dev->cd_status != CD_STATUS_DVD_REJECTED)) { uint8_t *temp_b; uint8_t *b = temp_b = buffer; int audio = 0; @@ -2950,7 +2985,7 @@ cdrom_update_status(cdrom_t *dev) dev->cached_sector = -1; dev->cdrom_capacity = dev->ops->get_last_block(dev->local); - if (dev->cd_status != CD_STATUS_EMPTY) { + if ((dev->cd_status != CD_STATUS_EMPTY) && (dev->cd_status != CD_STATUS_DVD_REJECTED)) { /* Signal media change to the emulated machine. */ cdrom_insert(dev->id); @@ -2992,9 +3027,14 @@ cdrom_load(cdrom_t *dev, const char *fn, const int skip_insert) if ((dev->ops->is_empty != NULL) && dev->ops->is_empty(dev->local)) dev->cd_status = CD_STATUS_EMPTY; - else if (dev->ops->is_dvd(dev->local)) - dev->cd_status = CD_STATUS_DVD; - else + else if (dev->ops->is_dvd(dev->local)) { + if (cdrom_is_dvd(dev->type)) + dev->cd_status = CD_STATUS_DVD; + else { + warning("DVD image \"%s\" in a CD-only drive, reporting as empty\n", fn); + dev->cd_status = CD_STATUS_DVD_REJECTED; + } + } else dev->cd_status = dev->ops->has_audio(dev->local) ? CD_STATUS_STOPPED : CD_STATUS_DATA_ONLY; @@ -3008,7 +3048,7 @@ cdrom_load(cdrom_t *dev, const char *fn, const int skip_insert) cdrom_toc_dump(dev); #endif - if (!skip_insert && (dev->cd_status != CD_STATUS_EMPTY)) { + if (!skip_insert && (dev->cd_status != CD_STATUS_EMPTY) && (dev->cd_status != CD_STATUS_DVD_REJECTED)) { /* Signal media change to the emulated machine. */ cdrom_insert(dev->id); diff --git a/src/cdrom/cdrom_image.c b/src/cdrom/cdrom_image.c index ccb2ebe09..81fadb272 100644 --- a/src/cdrom/cdrom_image.c +++ b/src/cdrom/cdrom_image.c @@ -19,7 +19,6 @@ #define __STDC_FORMAT_MACROS #include #include -// #define ENABLE_IMAGE_LOG 1 #ifdef ENABLE_IMAGE_LOG #include #endif @@ -144,6 +143,7 @@ typedef enum PW_INTERLEAVED = 0x08 /* 96-byte PW subchannel, interleaved */ } mds_subch_mode_t; +#pragma pack(push, 1) typedef struct { uint8_t file_sig[16]; @@ -225,6 +225,7 @@ typedef struct uint32_t pad[2]; uint32_t entries; } mds_dpm_block_t; +#pragma pack(pop) #ifdef ENABLE_IMAGE_LOG int image_do_log = ENABLE_IMAGE_LOG; @@ -1346,12 +1347,12 @@ image_set_track_subch_type(track_t *ct) static int image_load_iso(cd_image_t *img, const char *filename) { - track_t *ct = NULL; - track_index_t *ci = NULL; - track_file_t *tf = NULL; - int success = 1; - int error = 1; - int is_viso = 0; + track_t *ct = NULL; + track_index_t *ci = NULL; + track_file_t *tf = NULL; + int success = 1; + int error = 1; + int is_viso = 0; int sector_sizes[8] = { 2448, 2368, RAW_SECTOR_SIZE, 2336, 2332, 2328, 2324, COOKED_SECTOR_SIZE }; @@ -1446,8 +1447,12 @@ image_load_iso(cd_image_t *img, const char *filename) if (success) image_process(img); else { - image_log(img->log, " [ISO ] Unable to open image or folder \"%s\"\n", - filename); +#ifdef ENABLE_IMAGE_LOG + log_warning(img->log, "Unable to open image or folder \"%s\"\n", + filename); +#else + warning("Unable to open image or folder \"%s\"\n", filename); +#endif return 0; } @@ -1792,14 +1797,101 @@ image_load_cue(cd_image_t *img, const char *cuefile) if (success) image_process(img); - else { - image_log(img->log, " [CUE ] Unable to open Cue sheet \"%s\"\n", cuefile); - return 0; - } + else +#ifdef ENABLE_IMAGE_LOG + log_warning(img->log, " [CUE ] Unable to open Cue sheet \"%s\"\n", cuefile); +#else + warning("Unable to open Cue sheet \"%s\"\n", cuefile); +#endif return success; } +// Converts UTF-16 string into UTF-8 string. +// If destination string is NULL returns total number of symbols that would've +// been written (without null terminator). However, when actually writing into +// destination string, it does include it. So, be sure to allocate extra byte +// for destination string. +// Params: +// u16_str - source UTF-16 string +// u16_str_len - length of source UTF-16 string +// u8_str - destination UTF-8 string +// u8_str_size - size of destination UTF-8 string in bytes +// Return value: +// 0 on success, -1 if encountered invalid surrogate pair, -2 if +// encountered buffer overflow or length of destination UTF-8 string in bytes +// (without including the null terminator). +long int utf16_to_utf8(const uint16_t *u16_str, size_t u16_str_len, + uint8_t *u8_str, size_t u8_str_size) +{ + size_t i = 0, j = 0; + + if (!u8_str) { + u8_str_size = u16_str_len * 4; + } + + while (i < u16_str_len) { + uint32_t codepoint = u16_str[i++]; + + // check for surrogate pair + if (codepoint >= 0xD800 && codepoint <= 0xDBFF) { + uint16_t high_surr = codepoint; + uint16_t low_surr = u16_str[i++]; + + if (low_surr < 0xDC00 || low_surr > 0xDFFF) + return -1; + + codepoint = ((high_surr - 0xD800) << 10) + + (low_surr - 0xDC00) + 0x10000; + } + + if (codepoint < 0x80) { + if (j + 1 > u8_str_size) return -2; + + if (u8_str) u8_str[j] = (char)codepoint; + + j++; + } else if (codepoint < 0x800) { + if (j + 2 > u8_str_size) return -2; + + if (u8_str) { + u8_str[j + 0] = 0xC0 | (codepoint >> 6); + u8_str[j + 1] = 0x80 | (codepoint & 0x3F); + } + + j += 2; + } else if (codepoint < 0x10000) { + if (j + 3 > u8_str_size) return -2; + + if (u8_str) { + u8_str[j + 0] = 0xE0 | (codepoint >> 12); + u8_str[j + 1] = 0x80 | ((codepoint >> 6) & 0x3F); + u8_str[j + 2] = 0x80 | (codepoint & 0x3F); + } + + j += 3; + } else { + if (j + 4 > u8_str_size) return -2; + + if (u8_str) { + u8_str[j + 0] = 0xF0 | (codepoint >> 18); + u8_str[j + 1] = 0x80 | ((codepoint >> 12) & 0x3F); + u8_str[j + 2] = 0x80 | ((codepoint >> 6) & 0x3F); + u8_str[j + 3] = 0x80 | (codepoint & 0x3F); + } + + j += 4; + } + } + + if (u8_str) { + if (j >= u8_str_size) return -2; + u8_str[j] = '\0'; + } + + return (long int)j; +} + static int image_load_mds(cd_image_t *img, const char *mdsfile) { @@ -1810,6 +1902,7 @@ image_load_mds(cd_image_t *img, const char *mdsfile) int last_t = -1; int error; char pathname[MAX_FILENAME_LENGTH]; + char ofn[2048] = { 0 }; mds_hdr_t mds_hdr = { 0 }; mds_sess_block_t mds_sess_block = { 0 }; @@ -1843,14 +1936,25 @@ image_load_mds(cd_image_t *img, const char *mdsfile) fseek(fp, 0, SEEK_SET); fread(&mds_hdr, 1, sizeof(mds_hdr_t), fp); + if (memcmp(mds_hdr.file_sig, "MEDIA DESCRIPTOR", 16)) { - image_log(img->log, " [MDS ] Not an actual MDF file \"%s\"\n", mdsfile); +#ifdef ENABLE_IMAGE_LOG + log_warning(img->log, " [MDS ] \"%s\"\n is not an actual MDF file", + mdsfile); +#else + warning("\"%s\"\n is not an actual MDF file", mdsfile); +#endif fclose(fp); return 0; } if (mds_hdr.file_ver[0] == 0x02) { - image_log(img->log, " [MDS ] Daemon tools encrypted MDS is not supported in file \"%s\"\n", mdsfile); +#ifdef ENABLE_IMAGE_LOG + log_warning(img->log, " [MDS ] \"%s\" is a Daemon Tools encrypted MDS which is not supported\n", + mdsfile); +#else + warning("\"%s\" is a Daemon Tools encrypted MDS which is not supported\n", mdsfile); +#endif fclose(fp); return 0; } @@ -1906,7 +2010,7 @@ image_load_mds(cd_image_t *img, const char *mdsfile) fread(&mds_dpm_block_offs, 1, sizeof(uint32_t), fp); fseek(fp, mds_dpm_block_offs, SEEK_SET); - fread(&mds_dpm_block, 1, 4 * sizeof(mds_dpm_block_t), fp); + fread(&mds_dpm_block, 1, sizeof(mds_dpm_block_t), fp); /* We currently only support the bad sectors block and not (yet) actual DPM. */ if (mds_dpm_block.type == 0x00000002) { @@ -1946,8 +2050,6 @@ image_load_mds(cd_image_t *img, const char *mdsfile) last_t = mds_trk_block.point; ct = image_insert_track(img, mds_sess_block.sess_id, mds_trk_block.point); - tf = NULL; - if (img->is_dvd) { /* DVD images have no extra block - the extra block offset is the track length. */ memset(&mds_trk_ex_block, 0x00, sizeof(mds_trk_ex_block_t)); @@ -1967,14 +2069,24 @@ image_load_mds(cd_image_t *img, const char *mdsfile) fseek(fp, mds_trk_block.footer_offs + (ff * sizeof(mds_footer_t)), SEEK_SET); fread(&mds_footer, 1, sizeof(mds_footer_t), fp); - wchar_t wfn[2048] = { 0 }; - char fn[2048] = { 0 }; + uint16_t wfn[2048] = { 0 }; + char fn[2048] = { 0 }; fseek(fp, mds_footer.fn_offs, SEEK_SET); if (mds_footer.fn_is_wide) { - fgetws(wfn, 256, fp); - wcstombs(fn, wfn, 256); - } else - fgets(fn, 512, fp); + int len = 0; + for (int i = 0; i < 256; i++) { + fread(&(wfn[i]), 1, 2, fp); + len++; + if (wfn[i] == 0x0000) + break; + } + (void) utf16_to_utf8(wfn, 2048, (uint8_t *) fn, 2048); + } else for (int i = 0; i < 512; i++) { + fread(&fn[i], 1, 1, fp); + if (fn[i] == 0x00) + break; + } + if (!stricmp(fn, "*.mdf")) { strcpy(fn, mdsfile); fn[strlen(mdsfile) - 3] = 'm'; @@ -1988,7 +2100,10 @@ image_load_mds(cd_image_t *img, const char *mdsfile) else strcpy(filename, fn); - tf = index_file_init(img->dev->id, filename, &error, &is_viso); + if (strcmp(ofn, filename) != 0) { + tf = index_file_init(img->dev->id, filename, &error, &is_viso); + strcpy(ofn, filename); + } } ct->sector_size = mds_trk_block.sector_len; @@ -2045,7 +2160,7 @@ image_load_mds(cd_image_t *img, const char *mdsfile) ci->file = tf; } else { ci->start = (mds_trk_block.pm * 60 * 75) + (mds_trk_block.ps * 75) + mds_trk_block.pf; - ci->type = INDEX_ZERO; + ci->type = INDEX_NONE; ci->file_start = 0; ci->file_length = 0; ci->file = NULL; @@ -2086,8 +2201,6 @@ image_load_mds(cd_image_t *img, const char *mdsfile) fclose(fp); if (success) { - // image_process(img); - #ifdef ENABLE_IMAGE_LOG image_log(img->log, "Final tracks list:\n"); for (int i = 0; i < img->tracks_num; i++) { @@ -2107,10 +2220,12 @@ image_load_mds(cd_image_t *img, const char *mdsfile) } } #endif - } else { - image_log(img->log, " [MDS ] Unable to open MDS sheet \"%s\"\n", mdsfile); - return 0; - } + } else +#ifdef ENABLE_IMAGE_LOG + log_warning(img->log, " [MDS ] Unable to open MDS sheet \"%s\"\n", mdsfile); +#else + warning("Unable to open MDS sheet \"%s\"\n", mdsfile); +#endif return success; } @@ -2166,8 +2281,8 @@ image_get_track_info(const void *local, const uint32_t track, } if (ct != NULL) { - const uint32_t pos = end ? ct->idx[1].start : - (ct->idx[1].start + ct->idx[1].length); + const uint32_t pos = end ? (ct->idx[1].start + ct->idx[1].length) : + ct->idx[1].start; ti->number = ct->point; ti->attr = ct->attr; @@ -2309,28 +2424,21 @@ image_read_sector(const void *local, uint8_t *buffer, if ((ret > 0) && (trk->attr & 0x04) && ((idx->type < INDEX_NORMAL) || !track_is_raw)) { uint32_t crc; - if ((trk->mode == 2) && (trk->form == 1)) - crc = cdrom_crc32(0xffffffff, buf, 2072) ^ 0xffffffff; - else + if ((trk->mode == 2) && (trk->form == 1)) { + crc = cdrom_crc32(0xffffffff, &(buf[16]), 2056) ^ 0xffffffff; + memcpy(&(buf[2072]), &crc, 4); + } else { crc = cdrom_crc32(0xffffffff, buf, 2064) ^ 0xffffffff; + memcpy(&(buf[2064]), &crc, 4); + } - memcpy(&(buf[2064]), &crc, 4); + int m2f1 = (trk->mode == 2) && (trk->form == 1); -#if 0 /* Compute ECC P code. */ - cdrom_compute_ecc_block(dev, dev->p_parity, &(buf[12]), 86, 24, 2, 86); - memcpy(&(buf[2076]), dev->p_parity, 172); + cdrom_compute_ecc_block(dev, &(buf[2076]), &(buf[12]), 86, 24, 2, 86, m2f1); /* Compute ECC Q code. */ - cdrom_compute_ecc_block(dev, dev->q_parity, &(buf[12]), 52, 43, 86, 88); - memcpy(&(buf[2248]), dev->q_parity, 104); -#else - /* Compute ECC P code. */ - cdrom_compute_ecc_block(dev, &(buf[2076]), &(buf[12]), 86, 24, 2, 86); - - /* Compute ECC Q code. */ - cdrom_compute_ecc_block(dev, &(buf[2248]), &(buf[12]), 52, 43, 86, 88); -#endif + cdrom_compute_ecc_block(dev, &(buf[2248]), &(buf[12]), 52, 43, 86, 88, m2f1); } if ((ret > 0) && ((idx->type < INDEX_NORMAL) || (trk->subch_type != 0x08))) { @@ -2517,7 +2625,7 @@ image_open(cdrom_t *dev, const char *path) sprintf(n, "CD-ROM %i Image", dev->id + 1); img->log = log_open(n); - img->dev = dev; + img->dev = dev; if (is_mds) { ret = image_load_mds(img, path); @@ -2526,10 +2634,6 @@ image_open(cdrom_t *dev, const char *path) img->has_audio = 0; else if (ret) img->has_audio = 1; - else { - image_close(img); - img = NULL; - } } else if (is_cue) { ret = image_load_cue(img, path); @@ -2537,25 +2641,30 @@ image_open(cdrom_t *dev, const char *path) img->has_audio = 0; else if (ret) img->has_audio = 1; - else { - image_close(img); - img = NULL; - } + + if (ret >= 1) + img->is_dvd = 2; } else { ret = image_load_iso(img, path); - if (!ret) { - image_close(img); - img = NULL; - } else + if (ret) { img->has_audio = 0; + img->is_dvd = 2; + } } - if (ret) + if (ret > 0) { + if (img->is_dvd == 2) { + uint32_t lb = image_get_last_block(img); /* Should be safer than previous way of doing it? */ + img->is_dvd = (lb >= 524287); /* Minimum 1 GB total capacity as threshold for DVD. */ + } + dev->ops = &image_ops; - else { + } else { log_warning(img->log, "Unable to load CD-ROM image: %s\n", path); - log_close(img->log); + + image_close(img); + img = NULL; } } diff --git a/src/cdrom/cdrom_mitsumi.c b/src/cdrom/cdrom_mitsumi.c index e27faab94..47501c25c 100644 --- a/src/cdrom/cdrom_mitsumi.c +++ b/src/cdrom/cdrom_mitsumi.c @@ -8,11 +8,11 @@ * * Mitsumi CD-ROM emulation for the ISA bus. * - * - * * Authors: Miran Grca, + * Jasmine Iwanek, * - * Copyright 2022 Miran Grca. + * Copyright 2022 Miran Grca. + * Copyright 2024-2025 Jasmine Iwanek. */ #include #include @@ -33,10 +33,6 @@ #include <86box/plat.h> #include <86box/sound.h> -#define MCD_DEFAULT_IOPORT 0x310 -#define MCD_DEFAULT_IRQ 5 -#define MCD_DEFAULT_DMA 5 - #define RAW_SECTOR_SIZE 2352 #define COOKED_SECTOR_SIZE 2048 @@ -116,6 +112,8 @@ typedef struct mcd_t { int cur_toc_track; int pos; int newstat; + + cdrom_t *cdrom_dev; } mcd_t; #define CD_BCD(x) (((x) % 10) | (((x) / 10) << 4)) @@ -140,17 +138,15 @@ mitsumi_cdrom_log(const char *fmt, ...) #endif static int -mitsumi_cdrom_is_ready(const cdrom_t *dev) +mitsumi_cdrom_is_ready(const mcd_t *dev) { - return (dev->image_path[0] != 0x00); + return (dev->cdrom_dev->image_path[0] != 0x00); } static void mitsumi_cdrom_reset(mcd_t *dev) { - cdrom_t *cdrom = calloc(1, sizeof(cdrom_t)); - - dev->stat = mitsumi_cdrom_is_ready(cdrom) ? (STAT_READY | STAT_CHANGE) : 0; + dev->stat = mitsumi_cdrom_is_ready(dev) ? (STAT_READY | STAT_CHANGE) : 0; dev->cmdrd_count = 0; dev->cmdbuf_count = 0; dev->buf_count = 0; @@ -168,12 +164,11 @@ mitsumi_cdrom_reset(mcd_t *dev) static int mitsumi_cdrom_read_sector(mcd_t *dev, int first) { - cdrom_t *cdrom = calloc(1, sizeof(cdrom_t)); uint8_t status; int ret = 0; if (dev->drvmode == DRV_MODE_CDDA) { - status = cdrom_mitsumi_audio_play(cdrom, dev->readmsf, dev->readcount); + status = cdrom_mitsumi_audio_play(dev->cdrom_dev, dev->readmsf, dev->readcount); if (status == 1) return status; else @@ -187,15 +182,15 @@ mitsumi_cdrom_read_sector(mcd_t *dev, int first) dev->data = 0; return 0; } - cdrom_stop(cdrom); - ret = cdrom_readsector_raw(cdrom, dev->buf, cdrom->seek_pos, 0, 2, 0x10, (int *) &dev->readcount, 0); + cdrom_stop(dev->cdrom_dev); + ret = cdrom_readsector_raw(dev->cdrom_dev, dev->buf, dev->cdrom_dev->seek_pos, 0, 2, 0x10, (int *) &dev->readcount, 0); if (ret <= 0) return 0; if (dev->mode & 0x40) { dev->buf[12] = CD_BCD((dev->readmsf >> 16) & 0xff); dev->buf[13] = CD_BCD((dev->readmsf >> 8) & 0xff); } - dev->readmsf = cdrom_lba_to_msf_accurate(cdrom->seek_pos + 1); + dev->readmsf = cdrom_lba_to_msf_accurate(dev->cdrom_dev->seek_pos + 1); dev->buf_count = dev->dmalen + 1; dev->buf_idx = 0; dev->data = 1; @@ -258,7 +253,6 @@ static void mitsumi_cdrom_out(uint16_t port, uint8_t val, void *priv) { mcd_t *dev = (mcd_t *) priv; - cdrom_t *cdrom = calloc(1, sizeof(cdrom_t)); pclog("Mitsumi CD-ROM OUT=%03x, val=%02x\n", port, val); switch (port & 1) { @@ -340,19 +334,19 @@ mitsumi_cdrom_out(uint16_t port, uint8_t val, void *priv) break; } if (!dev->cmdrd_count) - dev->stat = mitsumi_cdrom_is_ready(cdrom) ? (STAT_READY | (dev->change ? STAT_CHANGE : 0)) : 0; + dev->stat = mitsumi_cdrom_is_ready(dev) ? (STAT_READY | (dev->change ? STAT_CHANGE : 0)) : 0; return; } dev->cmd = val; dev->cmdbuf_idx = 0; dev->cmdrd_count = 0; dev->cmdbuf_count = 1; - dev->cmdbuf[0] = mitsumi_cdrom_is_ready(cdrom) ? (STAT_READY | (dev->change ? STAT_CHANGE : 0)) : 0; + dev->cmdbuf[0] = mitsumi_cdrom_is_ready(dev) ? (STAT_READY | (dev->change ? STAT_CHANGE : 0)) : 0; dev->data = 0; switch (val) { case CMD_GET_INFO: - if (mitsumi_cdrom_is_ready(cdrom)) { - cdrom_get_track_buffer(cdrom, &(dev->cmdbuf[1])); + if (mitsumi_cdrom_is_ready(dev)) { + cdrom_get_track_buffer(dev->cdrom_dev, &(dev->cmdbuf[1])); dev->cmdbuf_count = 10; dev->readcount = 0; } else { @@ -361,7 +355,7 @@ mitsumi_cdrom_out(uint16_t port, uint8_t val, void *priv) } break; case CMD_GET_Q: - if (mitsumi_cdrom_is_ready(cdrom)) { + if (mitsumi_cdrom_is_ready(dev)) { cdrom_get_q(cdrom, &(dev->cmdbuf[1]), &dev->cur_toc_track, dev->mode & MODE_GET_TOC); dev->cmdbuf_count = 11; dev->readcount = 0; @@ -378,7 +372,7 @@ mitsumi_cdrom_out(uint16_t port, uint8_t val, void *priv) break; case CMD_STOPCDDA: case CMD_STOP: - cdrom_stop(cdrom); + cdrom_stop(dev->cdrom_dev); dev->drvmode = DRV_MODE_STOP; dev->cur_toc_track = 0; break; @@ -387,7 +381,7 @@ mitsumi_cdrom_out(uint16_t port, uint8_t val, void *priv) break; case CMD_READ1X: case CMD_READ2X: - if (mitsumi_cdrom_is_ready(cdrom)) { + if (mitsumi_cdrom_is_ready(dev)) { dev->readcount = 0; dev->drvmode = (val == CMD_READ1X) ? DRV_MODE_CDDA : DRV_MODE_READ; dev->cmdrd_count = 6; @@ -403,7 +397,7 @@ mitsumi_cdrom_out(uint16_t port, uint8_t val, void *priv) dev->cmdbuf_count = 3; break; case CMD_EJECT: - cdrom_stop(cdrom); + cdrom_stop(dev->cdrom_dev); cdrom_eject(0); dev->readcount = 0; break; @@ -434,10 +428,23 @@ mitsumi_cdrom_init(UNUSED(const device_t *info)) { mcd_t *dev = calloc(1, sizeof(mcd_t)); - dev->irq = MCD_DEFAULT_IRQ; - dev->dma = MCD_DEFAULT_DMA; + for (uint8_t i = 0; i < CDROM_NUM; i++) { + if (cdrom[i].bus_type == CDROM_BUS_MITSUMI) { + dev->cdrom_dev = &cdrom[i]; + break; + } + } - io_sethandler(MCD_DEFAULT_IOPORT, 3, + if (!dev->cdrom_dev) + return NULL; + + dev->cdrom_dev->priv = &dev; + + uint16_t base = device_get_config_hex16("base"); + dev->irq = device_get_config_int("irq"); + dev->dma = device_get_config_int("dma"); + + io_sethandler(base, 3, mitsumi_cdrom_in, NULL, NULL, mitsumi_cdrom_out, NULL, NULL, dev); mitsumi_cdrom_reset(dev); @@ -456,6 +463,64 @@ mitsumi_cdrom_close(void *priv) } } +static const device_config_t mitsumi_config[] = { + // clang-format off + { + .name = "base", + .description = "Address", + .type = CONFIG_HEX16, + .default_string = NULL, + .default_int = 0x310, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "300H", .value = 0x300 }, + { .description = "310H", .value = 0x310 }, + { .description = "320H", .value = 0x320 }, + { .description = "340H", .value = 0x340 }, + { .description = "350H", .value = 0x350 }, + { NULL } + }, + .bios = { { 0 } } + }, + { + .name = "irq", + .description = "IRQ", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = 5, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "IRQ 3", .value = 3 }, + { .description = "IRQ 5", .value = 5 }, + { .description = "IRQ 9", .value = 9 }, + { .description = "IRQ 10", .value = 10 }, + { .description = "IRQ 11", .value = 11 }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { + .name = "dma", + .description = "DMA", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = 5, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "DMA 5", .value = 5 }, + { .description = "DMA 6", .value = 6 }, + { .description = "DMA 7", .value = 7 }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { .name = "", .description = "", .type = CONFIG_END } +// clang-format off +}; + const device_t mitsumi_cdrom_device = { .name = "Mitsumi CD-ROM interface", .internal_name = "mcd", @@ -467,5 +532,5 @@ const device_t mitsumi_cdrom_device = { .available = NULL, .speed_changed = NULL, .force_redraw = NULL, - .config = NULL + .config = mitsumi_config }; diff --git a/src/cdrom/cdrom_mke.c b/src/cdrom/cdrom_mke.c new file mode 100644 index 000000000..98ae6c057 --- /dev/null +++ b/src/cdrom/cdrom_mke.c @@ -0,0 +1,1078 @@ +/* + * 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. + * + * Panasonic/MKE CD-ROM emulation for the ISA bus. + * + * Authors: Miran Grca, + * Kevin Moonlight, + * Cacodemon345 + * + * Copyright (C) 2025 Miran Grca. + * Copyright (C) 2025 Cacodemon345. + * Copyright (C) 2024 Kevin Moonlight. + */ +#include +#include +#include +#include +#include +#include +#include +#include +#define HAVE_STDARG_H +#include <86box/86box.h> +#include <86box/device.h> +#include <86box/io.h> +#include <86box/pic.h> +#include <86box/dma.h> +#include <86box/cdrom.h> +#include <86box/cdrom_interface.h> +#include <86box/cdrom_mke.h> +#include <86box/plat.h> +#include <86box/ui.h> +#include <86box/sound.h> +#include <86box/fifo8.h> +#include <86box/timer.h> +#ifdef ENABLE_MKE_LOG +#include "cpu.h" +#endif + +/* +https://elixir.bootlin.com/linux/2.0.29/source/include/linux/sbpcd.h +CR-562-B is classified as Family1 in this driver, so uses the CMD1_ prefix. +*/ +#define CDROM_STATUS_DOOR 0x80 +#define CDROM_STATUS_DISC_IN 0x40 +#define CDROM_STATUS_SPIN_UP 0x20 +#define CDROM_STATUS_ERROR 0x10 +#define CDROM_STATUS_DOUBLE_SPEED 0x02 +#define CDROM_STATUS_READY 0x01 + +// Status returned from device +#define STAT_READY 0x01 +#define STAT_PLAY 0x08 +#define STAT_ERROR 0x10 +#define STAT_DISK 0x40 +#define STAT_TRAY 0x80 // Seems Correct + +#define CMD1_PAUSERESUME 0x0D +#define CMD1_RESET 0x0a +#define CMD1_LOCK_CTL 0x0c +#define CMD1_TRAY_CTL 0x07 +#define CMD1_MULTISESS 0x8d +#define CMD1_SUBCHANINF 0x11 +#define CMD1_ABORT 0x08 +// #define CMD1_PATH_CHECK 0x??? +#define CMD1_SEEK 0x01 +#define CMD1_READ 0x10 +#define CMD1_SPINUP 0x02 +#define CMD1_SPINDOWN 0x06 +#define CMD1_READ_UPC 0x88 +// #define CMD1_PLAY 0x??? +#define CMD1_PLAY_MSF 0x0e +#define CMD1_PLAY_TI 0x0f +#define CMD1_STATUS 0x05 +#define CMD1_READ_ERR 0x82 +#define CMD1_READ_VER 0x83 +#define CMD1_SETMODE 0x09 +#define CMD1_GETMODE 0x84 +#define CMD1_CAPACITY 0x85 +#define CMD1_READSUBQ 0x87 +#define CMD1_DISKINFO 0x8b +#define CMD1_READTOC 0x8c +#define CMD1_PAU_RES 0x0d +#define CMD1_PACKET 0x8e +#define CMD1_SESSINFO 0x8d + +typedef struct mke_t { + bool present; + bool tray_open; + + uint8_t command_buffer[7]; + uint8_t command_buffer_pending; + + uint8_t medium_changed; + + uint8_t vol0, vol1, patch0, patch1; + uint8_t mode_select[5]; + + uint8_t media_selected; // temporary hack + + Fifo8 data_fifo; + Fifo8 info_fifo; + + cdrom_t * cdrom_dev; + + uint32_t sector_type; + uint32_t sector_flags; + + uint32_t unit_attention; + + uint8_t cdbuffer[624240 * 2]; + + uint32_t data_to_push; + + pc_timer_t timer; + + char ver[512]; + + uint8_t is_error; + uint8_t sense[8]; + + uint8_t temp_buf[65536]; +} mke_t; + +typedef struct mke_interface_t { + mke_t mke[4]; + + uint8_t is_sb; + + uint8_t drvsel; + uint8_t data_select; +} mke_interface_t; + +#ifdef ENABLE_MKE_LOG +int mke_do_log = ENABLE_MKE_LOG; + +static void +mke_log(const char *fmt, ...) +{ + va_list ap; + + if (mke_do_log) { + va_start(ap, fmt); + pclog_ex(fmt, ap); + va_end(ap); + } +} +#else +# define mke_log(fmt, ...) +#endif + +#define CHECK_READY() \ + { \ + if (!mke_pre_execution_check(mke)) \ + return; \ + } + +#define REPORT_IF_NOT_READY() \ + { \ + if (!mke_pre_execution_check(mke)) { \ + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); \ + } \ + } + +#define CHECK_READY_READ() \ + { \ + if (!mke_pre_execution_check(mke)) { \ + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); \ + return; \ + } \ + } + +static void +mke_update_sense(mke_t *mke, uint8_t error) +{ + /* FreeBSD calls this addrval, but what is it? */ + mke->sense[0] = 0x00; + mke->sense[1] = mke->command_buffer[0]; + mke->sense[2] = error; + + mke->is_error = 1; +} + +static void +mke_cdrom_insert(void *priv) +{ + mke_t *dev = (mke_t *) priv; + + if ((dev == NULL) || (dev->cdrom_dev == NULL)) + return; + + if (dev->cdrom_dev->ops == NULL) { + dev->medium_changed = 0; + dev->cdrom_dev->cd_status = CD_STATUS_EMPTY; + if (timer_is_enabled(&dev->timer)) { + timer_disable(&dev->timer); + dev->data_to_push = 0; + } + mke_log("Media removal\n"); + } else if (dev->cdrom_dev->cd_status & CD_STATUS_TRANSITION) { + dev->medium_changed = 1; + /* Turn off the medium changed status. */ + dev->cdrom_dev->cd_status &= ~CD_STATUS_TRANSITION; + mke_log("Media insert\n"); + } else { + dev->medium_changed = 0; + dev->cdrom_dev->cd_status |= CD_STATUS_TRANSITION; + mke_log("Media transition\n"); + } +} + +static int +mke_pre_execution_check(mke_t *mke) +{ + int ready = 1; + + if ((mke->cdrom_dev->cd_status == CD_STATUS_PLAYING) || + (mke->cdrom_dev->cd_status == CD_STATUS_PAUSED)) { + ready = 1; + goto skip_ready_check; + } + + if (mke->cdrom_dev->cd_status & CD_STATUS_TRANSITION) { + if (mke->command_buffer[0] == 0x82) + ready = 0; + else { + mke_cdrom_insert(mke); + + ready = ((mke->cdrom_dev->cd_status != CD_STATUS_EMPTY) && (mke->cdrom_dev->cd_status != CD_STATUS_DVD_REJECTED)); + } + } else + ready = ((mke->cdrom_dev->cd_status != CD_STATUS_EMPTY) && (mke->cdrom_dev->cd_status != CD_STATUS_DVD_REJECTED)); + +skip_ready_check: + /* + If the drive is not ready, there is no reason to keep the + UNIT ATTENTION condition present, as we only use it to mark + disc changes. + */ + if (!ready && (mke->medium_changed > 0)) + mke->medium_changed = 0; + + /* + If the UNIT ATTENTION condition is set and the command does not allow + execution under it, error out and report the condition. + */ + if (mke->medium_changed == 1) { + /* + Only increment the unit attention phase if the command can + not pass through it. + */ + mke_log("Unit attention now 2\n"); + mke->medium_changed++; + mke_update_sense(mke, 0x11); \ + return 0; + } else if (mke->medium_changed == 2) { + if (mke->command_buffer[0] != 0x82) { + mke_log("Unit attention now 0\n"); + mke->medium_changed = 0; + } + } + + /* + Unless the command is REQUEST SENSE, clear the sense. This will *NOT* clear + the UNIT ATTENTION condition if it's set. + */ + if (mke->command_buffer[0] != 0x82) { + memset(mke->sense, 0x00, 8); + mke->is_error = 0; + } + + if (!ready && (mke->command_buffer[0] != 0x05)) { + mke_log("Not ready (%02X)\n", mke->command_buffer[0]); + mke_update_sense(mke, 0x03); + return 0; + } + + return 1; +} + +uint8_t +mke_cdrom_status(cdrom_t *dev, mke_t *mke) +{ + uint8_t status = 0; + /* + This bit seems to always be set? + Bit 4 never set? + */ + status |= 2; + if (dev->cd_status == CD_STATUS_PLAYING) + status |= STAT_PLAY; + if (dev->cd_status == CD_STATUS_PAUSED) + status |= STAT_PLAY; + if (mke->is_error) + status |= 0x10; + /* Always set? */ + status |= 0x20; + status |= STAT_TRAY; + if (mke->cdrom_dev->cd_status != CD_STATUS_EMPTY) { + status |= STAT_DISK; + status |= STAT_READY; + } + + return status; +} + +void +mke_get_subq(mke_t *mke, uint8_t *b) +{ + cdrom_t *dev = mke->cdrom_dev; + + cdrom_get_current_subchannel_sony(dev, mke->temp_buf, 1); + /* ? */ + b[0] = 0x80; + b[1] = ((mke->temp_buf[0] & 0xf) << 4) | ((mke->temp_buf[0] & 0xf0) >> 4); + b[2] = mke->temp_buf[1]; + b[3] = mke->temp_buf[2]; + b[4] = mke->temp_buf[6]; + b[5] = mke->temp_buf[7]; + b[6] = mke->temp_buf[8]; + b[7] = mke->temp_buf[3]; + b[8] = mke->temp_buf[4]; + b[9] = mke->temp_buf[5]; + /* ? */ + b[10] = 0; + mke_log("mke_get_subq: 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n", + b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8], b[9], b[10]); +} + +/* Lifted from FreeBSD */ +static void +blk_to_msf(int blk, unsigned char *msf) +{ + blk = blk + 150; /* 2 seconds skip required to + reach ISO data */ + msf[0] = blk / 4500; + blk = blk % 4500; + msf[1] = blk / 75; + msf[2] = blk % 75; + + return; +} + +uint8_t +mke_read_toc(mke_t *mke, unsigned char *b, uint8_t track) { + cdrom_t *dev = mke->cdrom_dev; +#if 0 + track_info_t ti; + int last_track; +#endif + const raw_track_info_t *trti = (raw_track_info_t *) mke->temp_buf; + int num = 0; + int ret = 0; + + dev->ops->get_raw_track_info(dev->local, &num, mke->temp_buf); + + if (num > 0) { + if (track == 0xaa) + track = 0xa2; + + int trk = - 1; + + for (int i = (num - 1); i >= 0; i--) { + if (trti[i].point == track) { + trk = i; + break; + } + } + + if (trk != -1) { + b[0] = 0; + b[1] = trti[trk].adr_ctl; + b[2] = (trti[trk].point == 0xa2) ? 0xaa : trti[trk].point; + b[3] = 0; + b[4] = trti[trk].pm; + b[5] = trti[trk].ps; + b[6] = trti[trk].pf; + b[7] = 0; + + ret = 1; + } + + mke_log("mke_read_toc: 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n", + b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7]); + } + + return ret; +} + + +uint8_t +mke_disc_info(mke_t *mke, unsigned char *b) +{ + cdrom_t *dev = mke->cdrom_dev; + uint8_t disc_type_buf[34]; + int first_track; + int last_track; + + cdrom_read_toc(dev, mke->temp_buf, CD_TOC_NORMAL, 0, 2 << 8, 65536); + cdrom_read_disc_information(dev, disc_type_buf); + first_track = mke->temp_buf[2]; + last_track = mke->temp_buf[3]; + + b[0] = disc_type_buf[8]; + b[1] = first_track; + b[2] = last_track; + b[3] = 0; + b[4] = 0; + b[5] = 0; + blk_to_msf(dev->cdrom_capacity, &b[3]); + mke_log("mke_disc_info: 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n", + b[0], b[1], b[2], b[3], b[4], b[5]); + return 1; +} + +uint8_t +mke_disc_capacity(cdrom_t *dev, unsigned char *b) +{ + b[0] = 0x00; + b[1] = 0x00; + b[2] = 0x00; + b[3] = 0x08; + b[4] = 0x00; + + blk_to_msf(dev->cdrom_capacity, &b[0]); + mke_log("mke_disc_capacity: 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n", + b[0], b[1], b[2], b[3], b[4]); + return 1; +} + +void +mke_read_multisess(mke_t *mke) +{ + cdrom_t *dev = mke->cdrom_dev; + uint8_t *b = (uint8_t *) &(mke->temp_buf[32768]); + const raw_track_info_t *trti = (raw_track_info_t *) mke->temp_buf; + int num = 0; + int first_sess = 0; + int last_sess = 0; + + dev->ops->get_raw_track_info(dev->local, &num, mke->temp_buf); + + if (num > 0) { + int trk = - 1; + + for (int i = 0; i < num; i++) { + if (trti[i].point == 0xa2) { + first_sess = trti[i].session; + break; + } + } + + for (int i = (num - 1); i >= 0; i--) { + if (trti[i].point == 0xa2) { + last_sess = trti[i].session; + break; + } + } + + for (int i = 0; i < num; i++) { + if ((trti[i].point >= 1) && (trti[i].point >= 99) && + (trti[i].session == last_sess)) { + trk = i; + break; + } + } + + if ((first_sess > 0) && (last_sess < 0) && (trk != -1)) { + b[0] = (first_sess == last_sess) ? 0x00 : 0x80; + b[1] = trti[trk].pm; + b[2] = trti[trk].ps; + b[3] = trti[trk].pf; + b[4] = 0; + b[5] = 0; + } + + fifo8_push_all(&mke->info_fifo, b, 6); + + mke_log("mke_read_multisess: 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n", + b[0], b[1], b[2], b[3], b[4], b[5]); + } else { + memset(b, 0x00, 6); + fifo8_push_all(&mke->info_fifo, b, 6); + } +} + +static void +mke_reset(mke_t *mke) +{ + cdrom_stop(mke->cdrom_dev); + timer_disable(&mke->timer); + mke->sector_type = 0x08 | (1 << 4); + mke->sector_flags = 0x10; + memset(mke->mode_select, 0, 5); + mke->mode_select[2] = 0x08; + mke->patch0 = 0x01; + mke->patch1 = 0x02; + mke->vol0 = 255; + mke->vol1 = 255; + mke->cdrom_dev->sector_size = 2048; +} + +void +mke_command_callback(void *priv) +{ + mke_t *mke = (mke_t *) priv; + + switch (mke->command_buffer[0]) { + case CMD1_SEEK: { + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + break; + } + case CMD1_READ: { + fifo8_push_all(&mke->data_fifo, mke->cdbuffer, mke->data_to_push); + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + mke->data_to_push = 0; + ui_sb_update_icon(SB_CDROM | mke->cdrom_dev->id, 0); + break; + } + } +} + +void +mke_command(mke_t *mke, uint8_t value) +{ + uint16_t i; + /* This is wasteful handling of buffers for compatibility, but will optimize later. */ + uint8_t x[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + int old_cd_status; + + if (mke->command_buffer_pending) { + mke->command_buffer[6 - mke->command_buffer_pending + 1] = value; + mke->command_buffer_pending--; + } + + if (mke->command_buffer[0] == CMD1_ABORT) { + mke_log("CMD_ABORT\n"); + fifo8_reset(&mke->info_fifo); + fifo8_reset(&mke->data_fifo); + timer_disable(&mke->timer); + mke->command_buffer[0] = 0; + mke->command_buffer_pending = 7; + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + } + + if (!mke->command_buffer_pending && mke->command_buffer[0]) { + mke->command_buffer_pending = 7; + mke_log("mke_command: 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n", + mke->command_buffer[0], mke->command_buffer[1], + mke->command_buffer[2], mke->command_buffer[3], + mke->command_buffer[4], mke->command_buffer[5], + mke->command_buffer[6]); + switch (mke->command_buffer[0]) { + case 0x03: + fifo8_reset(&mke->info_fifo); + cdrom_stop(mke->cdrom_dev); + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + break; + case 0x06: + fifo8_reset(&mke->info_fifo); + cdrom_stop(mke->cdrom_dev); + cdrom_eject(mke->cdrom_dev->id); + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + break; + case 0x07: + fifo8_reset(&mke->info_fifo); + cdrom_reload(mke->cdrom_dev->id); + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + break; + case CMD1_RESET: + mke_reset(mke); + break; + case CMD1_READ: { + uint32_t count = mke->command_buffer[6]; + uint8_t *buf = mke->cdbuffer; + int res = 0; + uint64_t lba = MSFtoLBA(mke->command_buffer[1], mke->command_buffer[2], + mke->command_buffer[3]) - 150; + int len __attribute__((unused)) = 0; + + CHECK_READY_READ(); + mke->data_to_push = 0; + + while (count) { + if ((res = cdrom_readsector_raw(mke->cdrom_dev, buf, lba, 0, + mke->sector_type, mke->sector_flags, &len, 0)) > 0) { + lba++; + buf += mke->cdrom_dev->sector_size; + mke->data_to_push += mke->cdrom_dev->sector_size; + } else { + mke_update_sense(mke, (res == 0) ? 0x10 : 0x05); + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + break; + } + count--; + } + if (count != 0) { + fifo8_reset(&mke->data_fifo); + mke->data_to_push = 0; + } else { + ui_sb_update_icon(SB_CDROM | mke->cdrom_dev->id, 1); + timer_on_auto(&mke->timer, (1000000.0 / (176400.0 * 2.)) * mke->data_to_push); + } + break; + } case CMD1_READSUBQ: + if (mke_pre_execution_check(mke)) { + mke_get_subq(mke, (uint8_t *) &x); + } + fifo8_reset(&mke->info_fifo); + fifo8_push_all(&mke->info_fifo, x, 11); + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + break; + case CMD1_SETMODE: + /* Returns 1 */ + fifo8_reset(&mke->info_fifo); + mke_log("CMD: SET MODE:"); + for (i = 0; i < 6; i++) { + mke_log("%02x ", mke->command_buffer[i + 1]); + } + mke_log("\n"); + switch (mke->command_buffer[1]) { + case 0: + switch (mke->command_buffer[2]) { + case 0x00: /* Cooked */ + mke->sector_type = 0x08 | (1 << 4); + mke->sector_flags = 0x10; + mke->cdrom_dev->sector_size = 2048; + break; + case 0x81: /* XA */ + case 0x01: /* User */ { + uint32_t sector_size = (mke->command_buffer[3] << 8) | + mke->command_buffer[4]; + + if (!sector_size) { + mke_update_sense(mke, 0x0e); + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + return; + } else { + switch (sector_size) { + case 2048: + mke->sector_type = 0x08 | (1 << 4); + mke->sector_flags = 0x10; + mke->cdrom_dev->sector_size = 2048; + break; + case 2052: + mke->sector_type = 0x18; + mke->sector_flags = 0x30; + mke->cdrom_dev->sector_size = 2052; + break; + case 2324: + mke->sector_type = 0x1b; + mke->sector_flags = 0x18; + mke->cdrom_dev->sector_size = 2324; + break; + case 2336: + mke->sector_type = 0x1c; + mke->sector_flags = 0x58; + mke->cdrom_dev->sector_size = 2336; + break; + case 2340: + mke->sector_type = 0x18; + mke->sector_flags = 0x78; + mke->cdrom_dev->sector_size = 2340; + break; + case 2352: + mke->sector_type = 0x00; + mke->sector_flags = 0xf8; + mke->cdrom_dev->sector_size = 2352; + break; + default: + mke_update_sense(mke, 0x0e); + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + return; + } + } + break; + } case 0x82: /* DA */ + mke->sector_type = 0x00; + mke->sector_flags = 0xf8; + mke->cdrom_dev->sector_size = 2352; + break; + default: + mke_update_sense(mke, 0x0e); + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + return; + } + + memcpy(mke->mode_select, &mke->command_buffer[2], 5); + break; + case 5: + mke->vol0 = mke->command_buffer[4]; + mke->vol1 = mke->command_buffer[6]; + mke->patch0 = mke->command_buffer[3]; + mke->patch1 = mke->command_buffer[5]; + break; + } + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + break; + case CMD1_GETMODE: + /* 6 */ + mke_log("GET MODE\n"); + if (mke->command_buffer[1] == 5) { + uint8_t volsettings[5] = { 0, mke->patch0, mke->vol0, mke->patch1, mke->vol1 }; + fifo8_push_all(&mke->info_fifo, volsettings, 5); + } else + fifo8_push_all(&mke->info_fifo, mke->mode_select, 5); + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + break; + case CMD1_PAUSERESUME: + CHECK_READY_READ(); + cdrom_audio_pause_resume(mke->cdrom_dev, mke->command_buffer[1] >> 7); + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + break; + case CMD1_CAPACITY: + /* 6 */ + mke_log("DISK CAPACITY\n"); + if (mke_pre_execution_check(mke)) + mke_disc_capacity(mke->cdrom_dev, (uint8_t *) &x); + fifo8_push_all(&mke->info_fifo, x, 5); + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + break; + case CMD1_DISKINFO: + /* 7 */ + mke_log("DISK INFO\n"); + fifo8_reset(&mke->info_fifo); + if (mke_pre_execution_check(mke)) + mke_disc_info(mke, (uint8_t *) &x); + fifo8_push_all(&mke->info_fifo, x, 6); + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + break; + case CMD1_READTOC: + fifo8_reset(&mke->info_fifo); + if (mke_pre_execution_check(mke)) + mke_read_toc(mke, (uint8_t *) &x, mke->command_buffer[2]); + fifo8_push_all(&mke->info_fifo, x, 8); + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + break; + case CMD1_PLAY_TI: + /* Index is ignored for now. */ + fifo8_reset(&mke->info_fifo); + CHECK_READY_READ(); + if (!cdrom_audio_play(mke->cdrom_dev, mke->command_buffer[1], mke->command_buffer[3], 2)) + mke_update_sense(mke, 0x10); + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + break; + case CMD1_PLAY_MSF: + fifo8_reset(&mke->info_fifo); + CHECK_READY_READ(); + mke_log("PLAY MSF:"); + for (i = 0; i < 6; i++) { + mke_log("%02x ", mke->command_buffer[i + 1]); + } + mke_log("\n"); + { + int msf = 1; + int pos = (mke->command_buffer[1] << 16) | (mke->command_buffer[2] << 8) | + mke->command_buffer[3]; + int len = (mke->command_buffer[4] << 16) | (mke->command_buffer[5] << 8) | + mke->command_buffer[6]; + if (!cdrom_audio_play(mke->cdrom_dev, pos, len, msf)){ + mke_update_sense(mke, 0x10); + } + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + } + break; + case CMD1_SEEK: + old_cd_status = mke->cdrom_dev->cd_status; + fifo8_reset(&mke->info_fifo); + CHECK_READY_READ(); + /* TODO: DOES THIS IMPACT CURRENT PLAY LENGTH? */ + mke_log("SEEK MSF:"); + for (i = 0; i < 6; i++) { + mke_log("%02x ", mke->command_buffer[i + 1]); + } + + cdrom_stop(mke->cdrom_dev); + /* Note for self: Panasonic/MKE drives send seek commands in MSF format. */ + cdrom_seek(mke->cdrom_dev, MSFtoLBA(mke->command_buffer[1], mke->command_buffer[2], + mke->command_buffer[3]) - 150, 0); + if ((old_cd_status == CD_STATUS_PLAYING) || (old_cd_status == CD_STATUS_PAUSED)) { + cdrom_audio_play(mke->cdrom_dev, mke->cdrom_dev->seek_pos, -1, 0); + cdrom_audio_pause_resume(mke->cdrom_dev, old_cd_status == CD_STATUS_PLAYING); + } + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + break; + case CMD1_SESSINFO: + fifo8_reset(&mke->info_fifo); + mke_log("CMD: READ SESSION INFO\n"); + if (mke_pre_execution_check(mke)) + mke_read_multisess(mke); + else + fifo8_push_all(&mke->info_fifo, x, 6); + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + break; + case CMD1_READ_UPC: + fifo8_reset(&mke->info_fifo); + mke_log("CMD: READ UPC\n"); + uint8_t upc[8] = { [0] = 80 }; + fifo8_push_all(&mke->info_fifo, upc, 8); + REPORT_IF_NOT_READY(); + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + break; + case CMD1_READ_ERR: + fifo8_reset(&mke->info_fifo); + mke_log("CMD: READ ERR\n"); + mke_log("ERROR: %02X %02X %02X %02X %02X %02X %02X %02X\n", + mke->sense[0], mke->sense[1], mke->sense[2], mke->sense[3], + mke->sense[4], mke->sense[5], mke->sense[6], mke->sense[7]); + { + uint8_t temp[8]; + memset(temp, mke->sense[2], 8); + fifo8_push_all(&mke->info_fifo, mke->sense, 8); + } + mke->is_error = 0; + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + break; + case CMD1_READ_VER: + /* SB2CD Expects 12 bytes, but drive only returns 11. */ + fifo8_reset(&mke->info_fifo); + fifo8_push_all(&mke->info_fifo, (uint8_t *) mke->ver, 10); + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + break; + case CMD1_STATUS: + fifo8_reset(&mke->info_fifo); + CHECK_READY_READ(); + fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke)); + break; + default: + mke_log("MKE: Unknown Commnad [%02x]\n", mke->command_buffer[0]); + break; + } + } else if (!mke->command_buffer_pending) { + /* + We are done but not in a command. + Should we make sure it is a valid command here? + */ + mke->command_buffer[0] = value; + mke->command_buffer_pending = 6; + } +} + +void +mke_write(uint16_t port, uint8_t val, void *priv) +{ + mke_interface_t *mki = (mke_interface_t *) priv; + mke_t *mke = &(mki->mke[mki->drvsel & 0x03]); + uint8_t sb[8] = { 0x00, 0x02, 0x01, 0x03 }; + + mke_log("[%04X:%08X] [W] %04X = %02X\n", CS, cpu_state.pc, port, val); + + /* if (mke->present || ((port & 0x0003) == 0x0003)) */ switch (port & 0x0003) { + case 0: + if (mke->present) + mke_command(mke, val); + break; + case 1: + if (mki->is_sb) + mki->data_select = val; + break; + case 2: + if (mke->present) + mke_reset(mke); + break; + case 3: + if (mki->is_sb) + mki->drvsel = (val & 0xfc) | sb[val & 0x03]; + else + mki->drvsel = val; + break; + default: + break; + } +} + +uint8_t +mke_read(uint16_t port, void *priv) +{ + mke_interface_t *mki = (mke_interface_t *) priv; + mke_t *mke = &(mki->mke[mki->drvsel & 0x03]); + uint8_t ret = 0x00; + + if (mke->present) switch (port & 0x0003) { + case 0: + /* Info */ + if (mki->is_sb && mki->data_select) + ret = fifo8_num_used(&mke->data_fifo) ? fifo8_pop(&mke->data_fifo) : 0x00; + else + ret = fifo8_num_used(&mke->info_fifo) ? fifo8_pop(&mke->info_fifo) : 0x00; + break; + case 1: + /* + Status: + - 1 = Status Change; + - 2 = Data Ready; + - 4 = Response Ready; + - 8 = Attention / Issue? + */ + ret = 0xff; + if (fifo8_num_used(&mke->data_fifo)) + /* Data FIFO */ + ret ^= 2; + if (fifo8_num_used(&mke->info_fifo)) + /* Status FIFO */ + ret ^= 4; + if (mke->is_error) + ret ^= 8; + break; + case 2: + /* Data */ + if (!mki->is_sb) + ret = fifo8_num_used(&mke->data_fifo) ? fifo8_pop(&mke->data_fifo) : 0x00; + break; + default: + mke_log("MKE Unknown Read Port: %04X\n", port); + ret = 0xff; + break; + } else if ((port & 0x0003) == 0x0003) + /* This is needed for the Windows 95 built-in driver to function correctly. */ + ret = 0xff; + + mke_log("[%04X:%08X] [R] %04X = %02X\n", CS, cpu_state.pc, port, ret); + + return ret; +} + +uint32_t +mke_get_volume(void *priv, int channel) +{ + mke_t *dev = (mke_t *) priv; + + return channel == 0 ? dev->vol0 : dev->vol1; +} + +uint32_t +mke_get_channel(void *priv, int channel) +{ + mke_t *dev = (mke_t *) priv; + + return channel == 0 ? dev->patch0 : dev->patch1; +} + +void +mke_close(void *priv) +{ + mke_interface_t *mki = (mke_interface_t *) calloc(1, sizeof(mke_interface_t)); + + for (uint8_t i = 0; i < 4; i++) { + mke_t *mke = &(mki->mke[i]); + + if (mke->present) { + timer_disable(&mke->timer); + + fifo8_destroy(&mke->data_fifo); + fifo8_destroy(&mke->info_fifo); + } + } + + free(mki); +} + +void * +mke_init(const device_t *info) +{ + mke_interface_t *mki = (mke_interface_t *) calloc(1, sizeof(mke_interface_t)); + int num = 0; + + for (uint8_t i = 0; i < CDROM_NUM; i++) { + if (cdrom[i].bus_type == CDROM_BUS_MKE) { + cdrom_t *dev = &cdrom[i]; + + mke_t *mke = &(mki->mke[dev->mke_channel]); + + mke->present = 1; + + memset(mke->ver, 0x00, 512); + cdrom_generate_name_mke(dev->type, mke->ver); + mke->ver[10] = 0x00; + + fifo8_create(&mke->info_fifo, 128); + fifo8_create(&mke->data_fifo, 624240 * 2); + fifo8_reset(&mke->info_fifo); + fifo8_reset(&mke->data_fifo); + mke->cdrom_dev = dev; + mke->command_buffer_pending = 7; + mke->sector_type = 0x08 | (1 << 4); + mke->sector_flags = 0x10; + mke->mode_select[2] = 0x08; + mke->patch0 = 0x01; + mke->patch1 = 0x02; + mke->vol0 = 255; + mke->vol1 = 255; + dev->sector_size = 2048; + + dev->priv = mke; + dev->insert = mke_cdrom_insert; + dev->get_volume = mke_get_volume; + dev->get_channel = mke_get_channel; + dev->cached_sector = -1; + + timer_add(&mke->timer, mke_command_callback, mke, 0); + + num++; + + if (num == 4) + break; + } + } + + mki->is_sb = info->local; + + uint16_t base = device_get_config_hex16("base"); + io_sethandler(base, 4, mke_read, NULL, NULL, mke_write, NULL, NULL, mki); + + return mki; +} + +static const device_config_t mke_config[] = { + // clang-format off + { + .name = "base", + .description = "Address", + .type = CONFIG_HEX16, + .default_string = NULL, + .default_int = 0x250, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "220H", .value = 0x220 }, + { .description = "230H", .value = 0x230 }, + { .description = "250H", .value = 0x250 }, + { .description = "260H", .value = 0x260 }, + { .description = "270H", .value = 0x270 }, + { .description = "290H", .value = 0x290 }, + { .description = "300H", .value = 0x300 }, + { .description = "310H", .value = 0x310 }, + { .description = "320H", .value = 0x320 }, + { .description = "330H", .value = 0x330 }, + { .description = "340H", .value = 0x340 }, + { NULL } + }, + .bios = { { 0 } } + }, + { .name = "", .description = "", .type = CONFIG_END } +// clang-format off +}; + +const device_t mke_cdrom_device = { + .name = "Panasonic/MKE CD-ROM interface (Creative)", + .internal_name = "mkecd", + .flags = DEVICE_ISA, + .local = 1, + .init = mke_init, + .close = mke_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = mke_config +}; + +const device_t mke_cdrom_noncreative_device = { + .name = "Panasonic/MKE CD-ROM interface", + .internal_name = "mkecd_normal", + .flags = DEVICE_ISA, + .local = 0, + .init = mke_init, + .close = mke_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = mke_config +}; diff --git a/src/chipset/scamp.c b/src/chipset/scamp.c index 855175dcd..7ad7b3db2 100644 --- a/src/chipset/scamp.c +++ b/src/chipset/scamp.c @@ -840,7 +840,7 @@ recalc_sltptr(scamp_t *dev) recalc_ems(dev); } } else { - for (uint8_t i = 0; i < (sltptr / EMS_PGSIZE); i++) + for (uint32_t i = 0; i < (sltptr / EMS_PGSIZE); i++) scamp_mem_update_state(dev, i * EMS_PGSIZE, EMS_PGSIZE, 0x00, MEM_FMASK_SLOTBUS); for (uint8_t i = (sltptr / EMS_PGSIZE); i < 40; i++) diff --git a/src/chipset/wd76c10.c b/src/chipset/wd76c10.c index 48bb56483..bc3b4324c 100644 --- a/src/chipset/wd76c10.c +++ b/src/chipset/wd76c10.c @@ -841,7 +841,7 @@ wd76c10_pf_loc_recalc(wd76c10_t *dev) uint8_t ems_page; uint32_t base; - for (uint8_t i = (0x031 + pf_loc); i <= (0x037 + pf_loc); i++) { + for (uint16_t i = (0x031 + pf_loc); i <= (0x037 + pf_loc); i++) { ems_page = (i - 0x10) & 0xf7; dev->mem_pages[i] = ems_page; base = ((uint32_t) i) << 14; diff --git a/src/config.c b/src/config.c index 9aa4a15e5..466114e83 100644 --- a/src/config.c +++ b/src/config.c @@ -56,6 +56,7 @@ #include <86box/fdd.h> #include <86box/fdc_ext.h> #include <86box/gameport.h> +#include <86box/keyboard.h> #include <86box/serial_passthrough.h> #include <86box/machine.h> #include <86box/mouse.h> @@ -65,7 +66,7 @@ #include <86box/scsi_device.h> #include <86box/cdrom.h> #include <86box/cdrom_interface.h> -#include <86box/zip.h> +#include <86box/rdisk.h> #include <86box/mo.h> #include <86box/sound.h> #include <86box/midi.h> @@ -453,9 +454,6 @@ load_video(void) if (((gfxcard[0] == VID_INTERNAL) && machine_has_flags(machine, MACHINE_VIDEO_8514A)) || video_card_get_flags(gfxcard[0]) == VIDEO_FLAG_TYPE_8514) ini_section_delete_var(cat, "8514a"); - if (((gfxcard[0] == VID_INTERNAL) && machine_has_flags(machine, MACHINE_VIDEO_XGA)) || - video_card_get_flags(gfxcard[0]) == VIDEO_FLAG_TYPE_XGA) - ini_section_delete_var(cat, "xga"); voodoo_enabled = !!ini_section_get_int(cat, "voodoo", 0); ibm8514_standalone_enabled = !!ini_section_get_int(cat, "8514a", 0); @@ -483,6 +481,23 @@ load_input_devices(void) char temp[512]; char *p; + p = ini_section_get_string(cat, "keyboard_type", NULL); + if (p != NULL) + keyboard_type = keyboard_get_from_internal_name(p); + else if (machine_has_bus(machine, MACHINE_BUS_PS2_PORTS)) { + if (machine_has_flags(machine, MACHINE_KEYBOARD_JIS)) + keyboard_type = KEYBOARD_TYPE_PS55; + else + keyboard_type = KEYBOARD_TYPE_PS2; + } else if (machine_has_bus(machine, MACHINE_BUS_ISA16) || + machine_has_bus(machine, MACHINE_BUS_PCI)) { + if (machine_has_flags(machine, MACHINE_KEYBOARD_JIS)) + keyboard_type = KEYBOARD_TYPE_AX; + else + keyboard_type = KEYBOARD_TYPE_AT; + } else + keyboard_type = KEYBOARD_TYPE_PC_XT; + p = ini_section_get_string(cat, "mouse_type", NULL); if (p != NULL) mouse_type = mouse_get_from_internal_name(p); @@ -810,12 +825,16 @@ load_image_file(char *dest, char *p, uint8_t *ui_wp) prefix = "wp://"; if (path_abs(p)) { - if (strlen(p) > (MAX_IMAGE_PATH_LEN - 1)) + if ((strlen(prefix) + strlen(p)) > (MAX_IMAGE_PATH_LEN - 1)) ret = 1; else snprintf(dest, MAX_IMAGE_PATH_LEN, "%s%s", prefix, p); - } else - snprintf(dest, MAX_IMAGE_PATH_LEN, "%s%s%s%s", prefix, usr_path, path_get_slash(usr_path), p); + } else { + if ((strlen(prefix) + strlen(usr_path) + strlen(path_get_slash(usr_path)) + strlen(p)) > (MAX_IMAGE_PATH_LEN - 1)) + ret = 1; + else + snprintf(dest, MAX_IMAGE_PATH_LEN, "%s%s%s%s", prefix, usr_path, path_get_slash(usr_path), p); + } path_normalize(dest); @@ -831,7 +850,6 @@ load_storage_controllers(void) char *p; char temp[512]; int min = 0; - int free_p = 0; for (int c = min; c < SCSI_CARD_MAX; c++) { sprintf(temp, "scsicard_%d", c + 1); @@ -850,6 +868,8 @@ load_storage_controllers(void) else fdc_current[0] = FDC_INTERNAL; #else + int free_p = 0; + if (p == NULL) { if (machine_has_flags(machine, MACHINE_FDC)) { p = (char *) malloc((strlen("internal") + 1) * sizeof(char)); @@ -870,46 +890,54 @@ load_storage_controllers(void) } #endif - p = ini_section_get_string(cat, "hdc", NULL); - if (p == NULL) { - if (machine_has_flags(machine, MACHINE_HDC)) { - p = (char *) malloc((strlen("internal") + 1) * sizeof(char)); - strcpy(p, "internal"); - } else { - p = (char *) malloc((strlen("none") + 1) * sizeof(char)); - strcpy(p, "none"); - } - free_p = 1; - } - /* Migrate renamed and merged cards. */ - if (!strcmp(p, "xtide_plus")) { - hdc_current[0] = hdc_get_from_internal_name("xtide"); - migration_cat = ini_find_or_create_section(config, "PC/XT XTIDE"); - ini_section_set_string(migration_cat, "bios", "xt_plus"); - } else if (!strcmp(p, "xtide_at_386")) { - hdc_current[0] = hdc_get_from_internal_name("xtide_at"); - migration_cat = ini_find_or_create_section(config, "PC/AT XTIDE"); - ini_section_set_string(migration_cat, "bios", "at_386"); - } else - hdc_current[0] = hdc_get_from_internal_name(p); + for (int c = min; c < HDC_MAX; c++) { + sprintf(temp, "hdc_%d", c + 1); - if (free_p) { - free(p); - p = NULL; + p = ini_section_get_string(cat, temp, NULL); + if (p != NULL) + hdc_current[c] = hdc_get_from_internal_name(p); + else + hdc_current[c] = 0; } + /* Backwards compatibility for single HDC and standalone tertiary/quaternary IDE from v4.2 and older. */ + const char *legacy_cards[] = { NULL, "ide_ter", "ide_qua" }; + p = ini_section_get_string(cat, "hdc", NULL); + for (int i = !(p || machine_has_flags(machine, MACHINE_HDC)), j = 0; i < (sizeof(legacy_cards) / sizeof(legacy_cards[0])); i++) { + if (!legacy_cards[i] || (ini_section_get_int(cat, legacy_cards[i], 0) == 1)) { + /* Migrate to the first available HDC slot. */ + for (; j < (sizeof(hdc_current) / sizeof(hdc_current[0])); j++) { + if (!hdc_current[j]) { + if (!legacy_cards[i]) { + if (!p) { + hdc_current[j] = hdc_get_from_internal_name("internal"); + } else if (!strcmp(p, "xtide_plus")) { + hdc_current[j] = hdc_get_from_internal_name("xtide"); + sprintf(temp, "PC/XT XTIDE #%i", j + 1); + migration_cat = ini_find_or_create_section(config, temp); + ini_section_set_string(migration_cat, "bios", "xt_plus"); + } else if (!strcmp(p, "xtide_at_386")) { + hdc_current[j] = hdc_get_from_internal_name("xtide_at"); + sprintf(temp, "PC/AT XTIDE #%i", j + 1); + migration_cat = ini_find_or_create_section(config, temp); + ini_section_set_string(migration_cat, "bios", "at_386"); + } else { + hdc_current[j] = hdc_get_from_internal_name(p); + } + } else { + hdc_current[j] = hdc_get_from_internal_name(legacy_cards[i]); + } + break; + } + } + } + } + ini_section_delete_var(cat, "hdc"); + p = ini_section_get_string(cat, "cdrom_interface", NULL); if (p != NULL) cdrom_interface_current = cdrom_interface_get_from_internal_name(p); - if (free_p) { - free(p); - p = NULL; - } - - ide_ter_enabled = !!ini_section_get_int(cat, "ide_ter", 0); - ide_qua_enabled = !!ini_section_get_int(cat, "ide_qua", 0); - if (machine_has_bus(machine, MACHINE_BUS_CASSETTE)) cassette_enable = !!ini_section_get_int(cat, "cassette_enabled", 0); else @@ -1335,11 +1363,23 @@ load_floppy_and_cdrom_drives(void) ini_section_delete_var(cat, temp); /* Default values, needed for proper operation of the Settings dialog. */ - cdrom[c].ide_channel = cdrom[c].scsi_device_id = c + 2; + cdrom[c].mke_channel = cdrom[c].ide_channel = cdrom[c].scsi_device_id = c & 3; - if (cdrom[c].bus_type == CDROM_BUS_ATAPI) { + if (cdrom[c].bus_type == CDROM_BUS_MKE) { + char *type = cdrom_get_internal_name(cdrom_get_type(c)); + + if (strstr(type, "cr56") == NULL) + cdrom_set_type(c, cdrom_get_from_internal_name("cr563_075")); + + sprintf(temp, "cdrom_%02i_mke_channel", c + 1); + cdrom[c].mke_channel = ini_section_get_int(cat, temp, c & 3); + + if (cdrom[c].mke_channel > 3) + cdrom[c].mke_channel = 3; + + } else if (cdrom[c].bus_type == CDROM_BUS_ATAPI) { sprintf(temp, "cdrom_%02i_ide_channel", c + 1); - sprintf(tmp2, "%01u:%01u", (c + 2) >> 1, (c + 2) & 1); + sprintf(tmp2, "%01u:%01u", (c & 3) >> 1, (c & 3) & 1); p = ini_section_get_string(cat, temp, tmp2); sscanf(p, "%01u:%01u", &board, &dev); board &= 3; @@ -1350,13 +1390,13 @@ load_floppy_and_cdrom_drives(void) cdrom[c].ide_channel = 7; } else if (cdrom[c].bus_type == CDROM_BUS_SCSI) { sprintf(temp, "cdrom_%02i_scsi_location", c + 1); - sprintf(tmp2, "%01u:%02u", SCSI_BUS_MAX, c + 2); + sprintf(tmp2, "%01u:%02u", SCSI_BUS_MAX, c & 3); p = ini_section_get_string(cat, temp, tmp2); sscanf(p, "%01u:%02u", &board, &dev); if (board >= SCSI_BUS_MAX) { /* Invalid bus - check legacy ID */ sprintf(temp, "cdrom_%02i_scsi_id", c + 1); - cdrom[c].scsi_device_id = ini_section_get_int(cat, temp, c + 2); + cdrom[c].scsi_device_id = ini_section_get_int(cat, temp, c & 3); if (cdrom[c].scsi_device_id > 15) cdrom[c].scsi_device_id = 15; @@ -1367,6 +1407,11 @@ load_floppy_and_cdrom_drives(void) } } + if (cdrom[c].bus_type != CDROM_BUS_MKE) { + sprintf(temp, "cdrom_%02i_mke_channel", c + 1); + ini_section_delete_var(cat, temp); + } + if (cdrom[c].bus_type != CDROM_BUS_ATAPI) { sprintf(temp, "cdrom_%02i_ide_channel", c + 1); ini_section_delete_var(cat, temp); @@ -1458,32 +1503,35 @@ load_other_removable_devices(void) unsigned int board = 0; unsigned int dev = 0; int c; + int legacy_zip_drives = 0; memset(temp, 0x00, sizeof(temp)); - for (c = 0; c < ZIP_NUM; c++) { + for (c = 0; c < RDISK_NUM; c++) { sprintf(temp, "zip_%02i_parameters", c + 1); p = ini_section_get_string(cat, temp, NULL); - if (p != NULL) - sscanf(p, "%01u, %s", &zip_drives[c].is_250, s); - else - sscanf("0, none", "%01u, %s", &zip_drives[c].is_250, s); - zip_drives[c].bus_type = hdd_string_to_bus(s, 1); + if (p != NULL) { + sscanf(p, "%01u, %s", &rdisk_drives[c].type, s); + legacy_zip_drives++; + } else + sscanf("0, none", "%01u, %s", &rdisk_drives[c].type, s); + rdisk_drives[c].type++; + rdisk_drives[c].bus_type = hdd_string_to_bus(s, 1); /* Default values, needed for proper operation of the Settings dialog. */ - zip_drives[c].ide_channel = zip_drives[c].scsi_device_id = c + 2; + rdisk_drives[c].ide_channel = rdisk_drives[c].scsi_device_id = c + 2; - if (zip_drives[c].bus_type == ZIP_BUS_ATAPI) { + if (rdisk_drives[c].bus_type == RDISK_BUS_ATAPI) { sprintf(temp, "zip_%02i_ide_channel", c + 1); sprintf(tmp2, "%01u:%01u", (c + 2) >> 1, (c + 2) & 1); p = ini_section_get_string(cat, temp, tmp2); sscanf(p, "%01u:%01u", &board, &dev); board &= 3; dev &= 1; - zip_drives[c].ide_channel = (board << 1) + dev; + rdisk_drives[c].ide_channel = (board << 1) + dev; - if (zip_drives[c].ide_channel > 7) - zip_drives[c].ide_channel = 7; - } else if (zip_drives[c].bus_type == ZIP_BUS_SCSI) { + if (rdisk_drives[c].ide_channel > 7) + rdisk_drives[c].ide_channel = 7; + } else if (rdisk_drives[c].bus_type == RDISK_BUS_SCSI) { sprintf(temp, "zip_%02i_scsi_location", c + 1); sprintf(tmp2, "%01u:%02u", SCSI_BUS_MAX, c + 2); p = ini_section_get_string(cat, temp, tmp2); @@ -1491,23 +1539,23 @@ load_other_removable_devices(void) if (board >= SCSI_BUS_MAX) { /* Invalid bus - check legacy ID */ sprintf(temp, "zip_%02i_scsi_id", c + 1); - zip_drives[c].scsi_device_id = ini_section_get_int(cat, temp, c + 2); + rdisk_drives[c].scsi_device_id = ini_section_get_int(cat, temp, c + 2); - if (zip_drives[c].scsi_device_id > 15) - zip_drives[c].scsi_device_id = 15; + if (rdisk_drives[c].scsi_device_id > 15) + rdisk_drives[c].scsi_device_id = 15; } else { board %= SCSI_BUS_MAX; dev &= 15; - zip_drives[c].scsi_device_id = (board << 4) + dev; + rdisk_drives[c].scsi_device_id = (board << 4) + dev; } } - if (zip_drives[c].bus_type != ZIP_BUS_ATAPI) { + if (rdisk_drives[c].bus_type != RDISK_BUS_ATAPI) { sprintf(temp, "zip_%02i_ide_channel", c + 1); ini_section_delete_var(cat, temp); } - if (zip_drives[c].bus_type != ZIP_BUS_SCSI) { + if (rdisk_drives[c].bus_type != RDISK_BUS_SCSI) { sprintf(temp, "zip_%02i_scsi_location", c + 1); ini_section_delete_var(cat, temp); } @@ -1519,49 +1567,154 @@ load_other_removable_devices(void) p = ini_section_get_string(cat, temp, ""); sprintf(temp, "zip_%02i_writeprot", c + 1); - zip_drives[c].read_only = ini_section_get_int(cat, temp, 0); + rdisk_drives[c].read_only = ini_section_get_int(cat, temp, 0); ini_section_delete_var(cat, temp); if (!strcmp(p, usr_path)) p[0] = 0x00; if (p[0] != 0x00) { - if (load_image_file(zip_drives[c].image_path, p, &(zip_drives[c].read_only))) + if (load_image_file(rdisk_drives[c].image_path, p, &(rdisk_drives[c].read_only))) fatal("Configuration: Length of zip_%02i_image_path is more than 511\n", c + 1); } for (int i = 0; i < MAX_PREV_IMAGES; i++) { - zip_drives[c].image_history[i] = (char *) calloc((MAX_IMAGE_PATH_LEN + 1) << 1, sizeof(char)); + rdisk_drives[c].image_history[i] = (char *) calloc((MAX_IMAGE_PATH_LEN + 1) << 1, sizeof(char)); sprintf(temp, "zip_%02i_image_history_%02i", c + 1, i + 1); p = ini_section_get_string(cat, temp, NULL); if (p) { - if (load_image_file(zip_drives[c].image_history[i], p, NULL)) + if (load_image_file(rdisk_drives[c].image_history[i], p, NULL)) fatal("Configuration: Length of zip_%02i_image_history_%02i is more than %i\n", c + 1, i + 1, MAX_IMAGE_PATH_LEN - 1); } } - /* If the ZIP drive is disabled, delete all its variables. */ - if (zip_drives[c].bus_type == ZIP_BUS_DISABLED) { - sprintf(temp, "zip_%02i_parameters", c + 1); + sprintf(temp, "zip_%02i_parameters", c + 1); + ini_section_delete_var(cat, temp); + + sprintf(temp, "zip_%02i_ide_channel", c + 1); + ini_section_delete_var(cat, temp); + + sprintf(temp, "zip_%02i_scsi_location", c + 1); + ini_section_delete_var(cat, temp); + + sprintf(temp, "zip_%02i_image_path", c + 1); + ini_section_delete_var(cat, temp); + + for (int i = 0; i < MAX_PREV_IMAGES; i++) { + sprintf(temp, "zip_%02i_image_history_%02i", c + 1, i + 1); + ini_section_delete_var(cat, temp); + } + } + + if (legacy_zip_drives > 0) + goto go_to_mo; + + memset(temp, 0x00, sizeof(temp)); + for (c = 0; c < RDISK_NUM; c++) { + sprintf(temp, "rdisk_%02i_parameters", c + 1); + p = ini_section_get_string(cat, temp, NULL); + if (p != NULL) { + sscanf(p, "%01u, %s", &rdisk_drives[c].type, s); + legacy_zip_drives++; + } else + sscanf("0, none", "%01u, %s", &rdisk_drives[c].type, s); + rdisk_drives[c].bus_type = hdd_string_to_bus(s, 1); + + /* Default values, needed for proper operation of the Settings dialog. */ + rdisk_drives[c].ide_channel = rdisk_drives[c].scsi_device_id = c + 2; + + if (rdisk_drives[c].bus_type == RDISK_BUS_ATAPI) { + sprintf(temp, "rdisk_%02i_ide_channel", c + 1); + sprintf(tmp2, "%01u:%01u", (c + 2) >> 1, (c + 2) & 1); + p = ini_section_get_string(cat, temp, tmp2); + sscanf(p, "%01u:%01u", &board, &dev); + board &= 3; + dev &= 1; + rdisk_drives[c].ide_channel = (board << 1) + dev; + + if (rdisk_drives[c].ide_channel > 7) + rdisk_drives[c].ide_channel = 7; + } else if (rdisk_drives[c].bus_type == RDISK_BUS_SCSI) { + sprintf(temp, "rdisk_%02i_scsi_location", c + 1); + sprintf(tmp2, "%01u:%02u", SCSI_BUS_MAX, c + 2); + p = ini_section_get_string(cat, temp, tmp2); + sscanf(p, "%01u:%02u", &board, &dev); + if (board >= SCSI_BUS_MAX) { + /* Invalid bus - check legacy ID */ + sprintf(temp, "rdisk_%02i_scsi_id", c + 1); + rdisk_drives[c].scsi_device_id = ini_section_get_int(cat, temp, c + 2); + + if (rdisk_drives[c].scsi_device_id > 15) + rdisk_drives[c].scsi_device_id = 15; + } else { + board %= SCSI_BUS_MAX; + dev &= 15; + rdisk_drives[c].scsi_device_id = (board << 4) + dev; + } + } + + if (rdisk_drives[c].bus_type != RDISK_BUS_ATAPI) { + sprintf(temp, "rdisk_%02i_ide_channel", c + 1); + ini_section_delete_var(cat, temp); + } + + if (rdisk_drives[c].bus_type != RDISK_BUS_SCSI) { + sprintf(temp, "rdisk_%02i_scsi_location", c + 1); + ini_section_delete_var(cat, temp); + } + + sprintf(temp, "rdisk_%02i_scsi_id", c + 1); + ini_section_delete_var(cat, temp); + + sprintf(temp, "rdisk_%02i_image_path", c + 1); + p = ini_section_get_string(cat, temp, ""); + + sprintf(temp, "rdisk_%02i_writeprot", c + 1); + rdisk_drives[c].read_only = ini_section_get_int(cat, temp, 0); + ini_section_delete_var(cat, temp); + + if (!strcmp(p, usr_path)) + p[0] = 0x00; + + if (p[0] != 0x00) { + if (load_image_file(rdisk_drives[c].image_path, p, &(rdisk_drives[c].read_only))) + fatal("Configuration: Length of rdisk_%02i_image_path is more than 511\n", c + 1); + } + + for (int i = 0; i < MAX_PREV_IMAGES; i++) { + rdisk_drives[c].image_history[i] = (char *) calloc((MAX_IMAGE_PATH_LEN + 1) << 1, sizeof(char)); + sprintf(temp, "rdisk_%02i_image_history_%02i", c + 1, i + 1); + p = ini_section_get_string(cat, temp, NULL); + if (p) { + if (load_image_file(rdisk_drives[c].image_history[i], p, NULL)) + fatal("Configuration: Length of rdisk_%02i_image_history_%02i is more than %i\n", + c + 1, i + 1, MAX_IMAGE_PATH_LEN - 1); + } + } + + /* If the removable disk drive is disabled, delete all its variables. */ + if (rdisk_drives[c].bus_type == RDISK_BUS_DISABLED) { + sprintf(temp, "rdisk_%02i_parameters", c + 1); ini_section_delete_var(cat, temp); - sprintf(temp, "zip_%02i_ide_channel", c + 1); + sprintf(temp, "rdisk_%02i_ide_channel", c + 1); ini_section_delete_var(cat, temp); - sprintf(temp, "zip_%02i_scsi_location", c + 1); + sprintf(temp, "rdisk_%02i_scsi_location", c + 1); ini_section_delete_var(cat, temp); - sprintf(temp, "zip_%02i_image_path", c + 1); + sprintf(temp, "rdisk_%02i_image_path", c + 1); ini_section_delete_var(cat, temp); for (int i = 0; i < MAX_PREV_IMAGES; i++) { - sprintf(temp, "zip_%02i_image_history_%02i", c + 1, i + 1); + sprintf(temp, "rdisk_%02i_image_history_%02i", c + 1, i + 1); ini_section_delete_var(cat, temp); } } } +go_to_mo: memset(temp, 0x00, sizeof(temp)); for (c = 0; c < MO_NUM; c++) { sprintf(temp, "mo_%02i_parameters", c + 1); @@ -1820,7 +1973,7 @@ config_load(void) #ifdef USE_IOCTL memset(cdrom_ioctl, 0, sizeof(cdrom_ioctl_t) * CDROM_NUM); #endif - memset(zip_drives, 0, sizeof(zip_drive_t)); + memset(rdisk_drives, 0, sizeof(rdisk_drive_t)); config = ini_read(cfg_path); @@ -1847,7 +2000,11 @@ config_load(void) vid_resize = 0; video_fullscreen_scale = 1; time_sync = TIME_SYNC_ENABLED; - hdc_current[0] = hdc_get_from_internal_name("none"); + + keyboard_type = KEYBOARD_TYPE_PC_XT; + + for (int i = 0; i < HDC_MAX; i++) + hdc_current[i] = hdc_get_from_internal_name("none"); com_ports[0].enabled = 1; com_ports[1].enabled = 1; @@ -2272,6 +2429,8 @@ save_input_devices(void) char temp[512]; char tmp2[512]; + ini_section_set_string(cat, "keyboard_type", keyboard_get_internal_name(keyboard_type)); + ini_section_set_string(cat, "mouse_type", mouse_get_internal_name(mouse_type)); if (!joystick_type) { @@ -2603,16 +2762,39 @@ save_storage_controllers(void) ini_section_set_string(cat, "fdc", fdc_card_get_internal_name(fdc_current[0])); - if (machine_has_flags(machine, MACHINE_HDC)) - def_hdc = "internal"; - else - def_hdc = "none"; + ini_section_delete_var(cat, "hdc"); - if (!strcmp(hdc_get_internal_name(hdc_current[0]), def_hdc)) - ini_section_delete_var(cat, "hdc"); - else - ini_section_set_string(cat, "hdc", - hdc_get_internal_name(hdc_current[0])); + for (c = 0; c < HDC_MAX; c++) { + sprintf(temp, "hdc_%d", c + 1); + + if ((c == 0) && machine_has_flags(machine, MACHINE_HDC)) + def_hdc = "internal"; + else + def_hdc = "none"; + + if (!strcmp(hdc_get_internal_name(hdc_current[c]), def_hdc)) + ini_section_delete_var(cat, temp); + else + ini_section_set_string(cat, temp, + hdc_get_internal_name(hdc_current[c])); + } + + /* Downgrade compatibility for standalone tertiary/quaternary IDE from v4.2 and older. */ + const char *legacy_cards[] = { "ide_ter", "ide_qua" }; + for (int i = 0; i < (sizeof(legacy_cards) / sizeof(legacy_cards[0])); i++) { + int card_id = hdc_get_from_internal_name(legacy_cards[i]); + for (int j = 0; j < (sizeof(sound_card_current) / sizeof(sound_card_current[0])); j++) { + if (hdc_current[j] == card_id) { + /* A special value of 2 still enables the cards on older versions, + but lets newer versions know that they've already been migrated. */ + ini_section_set_int(cat, legacy_cards[i], 2); + card_id = 0; /* mark as found */ + break; + } + } + if (card_id > 0) /* not found */ + ini_section_delete_var(cat, legacy_cards[i]); + } if (cdrom_interface_current == 0) ini_section_delete_var(cat, "cdrom_interface"); @@ -2620,16 +2802,6 @@ save_storage_controllers(void) ini_section_set_string(cat, "cdrom_interface", cdrom_interface_get_internal_name(cdrom_interface_current)); - if (ide_ter_enabled == 0) - ini_section_delete_var(cat, "ide_ter"); - else - ini_section_set_int(cat, "ide_ter", ide_ter_enabled); - - if (ide_qua_enabled == 0) - ini_section_delete_var(cat, "ide_qua"); - else - ini_section_set_int(cat, "ide_qua", ide_qua_enabled); - if (cassette_enable == 0) ini_section_delete_var(cat, "cassette_enabled"); else @@ -2967,8 +3139,7 @@ save_floppy_and_cdrom_drives(void) sprintf(temp, "cdrom_%02i_type", c + 1); char *tn = cdrom_get_internal_name(cdrom_get_type(c)); - if ((cdrom[c].bus_type == 0) || (cdrom[c].bus_type == CDROM_BUS_MITSUMI) || - !strcmp(tn, "86cd")) + if ((cdrom[c].bus_type == 0) || (cdrom[c].bus_type == CDROM_BUS_MITSUMI) || !strcmp(tn, "86cd")) ini_section_delete_var(cat, temp); else ini_section_set_string(cat, temp, tn); @@ -2987,6 +3158,13 @@ save_floppy_and_cdrom_drives(void) ini_section_set_string(cat, temp, tmp2); } + sprintf(temp, "cdrom_%02i_mke_channel", c + 1); + if (cdrom[c].bus_type != CDROM_BUS_MKE) + ini_section_delete_var(cat, temp); + else { + ini_section_set_int(cat, temp, cdrom[c].mke_channel); + } + sprintf(temp, "cdrom_%02i_ide_channel", c + 1); if (cdrom[c].bus_type != CDROM_BUS_ATAPI) ini_section_delete_var(cat, temp); @@ -3045,52 +3223,52 @@ save_other_removable_devices(void) char tmp2[512]; int c; - for (c = 0; c < ZIP_NUM; c++) { - sprintf(temp, "zip_%02i_parameters", c + 1); - if (zip_drives[c].bus_type == 0) { + for (c = 0; c < RDISK_NUM; c++) { + sprintf(temp, "rdisk_%02i_parameters", c + 1); + if (rdisk_drives[c].bus_type == 0) { ini_section_delete_var(cat, temp); } else { - sprintf(tmp2, "%u, %s", zip_drives[c].is_250, - hdd_bus_to_string(zip_drives[c].bus_type, 1)); + sprintf(tmp2, "%u, %s", rdisk_drives[c].type, + hdd_bus_to_string(rdisk_drives[c].bus_type, 1)); ini_section_set_string(cat, temp, tmp2); } - sprintf(temp, "zip_%02i_ide_channel", c + 1); - if (zip_drives[c].bus_type != ZIP_BUS_ATAPI) + sprintf(temp, "rdisk_%02i_ide_channel", c + 1); + if (rdisk_drives[c].bus_type != RDISK_BUS_ATAPI) ini_section_delete_var(cat, temp); else { - sprintf(tmp2, "%01u:%01u", zip_drives[c].ide_channel >> 1, - zip_drives[c].ide_channel & 1); + sprintf(tmp2, "%01u:%01u", rdisk_drives[c].ide_channel >> 1, + rdisk_drives[c].ide_channel & 1); ini_section_set_string(cat, temp, tmp2); } - sprintf(temp, "zip_%02i_scsi_id", c + 1); + sprintf(temp, "rdisk_%02i_scsi_id", c + 1); ini_section_delete_var(cat, temp); - sprintf(temp, "zip_%02i_writeprot", c + 1); + sprintf(temp, "rdisk_%02i_writeprot", c + 1); ini_section_delete_var(cat, temp); - sprintf(temp, "zip_%02i_scsi_location", c + 1); - if (zip_drives[c].bus_type != ZIP_BUS_SCSI) + sprintf(temp, "rdisk_%02i_scsi_location", c + 1); + if (rdisk_drives[c].bus_type != RDISK_BUS_SCSI) ini_section_delete_var(cat, temp); else { - sprintf(tmp2, "%01u:%02u", zip_drives[c].scsi_device_id >> 4, - zip_drives[c].scsi_device_id & 15); + sprintf(tmp2, "%01u:%02u", rdisk_drives[c].scsi_device_id >> 4, + rdisk_drives[c].scsi_device_id & 15); ini_section_set_string(cat, temp, tmp2); } - sprintf(temp, "zip_%02i_image_path", c + 1); - if ((zip_drives[c].bus_type == 0) || (strlen(zip_drives[c].image_path) == 0)) + sprintf(temp, "rdisk_%02i_image_path", c + 1); + if ((rdisk_drives[c].bus_type == 0) || (strlen(rdisk_drives[c].image_path) == 0)) ini_section_delete_var(cat, temp); else - save_image_file(cat, temp, zip_drives[c].image_path); + save_image_file(cat, temp, rdisk_drives[c].image_path); for (int i = 0; i < MAX_PREV_IMAGES; i++) { - sprintf(temp, "zip_%02i_image_history_%02i", c + 1, i + 1); - if ((zip_drives[c].image_history[i] == 0) || strlen(zip_drives[c].image_history[i]) == 0) + sprintf(temp, "rdisk_%02i_image_history_%02i", c + 1, i + 1); + if ((rdisk_drives[c].image_history[i] == 0) || strlen(rdisk_drives[c].image_history[i]) == 0) ini_section_delete_var(cat, temp); else - save_image_file(cat, temp, zip_drives[c].image_history[i]); + save_image_file(cat, temp, rdisk_drives[c].image_history[i]); } } diff --git a/src/cpu/808x.c b/src/cpu/808x.c index edab16567..14e56f23a 100644 --- a/src/cpu/808x.c +++ b/src/cpu/808x.c @@ -539,10 +539,9 @@ pfq_write(void) static uint8_t pfq_read(void) { - uint8_t temp, i; + uint8_t temp = pfq[0]; - temp = pfq[0]; - for (i = 0; i < (pfq_size - 1); i++) + for (int i = 0; i < (pfq_size - 1); i++) pfq[i] = pfq[i + 1]; pfq_pos--; cpu_state.pc = (cpu_state.pc + 1) & 0xffff; diff --git a/src/device.c b/src/device.c index 910ff4ff9..46752919a 100644 --- a/src/device.c +++ b/src/device.c @@ -469,7 +469,6 @@ device_get_bios_local(const device_t *dev, const char *internal_name) (bios->name != NULL) && (bios->internal_name != NULL) && (bios->files_no != 0)) { - printf("Internal name was: %s", internal_name); if (!strcmp(internal_name, bios->internal_name)) return bios->local; bios++; diff --git a/src/device/CMakeLists.txt b/src/device/CMakeLists.txt index 89706706f..abaf87d2f 100644 --- a/src/device/CMakeLists.txt +++ b/src/device/CMakeLists.txt @@ -38,6 +38,7 @@ add_library(dev OBJECT isapnp.c kbc_at.c kbc_at_dev.c + kbc_xt.c keyboard.c keyboard_at.c keyboard_xt.c diff --git a/src/device/isamem.c b/src/device/isamem.c index b1095da1f..af172d54d 100644 --- a/src/device/isamem.c +++ b/src/device/isamem.c @@ -1391,10 +1391,10 @@ static const device_config_t ems5150_config[] = { .spinner = { 0 }, .selection = { { .description = "Disabled", .value = 0x0000 }, - { .description = "Board 1", .value = 0x0208 }, - { .description = "Board 2", .value = 0x020a }, - { .description = "Board 3", .value = 0x020c }, - { .description = "Board 4", .value = 0x020e }, + { .description = "208H", .value = 0x0208 }, + { .description = "20AH", .value = 0x020a }, + { .description = "20CH", .value = 0x020c }, + { .description = "20EH", .value = 0x020e }, { .description = "" } }, .bios = { { 0 } } diff --git a/src/device/isarom.c b/src/device/isarom.c index 823bfcbe1..bfdaecacf 100644 --- a/src/device/isarom.c +++ b/src/device/isarom.c @@ -248,7 +248,7 @@ static const device_config_t isarom_config[] = { }, { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0x00000, @@ -557,7 +557,7 @@ static const device_config_t isarom_quad_config[] = { static const device_config_t lba_enhancer_config[] = { { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0xc8000, diff --git a/src/device/isartc.c b/src/device/isartc.c index 0540dc1f0..79dbeca0b 100644 --- a/src/device/isartc.c +++ b/src/device/isartc.c @@ -823,7 +823,7 @@ static const device_config_t mm58167_config[] = { }, { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0xcc000, diff --git a/src/device/kbc_at.c b/src/device/kbc_at.c index 2252410b5..540bf532a 100644 --- a/src/device/kbc_at.c +++ b/src/device/kbc_at.c @@ -2661,7 +2661,15 @@ kbc_at_init(const device_t *info) dev->ports[1] = kbc_at_ports[1]; /* The actual keyboard. */ - device_add(&keyboard_at_generic_device); + if (keyboard_type == KEYBOARD_TYPE_INTERNAL) { + if (machine_has_flags(machine, MACHINE_KEYBOARD_JIS)) + device_add(((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1) ? &keyboard_ps55_device : + &keyboard_ax_device); + else + device_add_params(&keyboard_at_generic_device, (void *) (uintptr_t) + (((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_1) ? FLAG_PS2_KBD : 0x00)); + } else + keyboard_add_device(); fast_reset = 0x00; @@ -2670,9 +2678,9 @@ kbc_at_init(const device_t *info) return dev; } -const device_t keyboard_at_device = { - .name = "PC/AT Keyboard", - .internal_name = "keyboard_at", +const device_t kbc_at_device = { + .name = "PC/AT Keyboard Controller", + .internal_name = "kbc_at", .flags = DEVICE_KBC, .local = KBC_TYPE_ISA | KBC_VEN_GENERIC, .init = kbc_at_init, @@ -2684,9 +2692,9 @@ const device_t keyboard_at_device = { .config = NULL }; -const device_t keyboard_at_siemens_device = { - .name = "PC/AT Keyboard", - .internal_name = "keyboard_at", +const device_t kbc_at_siemens_device = { + .name = "PC/AT Keyboard Controller", + .internal_name = "kbc_at", .flags = DEVICE_KBC, .local = KBC_TYPE_ISA | KBC_VEN_SIEMENS, .init = kbc_at_init, @@ -2698,9 +2706,9 @@ const device_t keyboard_at_siemens_device = { .config = NULL }; -const device_t keyboard_at_ami_device = { - .name = "PC/AT Keyboard (AMI)", - .internal_name = "keyboard_at_ami", +const device_t kbc_at_ami_device = { + .name = "PC/AT Keyboard Controller (AMI)", + .internal_name = "kbc_at_ami", .flags = DEVICE_KBC, .local = KBC_TYPE_ISA | KBC_VEN_AMI, .init = kbc_at_init, @@ -2712,9 +2720,9 @@ const device_t keyboard_at_ami_device = { .config = NULL }; -const device_t keyboard_at_tg_ami_device = { - .name = "PC/AT Keyboard (TriGem AMI)", - .internal_name = "keyboard_at_tg_ami", +const device_t kbc_at_tg_ami_device = { + .name = "PC/AT Keyboard Controller (TriGem AMI)", + .internal_name = "kbc_at_tg_ami", .flags = DEVICE_KBC, .local = KBC_TYPE_ISA | KBC_VEN_TRIGEM_AMI, .init = kbc_at_init, @@ -2726,9 +2734,9 @@ const device_t keyboard_at_tg_ami_device = { .config = NULL }; -const device_t keyboard_at_toshiba_device = { - .name = "PC/AT Keyboard (Toshiba)", - .internal_name = "keyboard_at_toshiba", +const device_t kbc_at_toshiba_device = { + .name = "PC/AT Keyboard Controller (Toshiba)", + .internal_name = "kbc_at_toshiba", .flags = DEVICE_KBC, .local = KBC_TYPE_ISA | KBC_VEN_TOSHIBA, .init = kbc_at_init, @@ -2740,9 +2748,9 @@ const device_t keyboard_at_toshiba_device = { .config = NULL }; -const device_t keyboard_at_olivetti_device = { - .name = "PC/AT Keyboard (Olivetti)", - .internal_name = "keyboard_at_olivetti", +const device_t kbc_at_olivetti_device = { + .name = "PC/AT Keyboard Controller (Olivetti)", + .internal_name = "kbc_at_olivetti", .flags = DEVICE_KBC, .local = KBC_TYPE_ISA | KBC_VEN_OLIVETTI, .init = kbc_at_init, @@ -2754,9 +2762,9 @@ const device_t keyboard_at_olivetti_device = { .config = NULL }; -const device_t keyboard_at_ncr_device = { - .name = "PC/AT Keyboard (NCR)", - .internal_name = "keyboard_at_ncr", +const device_t kbc_at_ncr_device = { + .name = "PC/AT Keyboard Controller (NCR)", + .internal_name = "kbc_at_ncr", .flags = DEVICE_KBC, .local = KBC_TYPE_ISA | KBC_VEN_NCR, .init = kbc_at_init, @@ -2768,9 +2776,9 @@ const device_t keyboard_at_ncr_device = { .config = NULL }; -const device_t keyboard_at_compaq_device = { - .name = "PC/AT Keyboard (Compaq)", - .internal_name = "keyboard_at_compaq", +const device_t kbc_at_compaq_device = { + .name = "PC/AT Keyboard Controller (Compaq)", + .internal_name = "kbc_at_compaq", .flags = DEVICE_KBC, .local = KBC_TYPE_ISA | KBC_VEN_COMPAQ, .init = kbc_at_init, @@ -2782,9 +2790,9 @@ const device_t keyboard_at_compaq_device = { .config = NULL }; -const device_t keyboard_at_phoenix_device = { - .name = "PC/AT Keyboard (Phoenix)", - .internal_name = "keyboard_at_phoenix", +const device_t kbc_at_phoenix_device = { + .name = "PC/AT Keyboard Controller (Phoenix)", + .internal_name = "kbc_at_phoenix", .flags = DEVICE_KBC, .local = KBC_TYPE_ISA | KBC_VEN_PHOENIX, .init = kbc_at_init, @@ -2796,9 +2804,9 @@ const device_t keyboard_at_phoenix_device = { .config = NULL }; -const device_t keyboard_ps2_device = { - .name = "PS/2 Keyboard", - .internal_name = "keyboard_ps2", +const device_t kbc_ps2_device = { + .name = "PS/2 Keyboard Controller", + .internal_name = "kbc_ps2", .flags = DEVICE_KBC, .local = KBC_TYPE_PS2_1 | KBC_VEN_GENERIC, .init = kbc_at_init, @@ -2810,9 +2818,9 @@ const device_t keyboard_ps2_device = { .config = NULL }; -const device_t keyboard_ps2_ps1_device = { - .name = "PS/2 Keyboard (IBM PS/1)", - .internal_name = "keyboard_ps2_ps1", +const device_t kbc_ps2_ps1_device = { + .name = "PS/2 Keyboard Controller (IBM PS/1)", + .internal_name = "kbc_ps2_ps1", .flags = DEVICE_KBC, .local = KBC_TYPE_PS2_1 | KBC_VEN_IBM_PS1, .init = kbc_at_init, @@ -2824,9 +2832,9 @@ const device_t keyboard_ps2_ps1_device = { .config = NULL }; -const device_t keyboard_ps2_ps1_pci_device = { - .name = "PS/2 Keyboard (IBM PS/1)", - .internal_name = "keyboard_ps2_ps1_pci", +const device_t kbc_ps2_ps1_pci_device = { + .name = "PS/2 Keyboard Controller (IBM PS/1)", + .internal_name = "kbc_ps2_ps1_pci", .flags = DEVICE_KBC | DEVICE_PCI, .local = KBC_TYPE_PS2_1 | KBC_VEN_IBM_PS1, .init = kbc_at_init, @@ -2838,9 +2846,9 @@ const device_t keyboard_ps2_ps1_pci_device = { .config = NULL }; -const device_t keyboard_ps2_xi8088_device = { - .name = "PS/2 Keyboard (Xi8088)", - .internal_name = "keyboard_ps2_xi8088", +const device_t kbc_ps2_xi8088_device = { + .name = "PS/2 Keyboard Controller (Xi8088)", + .internal_name = "kbc_ps2_xi8088", .flags = DEVICE_KBC, .local = KBC_TYPE_PS2_1 | KBC_VEN_GENERIC, .init = kbc_at_init, @@ -2852,9 +2860,9 @@ const device_t keyboard_ps2_xi8088_device = { .config = NULL }; -const device_t keyboard_ps2_ami_device = { - .name = "PS/2 Keyboard (AMI)", - .internal_name = "keyboard_ps2_ami", +const device_t kbc_ps2_ami_device = { + .name = "PS/2 Keyboard Controller (AMI)", + .internal_name = "kbc_ps2_ami", .flags = DEVICE_KBC, .local = KBC_TYPE_PS2_1 | KBC_VEN_AMI, .init = kbc_at_init, @@ -2866,9 +2874,9 @@ const device_t keyboard_ps2_ami_device = { .config = NULL }; -const device_t keyboard_ps2_compaq_device = { - .name = "PS/2 Keyboard (Compaq)", - .internal_name = "keyboard_at_compaq", +const device_t kbc_ps2_compaq_device = { + .name = "PS/2 Keyboard Controller (Compaq)", + .internal_name = "kbc_at_compaq", .flags = DEVICE_KBC, .local = KBC_TYPE_PS2_1 | KBC_VEN_COMPAQ, .init = kbc_at_init, @@ -2880,9 +2888,9 @@ const device_t keyboard_ps2_compaq_device = { .config = NULL }; -const device_t keyboard_ps2_holtek_device = { - .name = "PS/2 Keyboard (Holtek)", - .internal_name = "keyboard_ps2_holtek", +const device_t kbc_ps2_holtek_device = { + .name = "PS/2 Keyboard Controller (Holtek)", + .internal_name = "kbc_ps2_holtek", .flags = DEVICE_KBC, .local = KBC_TYPE_PS2_1 | KBC_VEN_AMI | KBC_FLAG_IS_ASIC, .init = kbc_at_init, @@ -2894,9 +2902,9 @@ const device_t keyboard_ps2_holtek_device = { .config = NULL }; -const device_t keyboard_ps2_phoenix_device = { - .name = "PS/2 Keyboard (Phoenix)", - .internal_name = "keyboard_ps2_phoenix", +const device_t kbc_ps2_phoenix_device = { + .name = "PS/2 Keyboard Controller (Phoenix)", + .internal_name = "kbc_ps2_phoenix", .flags = DEVICE_KBC, .local = KBC_TYPE_PS2_1 | KBC_VEN_PHOENIX, .init = kbc_at_init, @@ -2908,9 +2916,9 @@ const device_t keyboard_ps2_phoenix_device = { .config = NULL }; -const device_t keyboard_ps2_tg_ami_device = { - .name = "PS/2 Keyboard (TriGem AMI)", - .internal_name = "keyboard_ps2_tg_ami", +const device_t kbc_ps2_tg_ami_device = { + .name = "PS/2 Keyboard Controller (TriGem AMI)", + .internal_name = "kbc_ps2_tg_ami", .flags = DEVICE_KBC, .local = KBC_TYPE_PS2_1 | KBC_VEN_TRIGEM_AMI, .init = kbc_at_init, @@ -2922,9 +2930,9 @@ const device_t keyboard_ps2_tg_ami_device = { .config = NULL }; -const device_t keyboard_ps2_mca_1_device = { - .name = "PS/2 Keyboard (IBM PS/2 MCA Type 1)", - .internal_name = "keyboard_ps2_mca_1", +const device_t kbc_ps2_mca_1_device = { + .name = "PS/2 Keyboard Controller (IBM PS/2 MCA Type 1)", + .internal_name = "kbc_ps2_mca_1", .flags = DEVICE_KBC, .local = KBC_TYPE_PS2_1 | KBC_VEN_IBM, .init = kbc_at_init, @@ -2936,9 +2944,9 @@ const device_t keyboard_ps2_mca_1_device = { .config = NULL }; -const device_t keyboard_ps2_mca_2_device = { - .name = "PS/2 Keyboard (IBM PS/2 MCA Type 2)", - .internal_name = "keyboard_ps2_mca_2", +const device_t kbc_ps2_mca_2_device = { + .name = "PS/2 Keyboard Controller (IBM PS/2 MCA Type 2)", + .internal_name = "kbc_ps2_mca_2", .flags = DEVICE_KBC, .local = KBC_TYPE_PS2_2 | KBC_VEN_IBM, .init = kbc_at_init, @@ -2950,9 +2958,9 @@ const device_t keyboard_ps2_mca_2_device = { .config = NULL }; -const device_t keyboard_ps2_quadtel_device = { - .name = "PS/2 Keyboard (Quadtel/MegaPC)", - .internal_name = "keyboard_ps2_quadtel", +const device_t kbc_ps2_quadtel_device = { + .name = "PS/2 Keyboard Controller (Quadtel/MegaPC)", + .internal_name = "kbc_ps2_quadtel", .flags = DEVICE_KBC, .local = KBC_TYPE_PS2_1 | KBC_VEN_QUADTEL, .init = kbc_at_init, @@ -2964,9 +2972,9 @@ const device_t keyboard_ps2_quadtel_device = { .config = NULL }; -const device_t keyboard_ps2_pci_device = { - .name = "PS/2 Keyboard", - .internal_name = "keyboard_ps2_pci", +const device_t kbc_ps2_pci_device = { + .name = "PS/2 Keyboard Controller (PCI)", + .internal_name = "kbc_ps2_pci", .flags = DEVICE_KBC | DEVICE_PCI, .local = KBC_TYPE_PS2_1 | KBC_VEN_GENERIC, .init = kbc_at_init, @@ -2978,9 +2986,9 @@ const device_t keyboard_ps2_pci_device = { .config = NULL }; -const device_t keyboard_ps2_ami_pci_device = { - .name = "PS/2 Keyboard (AMI)", - .internal_name = "keyboard_ps2_ami_pci", +const device_t kbc_ps2_ami_pci_device = { + .name = "PS/2 Keyboard Controller (PCI) (AMI)", + .internal_name = "kbc_ps2_ami_pci", .flags = DEVICE_KBC | DEVICE_PCI, .local = KBC_TYPE_PS2_1 | KBC_VEN_AMI, .init = kbc_at_init, @@ -2992,9 +3000,9 @@ const device_t keyboard_ps2_ami_pci_device = { .config = NULL }; -const device_t keyboard_ps2_ali_pci_device = { - .name = "PS/2 Keyboard (ALi M5123/M1543C)", - .internal_name = "keyboard_ps2_ali_pci", +const device_t kbc_ps2_ali_pci_device = { + .name = "PS/2 Keyboard Controller (PCI) (ALi M5123/M1543C)", + .internal_name = "kbc_ps2_ali_pci", .flags = DEVICE_KBC | DEVICE_PCI, .local = KBC_TYPE_PS2_1 | KBC_VEN_ALI, .init = kbc_at_init, @@ -3006,9 +3014,9 @@ const device_t keyboard_ps2_ali_pci_device = { .config = NULL }; -const device_t keyboard_ps2_intel_ami_pci_device = { - .name = "PS/2 Keyboard (AMI)", - .internal_name = "keyboard_ps2_intel_ami_pci", +const device_t kbc_ps2_intel_ami_pci_device = { + .name = "PS/2 Keyboard Controller (PCI) (AMI)", + .internal_name = "kbc_ps2_intel_ami_pci", .flags = DEVICE_KBC | DEVICE_PCI, .local = KBC_TYPE_GREEN | KBC_VEN_AMI, .init = kbc_at_init, @@ -3020,9 +3028,9 @@ const device_t keyboard_ps2_intel_ami_pci_device = { .config = NULL }; -const device_t keyboard_ps2_tg_ami_pci_device = { - .name = "PS/2 Keyboard (TriGem AMI)", - .internal_name = "keyboard_ps2_tg_ami_pci", +const device_t kbc_ps2_tg_ami_pci_device = { + .name = "PS/2 Keyboard Controller (PCI) (TriGem AMI)", + .internal_name = "kbc_ps2_tg_ami_pci", .flags = DEVICE_KBC | DEVICE_PCI, .local = KBC_TYPE_PS2_1 | KBC_VEN_TRIGEM_AMI, .init = kbc_at_init, @@ -3034,9 +3042,9 @@ const device_t keyboard_ps2_tg_ami_pci_device = { .config = NULL }; -const device_t keyboard_ps2_acer_pci_device = { - .name = "PS/2 Keyboard (Acer 90M002A)", - .internal_name = "keyboard_ps2_acer_pci", +const device_t kbc_ps2_acer_pci_device = { + .name = "PS/2 Keyboard Controller (PCI) (Acer 90M002A)", + .internal_name = "kbc_ps2_acer_pci", .flags = DEVICE_KBC | DEVICE_PCI, .local = KBC_TYPE_PS2_1 | KBC_VEN_ACER, .init = kbc_at_init, @@ -3048,9 +3056,9 @@ const device_t keyboard_ps2_acer_pci_device = { .config = NULL }; -const device_t keyboard_ps2_phoenix_pci_device = { - .name = "PS/2 Keyboard (Phoenix)", - .internal_name = "keyboard_ps2_phoenix_pci", +const device_t kbc_ps2_phoenix_pci_device = { + .name = "PS/2 Keyboard Controller (PCI) (Phoenix)", + .internal_name = "kbc_ps2_phoenix_pci", .flags = DEVICE_KBC | DEVICE_PCI, .local = KBC_TYPE_PS2_1 | KBC_VEN_PHOENIX, .init = kbc_at_init, diff --git a/src/device/kbc_xt.c b/src/device/kbc_xt.c new file mode 100644 index 000000000..176f1df43 --- /dev/null +++ b/src/device/kbc_xt.c @@ -0,0 +1,903 @@ +/* + * 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 XT-style keyboard. + * + * + * + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, + * EngiNerd, + * + * Copyright 2008-2019 Sarah Walker. + * Copyright 2016-2019 Miran Grca. + * Copyright 2017-2019 Fred N. van kempen. + * Copyright 2020 EngiNerd. + */ +#include +#include +#include +#include +#include +#define HAVE_STDARG_H +#include +#include <86box/86box.h> +#include <86box/device.h> +#include "cpu.h" +#include <86box/timer.h> +#include <86box/fdd.h> +#include <86box/machine.h> +#include <86box/m_xt_t1000.h> +#include <86box/cassette.h> +#include <86box/io.h> +#include <86box/pic.h> +#include <86box/pit.h> +#include <86box/ppi.h> +#include <86box/mem.h> +#include <86box/rom.h> +#include <86box/sound.h> +#include <86box/snd_speaker.h> +#include <86box/video.h> +#include <86box/keyboard.h> + +#define STAT_PARITY 0x80 +#define STAT_RTIMEOUT 0x40 +#define STAT_TTIMEOUT 0x20 +#define STAT_LOCK 0x10 +#define STAT_CD 0x08 +#define STAT_SYSFLAG 0x04 +#define STAT_IFULL 0x02 +#define STAT_OFULL 0x01 + +/* Keyboard Types */ +enum { + KBD_TYPE_PC81 = 0, + KBD_TYPE_PC82, + KBD_TYPE_XT82, + KBD_TYPE_XT86, + KBD_TYPE_COMPAQ, + KBD_TYPE_TANDY, + KBD_TYPE_TOSHIBA, + KBD_TYPE_VTECH, + KBD_TYPE_OLIVETTI, + KBD_TYPE_ZENITH, + KBD_TYPE_PRAVETZ, + KBD_TYPE_HYUNDAI, + KBD_TYPE_FE2010, + KBD_TYPE_XTCLONE +}; + +typedef struct xtkbd_t { + int want_irq; + int blocked; + int tandy; + + uint8_t pa; + uint8_t pb; + uint8_t pd; + uint8_t cfg; + uint8_t clock; + uint8_t key_waiting; + uint8_t type; + uint8_t pravetz_flags; + uint8_t cpu_speed; + + pc_timer_t send_delay_timer; +} xtkbd_t; + +static uint8_t key_queue[16]; +static int key_queue_start = 0; +static int key_queue_end = 0; +static int is_tandy = 0; +static int is_t1x00 = 0; +static int is_amstrad = 0; + +#ifdef ENABLE_KEYBOARD_XT_LOG +int keyboard_xt_do_log = ENABLE_KEYBOARD_XT_LOG; + +static void +kbd_log(const char *fmt, ...) +{ + va_list ap; + + if (keyboard_xt_do_log) { + va_start(ap, fmt); + pclog_ex(fmt, ap); + va_end(ap); + } +} +#else +# define kbd_log(fmt, ...) +#endif + +static uint8_t +get_fdd_switch_settings(void) +{ + + uint8_t fdd_count = 0; + + for (uint8_t i = 0; i < FDD_NUM; i++) { + if (fdd_get_flags(i)) + fdd_count++; + } + + if (!fdd_count) + return 0x00; + else + return ((fdd_count - 1) << 6) | 0x01; +} + +static uint8_t +get_videomode_switch_settings(void) +{ + + if (video_is_mda()) + return 0x30; + else if (video_is_cga()) + return 0x20; /* 0x10 would be 40x25 */ + else + return 0x00; +} + +static void +kbd_poll(void *priv) +{ + xtkbd_t *kbd = (xtkbd_t *) priv; + + timer_advance_u64(&kbd->send_delay_timer, 1000 * TIMER_USEC); + + if (!(kbd->pb & 0x40) && (kbd->type != KBD_TYPE_TANDY)) + return; + + if (kbd->want_irq) { + kbd->want_irq = 0; + kbd->pa = kbd->key_waiting; + kbd->blocked = 1; + picint(2); +#ifdef ENABLE_KEYBOARD_XT_LOG + kbd_log("XTkbd: kbd_poll(): keyboard_xt : take IRQ\n"); +#endif + } + + if ((key_queue_start != key_queue_end) && !kbd->blocked) { + kbd->key_waiting = key_queue[key_queue_start]; + kbd_log("XTkbd: reading %02X from the key queue at %i\n", + kbd->key_waiting, key_queue_start); + key_queue_start = (key_queue_start + 1) & 0x0f; + kbd->want_irq = 1; + } +} + +static void +kbd_adddata(uint16_t val) +{ + /* Test for T1000 'Fn' key (Right Alt / Right Ctrl) */ + if (is_t1x00) { + if (keyboard_recv(0x138) || keyboard_recv(0x11d)) { /* 'Fn' pressed */ + t1000_syskey(0x00, 0x04, 0x00); /* Set 'Fn' indicator */ + switch (val) { + case 0x45: /* Num Lock => toggle numpad */ + t1000_syskey(0x00, 0x00, 0x10); + break; + case 0x47: /* Home => internal display */ + t1000_syskey(0x40, 0x00, 0x00); + break; + case 0x49: /* PgDn => turbo on */ + t1000_syskey(0x80, 0x00, 0x00); + break; + case 0x4D: /* Right => toggle LCD font */ + t1000_syskey(0x00, 0x00, 0x20); + break; + case 0x4F: /* End => external display */ + t1000_syskey(0x00, 0x40, 0x00); + break; + case 0x51: /* PgDn => turbo off */ + t1000_syskey(0x00, 0x80, 0x00); + break; + case 0x54: /* SysRQ => toggle window */ + t1000_syskey(0x00, 0x00, 0x08); + break; + + default: + break; + } + } else + t1000_syskey(0x04, 0x00, 0x00); /* Reset 'Fn' indicator */ + } + + key_queue[key_queue_end] = val; + kbd_log("XTkbd: %02X added to key queue at %i\n", + val, key_queue_end); + key_queue_end = (key_queue_end + 1) & 0x0f; +} + +void +kbd_adddata_process(uint16_t val, void (*adddata)(uint16_t val)) +{ + uint8_t num_lock = 0; + uint8_t shift_states = 0; + + if (!adddata) + return; + + keyboard_get_states(NULL, &num_lock, NULL, NULL); + shift_states = keyboard_get_shift() & STATE_LSHIFT; + + if (is_amstrad) + num_lock = !num_lock; + + /* If NumLock is on, invert the left shift state so we can always check for + the the same way flag being set (and with NumLock on that then means it + is actually *NOT* set). */ + if (num_lock) + shift_states ^= STATE_LSHIFT; + + switch (val) { + case FAKE_LSHIFT_ON: + /* If NumLock is on, fake shifts are sent when shift is *NOT* presed, + if NumLock is off, fake shifts are sent when shift is pressed. */ + if (shift_states) { + /* Send fake shift. */ + adddata(num_lock ? 0x2a : 0xaa); + } + break; + case FAKE_LSHIFT_OFF: + if (shift_states) { + /* Send fake shift. */ + adddata(num_lock ? 0xaa : 0x2a); + } + break; + default: + adddata(val); + break; + } +} + +static void +kbd_adddata_ex(uint16_t val) +{ + kbd_adddata_process(val, kbd_adddata); +} + +static void +kbd_write(uint16_t port, uint8_t val, void *priv) +{ + xtkbd_t *kbd = (xtkbd_t *) priv; + uint8_t bit; + uint8_t set; + uint8_t new_clock; + + switch (port) { + case 0x61: /* Keyboard Control Register (aka Port B) */ + if (!(val & 0x80) || (kbd->type == KBD_TYPE_HYUNDAI)) { + new_clock = !!(val & 0x40); + if (!kbd->clock && new_clock) { + key_queue_start = key_queue_end = 0; + kbd->want_irq = 0; + kbd->blocked = 0; + kbd_adddata(0xaa); + } + } + + kbd->pb = val; + if (!(kbd->pb & 0x80) || (kbd->type == KBD_TYPE_HYUNDAI)) + kbd->clock = !!(kbd->pb & 0x40); + ppi.pb = val; + + timer_process(); + + if (((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82) || + (kbd->type == KBD_TYPE_PRAVETZ)) && (cassette != NULL)) + pc_cas_set_motor(cassette, (kbd->pb & 0x08) == 0); + + speaker_update(); + + speaker_gated = val & 1; + speaker_enable = val & 2; + + if (speaker_enable) + was_speaker_enable = 1; + pit_devs[0].set_gate(pit_devs[0].data, 2, val & 1); + + if (val & 0x80) { + kbd->pa = 0; + kbd->blocked = 0; + picintc(2); + } + +#ifdef ENABLE_KEYBOARD_XT_LOG + if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82) || (kbd->type == KBD_TYPE_PRAVETZ)) + kbd_log("XTkbd: Cassette motor is %s\n", !(val & 0x08) ? "ON" : "OFF"); +#endif + break; + + case 0x62: /* Switch Register (aka Port C) */ +#ifdef ENABLE_KEYBOARD_XT_LOG + if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82) || (kbd->type == KBD_TYPE_PRAVETZ)) + kbd_log("XTkbd: Cassette IN is %i\n", !!(val & 0x10)); +#endif + if (kbd->type == KBD_TYPE_FE2010) { + kbd_log("XTkbd: Switch register in is %02X\n", val); + if (!(kbd->cfg & 0x08)) + kbd->pd = (kbd->pd & 0x30) | (val & 0xcf); + } + break; + + case 0x63: + if (kbd->type == KBD_TYPE_FE2010) { + kbd_log("XTkbd: Configuration register in is %02X\n", val); + if (!(kbd->cfg & 0x08)) + kbd->cfg = val; + } + break; + + case 0xc0 ... 0xcf: /* Pravetz Flags */ + kbd_log("XTkbd: Port %02X out: %02X\n", port, val); + if (kbd->type == KBD_TYPE_PRAVETZ) { + bit = (port >> 1) & 0x07; + set = (port & 0x01) << bit; + kbd->pravetz_flags = (kbd->pravetz_flags & ~(1 << bit)) | set; + } + break; + + case 0x1f0: + kbd_log("XTkbd: Port %04X out: %02X\n", port, val); + if (kbd->type == KBD_TYPE_VTECH) { + kbd->cpu_speed = val; + cpu_dynamic_switch(kbd->cpu_speed >> 7); + } + break; + + default: + break; + } +} + +static uint8_t +kbd_read(uint16_t port, void *priv) +{ + const xtkbd_t *kbd = (xtkbd_t *) priv; + uint8_t ret = 0xff; + + switch (port) { + case 0x60: /* Keyboard Data Register (aka Port A) */ + if ((kbd->pb & 0x80) && ((kbd->type == KBD_TYPE_PC81) || + (kbd->type == KBD_TYPE_PC82) || (kbd->type == KBD_TYPE_PRAVETZ) || + (kbd->type == KBD_TYPE_XT82) || (kbd->type == KBD_TYPE_XT86) || + (kbd->type == KBD_TYPE_XTCLONE) || (kbd->type == KBD_TYPE_COMPAQ) || + (kbd->type == KBD_TYPE_ZENITH) || (kbd->type == KBD_TYPE_HYUNDAI) || + (kbd->type == KBD_TYPE_VTECH))) { + if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82) || + (kbd->type == KBD_TYPE_XTCLONE) || (kbd->type == KBD_TYPE_COMPAQ) || + (kbd->type == KBD_TYPE_PRAVETZ) || (kbd->type == KBD_TYPE_HYUNDAI)) + ret = (kbd->pd & ~0x02) | (hasfpu ? 0x02 : 0x00); + else if ((kbd->type == KBD_TYPE_XT82) || (kbd->type == KBD_TYPE_XT86) || + (kbd->type == KBD_TYPE_VTECH)) + /* According to Ruud on the PCem forum, this is supposed to + return 0xFF on the XT. */ + ret = 0xff; + else if (kbd->type == KBD_TYPE_ZENITH) { + /* Zenith Data Systems Z-151 + * SW1 switch settings: + * bits 6-7: floppy drive number + * bits 4-5: video mode + * bit 2-3: base memory size + * bit 1: fpu enable + * bit 0: fdc enable + */ + ret = get_fdd_switch_settings(); + + ret |= get_videomode_switch_settings(); + + /* Base memory size should always be 64k */ + ret |= 0x0c; + + if (hasfpu) + ret |= 0x02; + } + } else + ret = kbd->pa; + break; + + case 0x61: /* Keyboard Control Register (aka Port B) */ + ret = kbd->pb; + break; + + case 0x62: /* Switch Register (aka Port C) */ + if (kbd->type == KBD_TYPE_FE2010) { + if (kbd->pb & 0x04) /* PB2 */ + ret = (kbd->pd & 0x0d) | (hasfpu ? 0x02 : 0x00); + else + ret = kbd->pd >> 4; + } else if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82) || + (kbd->type == KBD_TYPE_PRAVETZ)) { + if (kbd->pb & 0x04) /* PB2 */ + switch (mem_size + isa_mem_size) { + case 64: + case 48: + case 32: + case 16: + ret = 0x00; + break; + default: + ret = (((mem_size + isa_mem_size) - 64) / 32) & 0x0f; + break; + } + else + ret = (((mem_size + isa_mem_size) - 64) / 32) >> 4; + } else if ((kbd->type == KBD_TYPE_OLIVETTI) || + (kbd->type == KBD_TYPE_ZENITH)) { + /* Olivetti M19 or Zenith Data Systems Z-151 */ + if (kbd->pb & 0x04) /* PB2 */ + ret = kbd->pd & 0xbf; + else + ret = kbd->pd >> 4; + } else { + if (kbd->pb & 0x08) /* PB3 */ + ret = kbd->pd >> 4; + else + ret = (kbd->pd & 0x0d) | (hasfpu ? 0x02 : 0x00); + } + ret |= (ppispeakon ? 0x20 : 0); + + /* This is needed to avoid error 131 (cassette error). + This is serial read: bit 5 = clock, bit 4 = data, cassette header is 256 x 0xff. */ + if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82) || + (kbd->type == KBD_TYPE_PRAVETZ)) { + if (cassette == NULL) + ret |= (ppispeakon ? 0x10 : 0); + else + ret |= (pc_cas_get_inp(cassette) ? 0x10 : 0); + } + + if (kbd->type == KBD_TYPE_TANDY) + ret |= (tandy1k_eeprom_read() ? 0x10 : 0); + break; + + case 0x63: /* Keyboard Configuration Register (aka Port D) */ + if ((kbd->type == KBD_TYPE_XT82) || (kbd->type == KBD_TYPE_XT86) || + (kbd->type == KBD_TYPE_XTCLONE) || (kbd->type == KBD_TYPE_COMPAQ) || + (kbd->type == KBD_TYPE_TOSHIBA) || (kbd->type == KBD_TYPE_HYUNDAI) || + (kbd->type == KBD_TYPE_VTECH)) + ret = kbd->pd; + break; + + case 0xc0: /* Pravetz Flags */ + if (kbd->type == KBD_TYPE_PRAVETZ) + ret = kbd->pravetz_flags; + kbd_log("XTkbd: Port %02X in : %02X\n", port, ret); + break; + + case 0x1f0: + if (kbd->type == KBD_TYPE_VTECH) + ret = kbd->cpu_speed; + kbd_log("XTkbd: Port %04X in : %02X\n", port, ret); + break; + + default: + break; + } + + return ret; +} + +static void +kbd_reset(void *priv) +{ + xtkbd_t *kbd = (xtkbd_t *) priv; + + kbd->want_irq = 0; + kbd->blocked = 0; + kbd->pa = 0x00; + kbd->pb = 0x00; + kbd->pravetz_flags = 0x00; + + keyboard_scan = 1; + + key_queue_start = 0; + key_queue_end = 0; +} + +void +keyboard_set_is_amstrad(int ams) +{ + is_amstrad = ams; +} + +static void * +kbd_init(const device_t *info) +{ + xtkbd_t *kbd; + + kbd = (xtkbd_t *) calloc(1, sizeof(xtkbd_t)); + + io_sethandler(0x0060, 4, + kbd_read, NULL, NULL, kbd_write, NULL, NULL, kbd); + keyboard_send = kbd_adddata_ex; + kbd->type = info->local; + if (kbd->type == KBD_TYPE_VTECH) + kbd->cpu_speed = (!!cpu) << 2; + kbd_reset(kbd); + if (kbd->type == KBD_TYPE_PRAVETZ) + io_sethandler(0x00c0, 16, + kbd_read, NULL, NULL, kbd_write, NULL, NULL, kbd); + if (kbd->type == KBD_TYPE_VTECH) + io_sethandler(0x01f0, 1, + kbd_read, NULL, NULL, kbd_write, NULL, NULL, kbd); + + key_queue_start = key_queue_end = 0; + + video_reset(gfxcard[0]); + + if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82) || + (kbd->type == KBD_TYPE_PRAVETZ) || (kbd->type == KBD_TYPE_XT82) || + (kbd->type <= KBD_TYPE_XT86) || (kbd->type == KBD_TYPE_XTCLONE) || + (kbd->type == KBD_TYPE_COMPAQ) || (kbd->type == KBD_TYPE_TOSHIBA) || + (kbd->type == KBD_TYPE_OLIVETTI) || (kbd->type == KBD_TYPE_HYUNDAI) || + (kbd->type == KBD_TYPE_VTECH) || (kbd->type == KBD_TYPE_FE2010)) { + /* DIP switch readout: bit set = OFF, clear = ON. */ + if (kbd->type == KBD_TYPE_OLIVETTI) + /* Olivetti M19 + * Jumpers J1, J2 - monitor type. + * 01 - mono (high-res) + * 10 - color (low-res, disables 640x400x2 mode) + * 00 - autoswitching + */ + kbd->pd |= 0x00; + else + /* Switches 7, 8 - floppy drives. */ + kbd->pd = get_fdd_switch_settings(); + + /* Switches 5, 6 - video card type */ + kbd->pd |= get_videomode_switch_settings(); + + /* Switches 3, 4 - memory size. */ + if ((kbd->type == KBD_TYPE_XT86) || (kbd->type == KBD_TYPE_XTCLONE) || + (kbd->type == KBD_TYPE_HYUNDAI) || (kbd->type == KBD_TYPE_COMPAQ) || + (kbd->type == KBD_TYPE_TOSHIBA) || (kbd->type == KBD_TYPE_FE2010)) { + switch (mem_size) { + case 256: + kbd->pd |= 0x00; + break; + case 512: + kbd->pd |= 0x04; + break; + case 576: + kbd->pd |= 0x08; + break; + case 640: + default: + kbd->pd |= 0x0c; + break; + } + } else if ((kbd->type == KBD_TYPE_XT82) || (kbd->type == KBD_TYPE_VTECH)) { + switch (mem_size) { + case 64: /* 1x64k */ + kbd->pd |= 0x00; + break; + case 128: /* 2x64k */ + kbd->pd |= 0x04; + break; + case 192: /* 3x64k */ + kbd->pd |= 0x08; + break; + case 256: /* 4x64k */ + default: + kbd->pd |= 0x0c; + break; + } + } else if (kbd->type == KBD_TYPE_PC82) { + switch (mem_size) { +#ifdef PC82_192K_3BANK + case 192: /* 3x64k, not supported by stock BIOS due to bugs */ + kbd->pd |= 0x08; + break; +#else + case 192: /* 2x64k + 2x32k */ +#endif + case 64: /* 4x16k */ + case 96: /* 2x32k + 2x16k */ + case 128: /* 4x32k */ + case 160: /* 2x64k + 2x16k */ + case 224: /* 3x64k + 1x32k */ + case 256: /* 4x64k */ + default: + kbd->pd |= 0x0c; + break; + } + } else { /* really just the PC '81 */ + switch (mem_size) { + case 16: /* 1x16k */ + kbd->pd |= 0x00; + break; + case 32: /* 2x16k */ + kbd->pd |= 0x04; + break; + case 48: /* 3x16k */ + kbd->pd |= 0x08; + break; + case 64: /* 4x16k */ + default: + kbd->pd |= 0x0c; + break; + } + } + + /* Switch 2 - 8087 FPU. */ + if (hasfpu) + kbd->pd |= 0x02; + } else if (kbd->type == KBD_TYPE_ZENITH) { + /* Zenith Data Systems Z-151 + * SW2 switch settings: + * bit 7: monitor frequency + * bits 5-6: autoboot (00-11 resident monitor, 10 hdd, 01 fdd) + * bits 0-4: installed memory + */ + kbd->pd = 0x20; + switch (mem_size) { + case 128: + kbd->pd |= 0x02; + break; + case 192: + kbd->pd |= 0x04; + break; + case 256: + kbd->pd |= 0x06; + break; + case 320: + kbd->pd |= 0x08; + break; + case 384: + kbd->pd |= 0x0a; + break; + case 448: + kbd->pd |= 0x0c; + break; + case 512: + kbd->pd |= 0x0e; + break; + case 576: + kbd->pd |= 0x10; + break; + case 640: + default: + kbd->pd |= 0x12; + break; + } + } + + timer_add(&kbd->send_delay_timer, kbd_poll, kbd, 1); + + is_tandy = (kbd->type == KBD_TYPE_TANDY); + is_t1x00 = (kbd->type == KBD_TYPE_TOSHIBA); + + if (keyboard_type == KEYBOARD_TYPE_INTERNAL) + keyboard_set_table(scancode_xt); + else + keyboard_add_device(); + + is_amstrad = 0; + + return kbd; +} + +static void +kbd_close(void *priv) +{ + xtkbd_t *kbd = (xtkbd_t *) priv; + + /* Stop the timer. */ + timer_disable(&kbd->send_delay_timer); + + /* Disable scanning. */ + keyboard_scan = 0; + + keyboard_send = NULL; + + io_removehandler(0x0060, 4, + kbd_read, NULL, NULL, kbd_write, NULL, NULL, kbd); + + free(kbd); +} + +const device_t kbc_pc_device = { + .name = "IBM PC Keyboard Controller (1981)", + .internal_name = "kbc_pc", + .flags = 0, + .local = KBD_TYPE_PC81, + .init = kbd_init, + .close = kbd_close, + .reset = kbd_reset, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t kbc_pc82_device = { + .name = "IBM PC Keyboard Controller (1982)", + .internal_name = "kbc_pc82", + .flags = 0, + .local = KBD_TYPE_PC82, + .init = kbd_init, + .close = kbd_close, + .reset = kbd_reset, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t kbc_pravetz_device = { + .name = "Pravetz Keyboard Controller", + .internal_name = "kbc_pravetz", + .flags = 0, + .local = KBD_TYPE_PRAVETZ, + .init = kbd_init, + .close = kbd_close, + .reset = kbd_reset, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t kbc_xt_device = { + .name = "XT (1982) Keyboard Controller", + .internal_name = "kbc_xt", + .flags = 0, + .local = KBD_TYPE_XT82, + .init = kbd_init, + .close = kbd_close, + .reset = kbd_reset, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t kbc_xt86_device = { + .name = "XT (1986) Keyboard Controller", + .internal_name = "kbc_xt86", + .flags = 0, + .local = KBD_TYPE_XT86, + .init = kbd_init, + .close = kbd_close, + .reset = kbd_reset, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t kbc_xt_compaq_device = { + .name = "Compaq Portable Keyboard Controller", + .internal_name = "kbc_xt_compaq", + .flags = 0, + .local = KBD_TYPE_COMPAQ, + .init = kbd_init, + .close = kbd_close, + .reset = kbd_reset, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t kbc_tandy_device = { + .name = "Tandy 1000 Keyboard Controller", + .internal_name = "kbc_tandy", + .flags = 0, + .local = KBD_TYPE_TANDY, + .init = kbd_init, + .close = kbd_close, + .reset = kbd_reset, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t kbc_xt_t1x00_device = { + .name = "Toshiba T1x00 Keyboard Controller", + .internal_name = "kbc_xt_t1x00", + .flags = 0, + .local = KBD_TYPE_TOSHIBA, + .init = kbd_init, + .close = kbd_close, + .reset = kbd_reset, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t kbc_xt_lxt3_device = { + .name = "VTech Laser Turbo XT Keyboard Controller", + .internal_name = "kbc_xt_lxt", + .flags = 0, + .local = KBD_TYPE_VTECH, + .init = kbd_init, + .close = kbd_close, + .reset = kbd_reset, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t kbc_xt_olivetti_device = { + .name = "Olivetti XT Keyboard Controller", + .internal_name = "kbc_xt_olivetti", + .flags = 0, + .local = KBD_TYPE_OLIVETTI, + .init = kbd_init, + .close = kbd_close, + .reset = kbd_reset, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t kbc_xt_zenith_device = { + .name = "Zenith XT Keyboard Controller", + .internal_name = "kbc_xt_zenith", + .flags = 0, + .local = KBD_TYPE_ZENITH, + .init = kbd_init, + .close = kbd_close, + .reset = kbd_reset, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t kbc_xt_hyundai_device = { + .name = "Hyundai XT Keyboard Controller", + .internal_name = "kbc_xt_hyundai", + .flags = 0, + .local = KBD_TYPE_HYUNDAI, + .init = kbd_init, + .close = kbd_close, + .reset = kbd_reset, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t kbc_xt_fe2010_device = { + .name = "Faraday FE2010 XT Keyboard Controller", + .internal_name = "kbc_xt_fe2010", + .flags = 0, + .local = KBD_TYPE_FE2010, + .init = kbd_init, + .close = kbd_close, + .reset = kbd_reset, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t kbc_xtclone_device = { + .name = "XT (Clone) Keyboard Controller", + .internal_name = "kbc_xtclone", + .flags = 0, + .local = KBD_TYPE_XTCLONE, + .init = kbd_init, + .close = kbd_close, + .reset = kbd_reset, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; diff --git a/src/device/keyboard.c b/src/device/keyboard.c index 16904fe3b..0acc93505 100644 --- a/src/device/keyboard.c +++ b/src/device/keyboard.c @@ -27,6 +27,7 @@ #define HAVE_STDARG_H #include <86box/86box.h> #include <86box/machine.h> +#include <86box/device.h> #include <86box/keyboard.h> #include <86box/plat.h> @@ -36,6 +37,38 @@ uint16_t scancode_map[768] = { 0 }; int keyboard_scan; +typedef struct keyboard_t { + const device_t *device; +} keyboard_t; + +int keyboard_type = 0; + +static const device_t keyboard_internal_device = { + .name = "Internal", + .internal_name = "internal", + .flags = 0, + .local = KEYBOARD_TYPE_INTERNAL, + .init = NULL, + .close = NULL, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +static keyboard_t keyboard_devices[] = { + // clang-format off + { &keyboard_internal_device }, + { &keyboard_pc_xt_device }, + { &keyboard_at_device }, + { &keyboard_ax_device }, + { &keyboard_ps2_device }, + { &keyboard_ps55_device }, + { NULL } + // clang-format on +}; + #ifdef ENABLE_KBC_AT_LOG int kbc_at_do_log = ENABLE_KBC_AT_LOG; @@ -516,3 +549,57 @@ convert_scan_code(uint16_t scan_code) return scan_code; } + +const char * +keyboard_get_name(int keyboard) +{ + return (keyboard_devices[keyboard].device->name); +} + +const char * +keyboard_get_internal_name(int keyboard) +{ + return device_get_internal_name(keyboard_devices[keyboard].device); +} + +int +keyboard_get_from_internal_name(char *s) +{ + int c = 0; + + while (keyboard_devices[c].device != NULL) { + if (!strcmp((char *) keyboard_devices[c].device->internal_name, s)) + return c; + c++; + } + + return 0; +} + +int +keyboard_has_config(int keyboard) +{ + if (keyboard_devices[keyboard].device == NULL) + return 0; + + return (keyboard_devices[keyboard].device->config ? 1 : 0); +} + +const device_t * +keyboard_get_device(int keyboard) +{ + return (keyboard_devices[keyboard].device); +} + +/* Return number of MOUSE types we know about. */ +int +keyboard_get_ndev(void) +{ + return ((sizeof(keyboard_devices) / sizeof(keyboard_t)) - 1); +} + +void +keyboard_add_device(void) +{ + device_add(keyboard_devices[keyboard_type].device); +} diff --git a/src/device/keyboard_at.c b/src/device/keyboard_at.c index 7fa2b9706..9696956b1 100644 --- a/src/device/keyboard_at.c +++ b/src/device/keyboard_at.c @@ -27,41 +27,37 @@ #include <86box/mouse.h> #include <86box/machine.h> -#define FLAG_PS2 0x08 /* dev is AT or PS/2 */ -#define FLAG_AT 0x00 /* dev is AT or PS/2 */ -#define FLAG_TYPE_MASK 0x07 /* mask for type */ - #define FIFO_SIZE 16 #define BAT_COUNT 1000 -enum { - KBD_84_KEY = 0, - KBD_101_KEY, - KBD_102_KEY, - KBD_JIS, - KBD_KOREAN -}; - #define FLAG_ENABLED 0x10 /* dev is enabled for use */ #define FLAG_CTRLDAT 0x08 /* ctrl or data mode */ -const uint8_t id_bytes[16][4] = { { 0x00, 0x00, 0x00, 0x00 }, /* AT 84-key */ - { 0x00, 0x00, 0x00, 0x00 }, /* AT 101/102/106-key */ +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 Korean */ + { 0x00, 0x00, 0x00, 0x00 }, /* AT KSC */ + { 0x00, 0x00, 0x00, 0x00 }, /* AT ABNT2 */ + { 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00 }, /* FLAG_AX = 0x08 */ { 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00 }, /* FLAG_PS2 = 0x08 */ + { 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00 }, /* FLAG_PS2_KBD = 0x10 */ + { 0x00, 0x00, 0x00, 0x00 }, { 0xab, 0x83, 0x00, 0x00 }, /* PS/2 101-key */ { 0xab, 0x83, 0x00, 0x00 }, /* PS/2 102-key */ { 0xab, 0x90, 0x00, 0x00 }, /* PS/55 106-key JIS (IBM-J 5576-002) */ /* Japanese keyboard ID - TODO: Find the actual Korean one. */ - { 0xab, 0x90, 0x00, 0x00 }, /* PS/2 Korean */ - { 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00 }, + { 0xab, 0x90, 0x00, 0x00 }, /* PS/2 KSC */ + { 0xab, 0x83, 0x00, 0x00 }, /* PS/2 ABNT2 */ { 0x00, 0x00, 0x00, 0x00 } }; /* Global keyboard flags for scan code set 3: @@ -78,9 +74,2079 @@ static atkbc_dev_t *SavedKbd = NULL; static uint8_t inv_cmd_response = 0xfa; +static int is_special = 0; + static uint16_t bat_counter = 0; -static const scancode scancode_set1[512] = { +const scancode scancode_set1_at[512] = { + // clang-format off + { .mk = { 0 }, .brk = { 0 } }, /* 000 */ + { .mk = { 0x01, 0 }, .brk = { 0x81, 0 } }, /* 001 */ + { .mk = { 0x02, 0 }, .brk = { 0x82, 0 } }, /* 002 */ + { .mk = { 0x03, 0 }, .brk = { 0x83, 0 } }, /* 003 */ + { .mk = { 0x04, 0 }, .brk = { 0x84, 0 } }, /* 004 */ + { .mk = { 0x05, 0 }, .brk = { 0x85, 0 } }, /* 005 */ + { .mk = { 0x06, 0 }, .brk = { 0x86, 0 } }, /* 006 */ + { .mk = { 0x07, 0 }, .brk = { 0x87, 0 } }, /* 007 */ + { .mk = { 0x08, 0 }, .brk = { 0x88, 0 } }, /* 008 */ + { .mk = { 0x09, 0 }, .brk = { 0x89, 0 } }, /* 009 */ + { .mk = { 0x0a, 0 }, .brk = { 0x8a, 0 } }, /* 00a */ + { .mk = { 0x0b, 0 }, .brk = { 0x8b, 0 } }, /* 00b */ + { .mk = { 0x0c, 0 }, .brk = { 0x8c, 0 } }, /* 00c */ + { .mk = { 0x0d, 0 }, .brk = { 0x8d, 0 } }, /* 00d */ + { .mk = { 0x0e, 0 }, .brk = { 0x8e, 0 } }, /* 00e */ + { .mk = { 0x0f, 0 }, .brk = { 0x8f, 0 } }, /* 00f */ + { .mk = { 0x10, 0 }, .brk = { 0x90, 0 } }, /* 010 */ + { .mk = { 0x11, 0 }, .brk = { 0x91, 0 } }, /* 011 */ + { .mk = { 0x12, 0 }, .brk = { 0x92, 0 } }, /* 012 */ + { .mk = { 0x13, 0 }, .brk = { 0x93, 0 } }, /* 013 */ + { .mk = { 0x14, 0 }, .brk = { 0x94, 0 } }, /* 014 */ + { .mk = { 0x15, 0 }, .brk = { 0x95, 0 } }, /* 015 */ + { .mk = { 0x16, 0 }, .brk = { 0x96, 0 } }, /* 016 */ + { .mk = { 0x17, 0 }, .brk = { 0x97, 0 } }, /* 017 */ + { .mk = { 0x18, 0 }, .brk = { 0x98, 0 } }, /* 018 */ + { .mk = { 0x19, 0 }, .brk = { 0x99, 0 } }, /* 019 */ + { .mk = { 0x1a, 0 }, .brk = { 0x9a, 0 } }, /* 01a */ + { .mk = { 0x1b, 0 }, .brk = { 0x9b, 0 } }, /* 01b */ + { .mk = { 0x1c, 0 }, .brk = { 0x9c, 0 } }, /* 01c */ + { .mk = { 0x1d, 0 }, .brk = { 0x9d, 0 } }, /* 01d */ + { .mk = { 0x1e, 0 }, .brk = { 0x9e, 0 } }, /* 01e */ + { .mk = { 0x1f, 0 }, .brk = { 0x9f, 0 } }, /* 01f */ + { .mk = { 0x20, 0 }, .brk = { 0xa0, 0 } }, /* 020 */ + { .mk = { 0x21, 0 }, .brk = { 0xa1, 0 } }, /* 021 */ + { .mk = { 0x22, 0 }, .brk = { 0xa2, 0 } }, /* 022 */ + { .mk = { 0x23, 0 }, .brk = { 0xa3, 0 } }, /* 023 */ + { .mk = { 0x24, 0 }, .brk = { 0xa4, 0 } }, /* 024 */ + { .mk = { 0x25, 0 }, .brk = { 0xa5, 0 } }, /* 025 */ + { .mk = { 0x26, 0 }, .brk = { 0xa6, 0 } }, /* 026 */ + { .mk = { 0x27, 0 }, .brk = { 0xa7, 0 } }, /* 027 */ + { .mk = { 0x28, 0 }, .brk = { 0xa8, 0 } }, /* 028 */ + { .mk = { 0x29, 0 }, .brk = { 0xa9, 0 } }, /* 029 */ + { .mk = { 0x2a, 0 }, .brk = { 0xaa, 0 } }, /* 02a */ + { .mk = { 0x2b, 0 }, .brk = { 0xab, 0 } }, /* 02b */ + { .mk = { 0x2c, 0 }, .brk = { 0xac, 0 } }, /* 02c */ + { .mk = { 0x2d, 0 }, .brk = { 0xad, 0 } }, /* 02d */ + { .mk = { 0x2e, 0 }, .brk = { 0xae, 0 } }, /* 02e */ + { .mk = { 0x2f, 0 }, .brk = { 0xaf, 0 } }, /* 02f */ + { .mk = { 0x30, 0 }, .brk = { 0xb0, 0 } }, /* 030 */ + { .mk = { 0x31, 0 }, .brk = { 0xb1, 0 } }, /* 031 */ + { .mk = { 0x32, 0 }, .brk = { 0xb2, 0 } }, /* 032 */ + { .mk = { 0x33, 0 }, .brk = { 0xb3, 0 } }, /* 033 */ + { .mk = { 0x34, 0 }, .brk = { 0xb4, 0 } }, /* 034 */ + { .mk = { 0x35, 0 }, .brk = { 0xb5, 0 } }, /* 035 */ + { .mk = { 0x36, 0 }, .brk = { 0xb6, 0 } }, /* 036 */ + { .mk = { 0x37, 0 }, .brk = { 0xb7, 0 } }, /* 037 */ + { .mk = { 0x38, 0 }, .brk = { 0xb8, 0 } }, /* 038 */ + { .mk = { 0x39, 0 }, .brk = { 0xb9, 0 } }, /* 039 */ + { .mk = { 0x3a, 0 }, .brk = { 0xba, 0 } }, /* 03a */ + { .mk = { 0x3b, 0 }, .brk = { 0xbb, 0 } }, /* 03b */ + { .mk = { 0x3c, 0 }, .brk = { 0xbc, 0 } }, /* 03c */ + { .mk = { 0x3d, 0 }, .brk = { 0xbd, 0 } }, /* 03d */ + { .mk = { 0x3e, 0 }, .brk = { 0xbe, 0 } }, /* 03e */ + { .mk = { 0x3f, 0 }, .brk = { 0xbf, 0 } }, /* 03f */ + { .mk = { 0x40, 0 }, .brk = { 0xc0, 0 } }, /* 040 */ + { .mk = { 0x41, 0 }, .brk = { 0xc1, 0 } }, /* 041 */ + { .mk = { 0x42, 0 }, .brk = { 0xc2, 0 } }, /* 042 */ + { .mk = { 0x43, 0 }, .brk = { 0xc3, 0 } }, /* 043 */ + { .mk = { 0x44, 0 }, .brk = { 0xc4, 0 } }, /* 044 */ + { .mk = { 0x45, 0 }, .brk = { 0xc5, 0 } }, /* 045 */ + { .mk = { 0x46, 0 }, .brk = { 0xc6, 0 } }, /* 046 */ + { .mk = { 0x47, 0 }, .brk = { 0xc7, 0 } }, /* 047 */ + { .mk = { 0x48, 0 }, .brk = { 0xc8, 0 } }, /* 048 */ + { .mk = { 0x49, 0 }, .brk = { 0xc9, 0 } }, /* 049 */ + { .mk = { 0x4a, 0 }, .brk = { 0xca, 0 } }, /* 04a */ + { .mk = { 0x4b, 0 }, .brk = { 0xcb, 0 } }, /* 04b */ + { .mk = { 0x4c, 0 }, .brk = { 0xcc, 0 } }, /* 04c */ + { .mk = { 0x4d, 0 }, .brk = { 0xcd, 0 } }, /* 04d */ + { .mk = { 0x4e, 0 }, .brk = { 0xce, 0 } }, /* 04e */ + { .mk = { 0x4f, 0 }, .brk = { 0xcf, 0 } }, /* 04f */ + { .mk = { 0x50, 0 }, .brk = { 0xd0, 0 } }, /* 050 */ + { .mk = { 0x51, 0 }, .brk = { 0xd1, 0 } }, /* 051 */ + { .mk = { 0x52, 0 }, .brk = { 0xd2, 0 } }, /* 052 */ + { .mk = { 0x53, 0 }, .brk = { 0xd3, 0 } }, /* 053 */ + { .mk = { 0x54, 0 }, .brk = { 0xd4, 0 } }, /* 054 */ + { .mk = { 0 }, .brk = { 0 } }, /* 055 */ + { .mk = { 0x56, 0 }, .brk = { 0xd6, 0 } }, /* 054 */ + { .mk = { 0 }, .brk = { 0 } }, /* 057 */ + { .mk = { 0 }, .brk = { 0 } }, /* 058 */ + { .mk = { 0 }, .brk = { 0 } }, /* 059 */ + { .mk = { 0 }, .brk = { 0 } }, /* 05a */ + { .mk = { 0 }, .brk = { 0 } }, /* 05b */ + { .mk = { 0x5c, 0 }, .brk = { 0xdc, 0 } }, /* 054 */ + { .mk = { 0 }, .brk = { 0 } }, /* 05d */ + { .mk = { 0 }, .brk = { 0 } }, /* 05e */ + { .mk = { 0 }, .brk = { 0 } }, /* 05f */ + { .mk = { 0x60, 0 }, .brk = { 0xe0, 0 } }, /* 060 */ + { .mk = { 0x61, 0 }, .brk = { 0xe1, 0 } }, /* 061 */ + { .mk = { 0x62, 0 }, .brk = { 0xe2, 0 } }, /* 062 */ + { .mk = { 0x63, 0 }, .brk = { 0xe3, 0 } }, /* 063 */ + { .mk = { 0x64, 0 }, .brk = { 0xe4, 0 } }, /* 064 */ + { .mk = { 0x65, 0 }, .brk = { 0xe5, 0 } }, /* 065 */ + { .mk = { 0x66, 0 }, .brk = { 0xe6, 0 } }, /* 066 */ + { .mk = { 0x67, 0 }, .brk = { 0xe7, 0 } }, /* 067 */ + { .mk = { 0x68, 0 }, .brk = { 0xe8, 0 } }, /* 068 */ + { .mk = { 0x69, 0 }, .brk = { 0xe9, 0 } }, /* 069 */ + { .mk = { 0x6a, 0 }, .brk = { 0xea, 0 } }, /* 06a */ + { .mk = { 0x6b, 0 }, .brk = { 0xeb, 0 } }, /* 06b */ + { .mk = { 0x6c, 0 }, .brk = { 0xec, 0 } }, /* 06c */ + { .mk = { 0x6d, 0 }, .brk = { 0xed, 0 } }, /* 06d */ + { .mk = { 0x6e, 0 }, .brk = { 0xee, 0 } }, /* 06e */ + { .mk = { 0x6f, 0 }, .brk = { 0xef, 0 } }, /* 06f */ + { .mk = { 0x70, 0 }, .brk = { 0xf0, 0 } }, /* 070 */ + { .mk = { 0x71, 0 }, .brk = { 0xf1, 0 } }, /* 071 */ + { .mk = { 0x72, 0 }, .brk = { 0xf2, 0 } }, /* 072 */ + { .mk = { 0x73, 0 }, .brk = { 0xf3, 0 } }, /* 073 */ + { .mk = { 0x74, 0 }, .brk = { 0xf4, 0 } }, /* 074 */ + { .mk = { 0x75, 0 }, .brk = { 0xf5, 0 } }, /* 075 */ + { .mk = { 0x76, 0 }, .brk = { 0xf6, 0 } }, /* 076 */ + { .mk = { 0x77, 0 }, .brk = { 0xf7, 0 } }, /* 077 */ + { .mk = { 0x78, 0 }, .brk = { 0xf8, 0 } }, /* 078 */ + { .mk = { 0x79, 0 }, .brk = { 0xf9, 0 } }, /* 079 */ + { .mk = { 0x7a, 0 }, .brk = { 0xfa, 0 } }, /* 07a */ + { .mk = { 0x7b, 0 }, .brk = { 0xfb, 0 } }, /* 07b */ + { .mk = { 0x7c, 0 }, .brk = { 0xfc, 0 } }, /* 07c */ + { .mk = { 0x7d, 0 }, .brk = { 0xfd, 0 } }, /* 07d */ + { .mk = { 0x7e, 0 }, .brk = { 0xfe, 0 } }, /* 07e */ + { .mk = { 0x7f, 0 }, .brk = { 0xff, 0 } }, /* 07f */ + { .mk = { 0 }, .brk = { 0 } }, /* 080 */ + { .mk = { 0 }, .brk = { 0 } }, /* 081 */ + { .mk = { 0 }, .brk = { 0 } }, /* 082 */ + { .mk = { 0 }, .brk = { 0 } }, /* 083 */ + { .mk = { 0 }, .brk = { 0 } }, /* 084 */ + { .mk = { 0 }, .brk = { 0 } }, /* 085 */ + { .mk = { 0 }, .brk = { 0 } }, /* 086 */ + { .mk = { 0 }, .brk = { 0 } }, /* 087 */ + { .mk = { 0 }, .brk = { 0 } }, /* 088 */ + { .mk = { 0 }, .brk = { 0 } }, /* 089 */ + { .mk = { 0 }, .brk = { 0 } }, /* 08a */ + { .mk = { 0 }, .brk = { 0 } }, /* 08b */ + { .mk = { 0 }, .brk = { 0 } }, /* 08c */ + { .mk = { 0 }, .brk = { 0 } }, /* 08d */ + { .mk = { 0 }, .brk = { 0 } }, /* 08e */ + { .mk = { 0 }, .brk = { 0 } }, /* 08f */ + { .mk = { 0 }, .brk = { 0 } }, /* 090 */ + { .mk = { 0 }, .brk = { 0 } }, /* 091 */ + { .mk = { 0 }, .brk = { 0 } }, /* 092 */ + { .mk = { 0 }, .brk = { 0 } }, /* 093 */ + { .mk = { 0 }, .brk = { 0 } }, /* 094 */ + { .mk = { 0 }, .brk = { 0 } }, /* 095 */ + { .mk = { 0 }, .brk = { 0 } }, /* 096 */ + { .mk = { 0 }, .brk = { 0 } }, /* 097 */ + { .mk = { 0 }, .brk = { 0 } }, /* 098 */ + { .mk = { 0 }, .brk = { 0 } }, /* 099 */ + { .mk = { 0 }, .brk = { 0 } }, /* 09a */ + { .mk = { 0 }, .brk = { 0 } }, /* 09b */ + { .mk = { 0 }, .brk = { 0 } }, /* 09c */ + { .mk = { 0 }, .brk = { 0 } }, /* 09d */ + { .mk = { 0 }, .brk = { 0 } }, /* 09e */ + { .mk = { 0 }, .brk = { 0 } }, /* 09f */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0aa */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ab */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ac */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ad */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ae */ + { .mk = { 0 }, .brk = { 0 } }, /* 0af */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ba */ + { .mk = { 0 }, .brk = { 0 } }, /* 0bb */ + { .mk = { 0 }, .brk = { 0 } }, /* 0bc */ + { .mk = { 0 }, .brk = { 0 } }, /* 0bd */ + { .mk = { 0 }, .brk = { 0 } }, /* 0be */ + { .mk = { 0 }, .brk = { 0 } }, /* 0bf */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ca */ + { .mk = { 0 }, .brk = { 0 } }, /* 0cb */ + { .mk = { 0 }, .brk = { 0 } }, /* 0cc */ + { .mk = { 0 }, .brk = { 0 } }, /* 0cd */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ce */ + { .mk = { 0 }, .brk = { 0 } }, /* 0cf */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0da */ + { .mk = { 0 }, .brk = { 0 } }, /* 0db */ + { .mk = { 0 }, .brk = { 0 } }, /* 0dc */ + { .mk = { 0 }, .brk = { 0 } }, /* 0dd */ + { .mk = { 0 }, .brk = { 0 } }, /* 0de */ + { .mk = { 0 }, .brk = { 0 } }, /* 0df */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ea */ + { .mk = { 0 }, .brk = { 0 } }, /* 0eb */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ec */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ed */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ee */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ef */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f0 */ + { .mk = { 0xf1, 0 }, .brk = { 0 } }, /* 0f1 */ + { .mk = { 0xf2, 0 }, .brk = { 0 } }, /* 0f2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0fa */ + { .mk = { 0 }, .brk = { 0 } }, /* 0fb */ + { .mk = { 0 }, .brk = { 0 } }, /* 0fc */ + { .mk = { 0 }, .brk = { 0 } }, /* 0fd */ + { .mk = { 0 }, .brk = { 0 } }, /* 0fe */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ff */ + { .mk = { 0 }, .brk = { 0 } }, /* 100 */ + { .mk = { 0 }, .brk = { 0 } }, /* 101 */ + { .mk = { 0 }, .brk = { 0 } }, /* 102 */ + { .mk = { 0 }, .brk = { 0 } }, /* 103 */ + { .mk = { 0 }, .brk = { 0 } }, /* 104 */ + { .mk = { 0 }, .brk = { 0 } }, /* 105 */ + { .mk = { 0 }, .brk = { 0 } }, /* 106 */ + { .mk = { 0 }, .brk = { 0 } }, /* 107 */ + { .mk = { 0 }, .brk = { 0 } }, /* 108 */ + { .mk = { 0 }, .brk = { 0 } }, /* 109 */ + { .mk = { 0 }, .brk = { 0 } }, /* 10a */ + { .mk = { 0 }, .brk = { 0 } }, /* 10b */ + { .mk = { 0 }, .brk = { 0 } }, /* 10c */ + { .mk = { 0 }, .brk = { 0 } }, /* 10d */ + { .mk = { 0 }, .brk = { 0 } }, /* 10e */ + { .mk = { 0 }, .brk = { 0 } }, /* 10f */ + { .mk = { 0 }, .brk = { 0 } }, /* 110 */ + { .mk = { 0 }, .brk = { 0 } }, /* 111 */ + { .mk = { 0 }, .brk = { 0 } }, /* 112 */ + { .mk = { 0 }, .brk = { 0 } }, /* 113 */ + { .mk = { 0 }, .brk = { 0 } }, /* 114 */ + { .mk = { 0 }, .brk = { 0 } }, /* 115 */ + { .mk = { 0 }, .brk = { 0 } }, /* 116 */ + { .mk = { 0 }, .brk = { 0 } }, /* 117 */ + { .mk = { 0 }, .brk = { 0 } }, /* 118 */ + { .mk = { 0 }, .brk = { 0 } }, /* 119 */ + { .mk = { 0 }, .brk = { 0 } }, /* 11a */ + { .mk = { 0 }, .brk = { 0 } }, /* 11b */ + { .mk = { 0x1c, 0 }, .brk = { 0x9c, 0 } }, /* 11c */ + { .mk = { 0x1d, 0 }, .brk = { 0x9d, 0 } }, /* 11d */ + { .mk = { 0 }, .brk = { 0 } }, /* 11e */ + { .mk = { 0 }, .brk = { 0 } }, /* 11f */ + { .mk = { 0 }, .brk = { 0 } }, /* 120 */ + { .mk = { 0 }, .brk = { 0 } }, /* 121 */ + { .mk = { 0 }, .brk = { 0 } }, /* 122 */ + { .mk = { 0 }, .brk = { 0 } }, /* 123 */ + { .mk = { 0 }, .brk = { 0 } }, /* 124 */ + { .mk = { 0 }, .brk = { 0 } }, /* 125 */ + { .mk = { 0 }, .brk = { 0 } }, /* 126 */ + { .mk = { 0 }, .brk = { 0 } }, /* 127 */ + { .mk = { 0 }, .brk = { 0 } }, /* 128 */ + { .mk = { 0 }, .brk = { 0 } }, /* 129 */ + { .mk = { 0 }, .brk = { 0 } }, /* 12a */ + { .mk = { 0 }, .brk = { 0 } }, /* 12b */ + { .mk = { 0 }, .brk = { 0 } }, /* 12c */ + { .mk = { 0 }, .brk = { 0 } }, /* 12d */ + { .mk = { 0 }, .brk = { 0 } }, /* 12e */ + { .mk = { 0 }, .brk = { 0 } }, /* 12f */ + { .mk = { 0 }, .brk = { 0 } }, /* 130 */ + { .mk = { 0 }, .brk = { 0 } }, /* 131 */ + { .mk = { 0 }, .brk = { 0 } }, /* 132 */ + { .mk = { 0 }, .brk = { 0 } }, /* 133 */ + { .mk = { 0 }, .brk = { 0 } }, /* 134 */ + { .mk = { 0x35, 0 }, .brk = { 0xb5, 0 } }, /* 135 */ + { .mk = { 0 }, .brk = { 0 } }, /* 136 */ + { .mk = { 0x37, 0 }, .brk = { 0xb7, 0 } }, /* 137 */ + { .mk = { 0x38, 0 }, .brk = { 0xb8, 0 } }, /* 138 */ + { .mk = { 0 }, .brk = { 0 } }, /* 139 */ + { .mk = { 0 }, .brk = { 0 } }, /* 13a */ + { .mk = { 0 }, .brk = { 0 } }, /* 13b */ + { .mk = { 0 }, .brk = { 0 } }, /* 13c */ + { .mk = { 0 }, .brk = { 0 } }, /* 13d */ + { .mk = { 0 }, .brk = { 0 } }, /* 13e */ + { .mk = { 0 }, .brk = { 0 } }, /* 13f */ + { .mk = { 0 }, .brk = { 0 } }, /* 140 */ + { .mk = { 0 }, .brk = { 0 } }, /* 141 */ + { .mk = { 0 }, .brk = { 0 } }, /* 142 */ + { .mk = { 0 }, .brk = { 0 } }, /* 143 */ + { .mk = { 0 }, .brk = { 0 } }, /* 144 */ + { .mk = { 0 }, .brk = { 0 } }, /* 145 */ + { .mk = { 0x46, 0 }, .brk = { 0xc6, 0 } }, /* 146 */ + { .mk = { 0x47, 0 }, .brk = { 0xc7, 0 } }, /* 147 */ + { .mk = { 0x48, 0 }, .brk = { 0xc8, 0 } }, /* 148 */ + { .mk = { 0x49, 0 }, .brk = { 0xc9, 0 } }, /* 149 */ + { .mk = { 0 }, .brk = { 0 } }, /* 14a */ + { .mk = { 0x4b, 0 }, .brk = { 0xcb, 0 } }, /* 14b */ + { .mk = { 0 }, .brk = { 0 } }, /* 14c */ + { .mk = { 0x4d, 0 }, .brk = { 0xcd, 0 } }, /* 14d */ + { .mk = { 0 }, .brk = { 0 } }, /* 14e */ + { .mk = { 0x4f, 0 }, .brk = { 0xcf, 0 } }, /* 14f */ + { .mk = { 0x50, 0 }, .brk = { 0xd0, 0 } }, /* 150 */ + { .mk = { 0x51, 0 }, .brk = { 0xd1, 0 } }, /* 151 */ + { .mk = { 0x52, 0 }, .brk = { 0xd2, 0 } }, /* 152 */ + { .mk = { 0x53, 0 }, .brk = { 0xd3, 0 } }, /* 153 */ + { .mk = { 0 }, .brk = { 0 } }, /* 154 */ + { .mk = { 0 }, .brk = { 0 } }, /* 155 */ + { .mk = { 0 }, .brk = { 0 } }, /* 156 */ + { .mk = { 0 }, .brk = { 0 } }, /* 157 */ + { .mk = { 0 }, .brk = { 0 } }, /* 158 */ + { .mk = { 0 }, .brk = { 0 } }, /* 159 */ + { .mk = { 0 }, .brk = { 0 } }, /* 15a */ + { .mk = { 0x56, 0 }, .brk = { 0xd6, 0 } }, /* 15b */ + { .mk = { 0 }, .brk = { 0 } }, /* 15c */ + { .mk = { 0 }, .brk = { 0 } }, /* 15d */ + { .mk = { 0 }, .brk = { 0 } }, /* 15e */ + { .mk = { 0 }, .brk = { 0 } }, /* 15f */ + { .mk = { 0 }, .brk = { 0 } }, /* 160 */ + { .mk = { 0 }, .brk = { 0 } }, /* 161 */ + { .mk = { 0 }, .brk = { 0 } }, /* 162 */ + { .mk = { 0 }, .brk = { 0 } }, /* 163 */ + { .mk = { 0 }, .brk = { 0 } }, /* 164 */ + { .mk = { 0 }, .brk = { 0 } }, /* 165 */ + { .mk = { 0 }, .brk = { 0 } }, /* 166 */ + { .mk = { 0 }, .brk = { 0 } }, /* 167 */ + { .mk = { 0 }, .brk = { 0 } }, /* 168 */ + { .mk = { 0 }, .brk = { 0 } }, /* 169 */ + { .mk = { 0 }, .brk = { 0 } }, /* 16a */ + { .mk = { 0 }, .brk = { 0 } }, /* 16b */ + { .mk = { 0 }, .brk = { 0 } }, /* 16c */ + { .mk = { 0 }, .brk = { 0 } }, /* 16d */ + { .mk = { 0 }, .brk = { 0 } }, /* 16e */ + { .mk = { 0 }, .brk = { 0 } }, /* 16f */ + { .mk = { 0 }, .brk = { 0 } }, /* 170 */ + { .mk = { 0 }, .brk = { 0 } }, /* 171 */ + { .mk = { 0 }, .brk = { 0 } }, /* 172 */ + { .mk = { 0 }, .brk = { 0 } }, /* 173 */ + { .mk = { 0 }, .brk = { 0 } }, /* 174 */ + { .mk = { 0 }, .brk = { 0 } }, /* 175 */ + { .mk = { 0 }, .brk = { 0 } }, /* 176 */ + { .mk = { 0 }, .brk = { 0 } }, /* 177 */ + { .mk = { 0 }, .brk = { 0 } }, /* 178 */ + { .mk = { 0 }, .brk = { 0 } }, /* 179 */ + { .mk = { 0 }, .brk = { 0 } }, /* 17a */ + { .mk = { 0 }, .brk = { 0 } }, /* 17b */ + { .mk = { 0 }, .brk = { 0 } }, /* 17c */ + { .mk = { 0 }, .brk = { 0 } }, /* 17d */ + { .mk = { 0 }, .brk = { 0 } }, /* 17e */ + { .mk = { 0 }, .brk = { 0 } }, /* 17f */ + { .mk = { 0 }, .brk = { 0 } }, /* 180 */ + { .mk = { 0 }, .brk = { 0 } }, /* 181 */ + { .mk = { 0 }, .brk = { 0 } }, /* 182 */ + { .mk = { 0 }, .brk = { 0 } }, /* 183 */ + { .mk = { 0 }, .brk = { 0 } }, /* 184 */ + { .mk = { 0 }, .brk = { 0 } }, /* 185 */ + { .mk = { 0 }, .brk = { 0 } }, /* 186 */ + { .mk = { 0 }, .brk = { 0 } }, /* 187 */ + { .mk = { 0 }, .brk = { 0 } }, /* 188 */ + { .mk = { 0 }, .brk = { 0 } }, /* 189 */ + { .mk = { 0 }, .brk = { 0 } }, /* 18a */ + { .mk = { 0 }, .brk = { 0 } }, /* 18b */ + { .mk = { 0 }, .brk = { 0 } }, /* 18c */ + { .mk = { 0 }, .brk = { 0 } }, /* 18d */ + { .mk = { 0 }, .brk = { 0 } }, /* 18e */ + { .mk = { 0 }, .brk = { 0 } }, /* 18f */ + { .mk = { 0 }, .brk = { 0 } }, /* 190 */ + { .mk = { 0 }, .brk = { 0 } }, /* 191 */ + { .mk = { 0 }, .brk = { 0 } }, /* 192 */ + { .mk = { 0 }, .brk = { 0 } }, /* 193 */ + { .mk = { 0 }, .brk = { 0 } }, /* 194 */ + { .mk = { 0 }, .brk = { 0 } }, /* 195 */ + { .mk = { 0 }, .brk = { 0 } }, /* 196 */ + { .mk = { 0 }, .brk = { 0 } }, /* 197 */ + { .mk = { 0 }, .brk = { 0 } }, /* 198 */ + { .mk = { 0 }, .brk = { 0 } }, /* 199 */ + { .mk = { 0 }, .brk = { 0 } }, /* 19a */ + { .mk = { 0 }, .brk = { 0 } }, /* 19b */ + { .mk = { 0 }, .brk = { 0 } }, /* 19c */ + { .mk = { 0 }, .brk = { 0 } }, /* 19d */ + { .mk = { 0 }, .brk = { 0 } }, /* 19e */ + { .mk = { 0 }, .brk = { 0 } }, /* 19f */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1aa */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ab */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ac */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ad */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ae */ + { .mk = { 0 }, .brk = { 0 } }, /* 1af */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ba */ + { .mk = { 0 }, .brk = { 0 } }, /* 1bb */ + { .mk = { 0 }, .brk = { 0 } }, /* 1bc */ + { .mk = { 0 }, .brk = { 0 } }, /* 1bd */ + { .mk = { 0 }, .brk = { 0 } }, /* 1be */ + { .mk = { 0 }, .brk = { 0 } }, /* 1bf */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ca */ + { .mk = { 0 }, .brk = { 0 } }, /* 1cb */ + { .mk = { 0 }, .brk = { 0 } }, /* 1cc */ + { .mk = { 0 }, .brk = { 0 } }, /* 1cd */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ce */ + { .mk = { 0 }, .brk = { 0 } }, /* 1cf */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1da */ + { .mk = { 0 }, .brk = { 0 } }, /* 1db */ + { .mk = { 0 }, .brk = { 0 } }, /* 1dc */ + { .mk = { 0 }, .brk = { 0 } }, /* 1dd */ + { .mk = { 0 }, .brk = { 0 } }, /* 1de */ + { .mk = { 0 }, .brk = { 0 } }, /* 1df */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ea */ + { .mk = { 0 }, .brk = { 0 } }, /* 1eb */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ec */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ed */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ee */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ef */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1fa */ + { .mk = { 0 }, .brk = { 0 } }, /* 1fb */ + { .mk = { 0 }, .brk = { 0 } }, /* 1fc */ + { .mk = { 0 }, .brk = { 0 } }, /* 1fd */ + { .mk = { 0 }, .brk = { 0 } }, /* 1fe */ + { .mk = { 0 }, .brk = { 0 } } /* 1ff */ + // clang-format on +}; + +const scancode scancode_set2_at[512] = { + // clang-format off + { .mk = { 0 }, .brk = { 0 } }, /* 000 */ + { .mk = { 0x76, 0 }, .brk = { 0xF0, 0x76, 0 } }, /* 001 */ + { .mk = { 0x16, 0 }, .brk = { 0xF0, 0x16, 0 } }, /* 002 */ + { .mk = { 0x1E, 0 }, .brk = { 0xF0, 0x1E, 0 } }, /* 003 */ + { .mk = { 0x26, 0 }, .brk = { 0xF0, 0x26, 0 } }, /* 004 */ + { .mk = { 0x25, 0 }, .brk = { 0xF0, 0x25, 0 } }, /* 005 */ + { .mk = { 0x2E, 0 }, .brk = { 0xF0, 0x2E, 0 } }, /* 006 */ + { .mk = { 0x36, 0 }, .brk = { 0xF0, 0x36, 0 } }, /* 007 */ + { .mk = { 0x3D, 0 }, .brk = { 0xF0, 0x3D, 0 } }, /* 008 */ + { .mk = { 0x3E, 0 }, .brk = { 0xF0, 0x3E, 0 } }, /* 009 */ + { .mk = { 0x46, 0 }, .brk = { 0xF0, 0x46, 0 } }, /* 00a */ + { .mk = { 0x45, 0 }, .brk = { 0xF0, 0x45, 0 } }, /* 00b */ + { .mk = { 0x4E, 0 }, .brk = { 0xF0, 0x4E, 0 } }, /* 00c */ + { .mk = { 0x55, 0 }, .brk = { 0xF0, 0x55, 0 } }, /* 00d */ + { .mk = { 0x66, 0 }, .brk = { 0xF0, 0x66, 0 } }, /* 00e */ + { .mk = { 0x0D, 0 }, .brk = { 0xF0, 0x0D, 0 } }, /* 00f */ + { .mk = { 0x15, 0 }, .brk = { 0xF0, 0x15, 0 } }, /* 010 */ + { .mk = { 0x1D, 0 }, .brk = { 0xF0, 0x1D, 0 } }, /* 011 */ + { .mk = { 0x24, 0 }, .brk = { 0xF0, 0x24, 0 } }, /* 012 */ + { .mk = { 0x2D, 0 }, .brk = { 0xF0, 0x2D, 0 } }, /* 013 */ + { .mk = { 0x2C, 0 }, .brk = { 0xF0, 0x2C, 0 } }, /* 014 */ + { .mk = { 0x35, 0 }, .brk = { 0xF0, 0x35, 0 } }, /* 015 */ + { .mk = { 0x3C, 0 }, .brk = { 0xF0, 0x3C, 0 } }, /* 016 */ + { .mk = { 0x43, 0 }, .brk = { 0xF0, 0x43, 0 } }, /* 017 */ + { .mk = { 0x44, 0 }, .brk = { 0xF0, 0x44, 0 } }, /* 018 */ + { .mk = { 0x4D, 0 }, .brk = { 0xF0, 0x4D, 0 } }, /* 019 */ + { .mk = { 0x54, 0 }, .brk = { 0xF0, 0x54, 0 } }, /* 01a */ + { .mk = { 0x5B, 0 }, .brk = { 0xF0, 0x5B, 0 } }, /* 01b */ + { .mk = { 0x5A, 0 }, .brk = { 0xF0, 0x5A, 0 } }, /* 01c */ + { .mk = { 0x14, 0 }, .brk = { 0xF0, 0x14, 0 } }, /* 01d */ + { .mk = { 0x1C, 0 }, .brk = { 0xF0, 0x1C, 0 } }, /* 01e */ + { .mk = { 0x1B, 0 }, .brk = { 0xF0, 0x1B, 0 } }, /* 01f */ + { .mk = { 0x23, 0 }, .brk = { 0xF0, 0x23, 0 } }, /* 020 */ + { .mk = { 0x2B, 0 }, .brk = { 0xF0, 0x2B, 0 } }, /* 021 */ + { .mk = { 0x34, 0 }, .brk = { 0xF0, 0x34, 0 } }, /* 022 */ + { .mk = { 0x33, 0 }, .brk = { 0xF0, 0x33, 0 } }, /* 023 */ + { .mk = { 0x3B, 0 }, .brk = { 0xF0, 0x3B, 0 } }, /* 024 */ + { .mk = { 0x42, 0 }, .brk = { 0xF0, 0x42, 0 } }, /* 025 */ + { .mk = { 0x4B, 0 }, .brk = { 0xF0, 0x4B, 0 } }, /* 026 */ + { .mk = { 0x4C, 0 }, .brk = { 0xF0, 0x4C, 0 } }, /* 027 */ + { .mk = { 0x52, 0 }, .brk = { 0xF0, 0x52, 0 } }, /* 028 */ + { .mk = { 0x0E, 0 }, .brk = { 0xF0, 0x0E, 0 } }, /* 029 */ + { .mk = { 0x12, 0 }, .brk = { 0xF0, 0x12, 0 } }, /* 02a */ + { .mk = { 0x5D, 0 }, .brk = { 0xF0, 0x5D, 0 } }, /* 02b */ + { .mk = { 0x1A, 0 }, .brk = { 0xF0, 0x1A, 0 } }, /* 02c */ + { .mk = { 0x22, 0 }, .brk = { 0xF0, 0x22, 0 } }, /* 02d */ + { .mk = { 0x21, 0 }, .brk = { 0xF0, 0x21, 0 } }, /* 02e */ + { .mk = { 0x2A, 0 }, .brk = { 0xF0, 0x2A, 0 } }, /* 02f */ + { .mk = { 0x32, 0 }, .brk = { 0xF0, 0x32, 0 } }, /* 030 */ + { .mk = { 0x31, 0 }, .brk = { 0xF0, 0x31, 0 } }, /* 031 */ + { .mk = { 0x3A, 0 }, .brk = { 0xF0, 0x3A, 0 } }, /* 032 */ + { .mk = { 0x41, 0 }, .brk = { 0xF0, 0x41, 0 } }, /* 033 */ + { .mk = { 0x49, 0 }, .brk = { 0xF0, 0x49, 0 } }, /* 034 */ + { .mk = { 0x4A, 0 }, .brk = { 0xF0, 0x4A, 0 } }, /* 035 */ + { .mk = { 0x59, 0 }, .brk = { 0xF0, 0x59, 0 } }, /* 036 */ + { .mk = { 0x7C, 0 }, .brk = { 0xF0, 0x7C, 0 } }, /* 037 */ + { .mk = { 0x11, 0 }, .brk = { 0xF0, 0x11, 0 } }, /* 038 */ + { .mk = { 0x29, 0 }, .brk = { 0xF0, 0x29, 0 } }, /* 039 */ + { .mk = { 0x58, 0 }, .brk = { 0xF0, 0x58, 0 } }, /* 03a */ + { .mk = { 0x05, 0 }, .brk = { 0xF0, 0x05, 0 } }, /* 03b */ + { .mk = { 0x06, 0 }, .brk = { 0xF0, 0x06, 0 } }, /* 03c */ + { .mk = { 0x04, 0 }, .brk = { 0xF0, 0x04, 0 } }, /* 03d */ + { .mk = { 0x0C, 0 }, .brk = { 0xF0, 0x0C, 0 } }, /* 03e */ + { .mk = { 0x03, 0 }, .brk = { 0xF0, 0x03, 0 } }, /* 03f */ + { .mk = { 0x0B, 0 }, .brk = { 0xF0, 0x0B, 0 } }, /* 040 */ + { .mk = { 0x83, 0 }, .brk = { 0xF0, 0x83, 0 } }, /* 041 */ + { .mk = { 0x0A, 0 }, .brk = { 0xF0, 0x0A, 0 } }, /* 042 */ + { .mk = { 0x01, 0 }, .brk = { 0xF0, 0x01, 0 } }, /* 043 */ + { .mk = { 0x09, 0 }, .brk = { 0xF0, 0x09, 0 } }, /* 044 */ + { .mk = { 0x77, 0 }, .brk = { 0xF0, 0x77, 0 } }, /* 045 */ + { .mk = { 0x7E, 0 }, .brk = { 0xF0, 0x7E, 0 } }, /* 046 */ + { .mk = { 0x6C, 0 }, .brk = { 0xF0, 0x6C, 0 } }, /* 047 */ + { .mk = { 0x75, 0 }, .brk = { 0xF0, 0x75, 0 } }, /* 048 */ + { .mk = { 0x7D, 0 }, .brk = { 0xF0, 0x7D, 0 } }, /* 049 */ + { .mk = { 0x7B, 0 }, .brk = { 0xF0, 0x7B, 0 } }, /* 04a */ + { .mk = { 0x6B, 0 }, .brk = { 0xF0, 0x6B, 0 } }, /* 04b */ + { .mk = { 0x73, 0 }, .brk = { 0xF0, 0x73, 0 } }, /* 04c */ + { .mk = { 0x74, 0 }, .brk = { 0xF0, 0x74, 0 } }, /* 04d */ + { .mk = { 0x79, 0 }, .brk = { 0xF0, 0x79, 0 } }, /* 04e */ + { .mk = { 0x69, 0 }, .brk = { 0xF0, 0x69, 0 } }, /* 04f */ + { .mk = { 0x72, 0 }, .brk = { 0xF0, 0x72, 0 } }, /* 050 */ + { .mk = { 0x7A, 0 }, .brk = { 0xF0, 0x7A, 0 } }, /* 051 */ + { .mk = { 0x70, 0 }, .brk = { 0xF0, 0x70, 0 } }, /* 052 */ + { .mk = { 0x71, 0 }, .brk = { 0xF0, 0x71, 0 } }, /* 053 */ + { .mk = { 0x84, 0 }, .brk = { 0xF0, 0x84, 0 } }, /* 054 */ + { .mk = { 0 }, .brk = { 0 } }, /* 055 */ + { .mk = { 0x61, 0 }, .brk = { 0xF0, 0x61, 0 } }, /* 056 */ + { .mk = { 0 }, .brk = { 0 } }, /* 057 */ + { .mk = { 0 }, .brk = { 0 } }, /* 058 */ + { .mk = { 0 }, .brk = { 0 } }, /* 059 */ + { .mk = { 0 }, .brk = { 0 } }, /* 05a */ + { .mk = { 0 }, .brk = { 0 } }, /* 05b */ + { .mk = { 0x27, 0 }, .brk = { 0xF0, 0x27, 0 } }, /* 05c */ + { .mk = { 0 }, .brk = { 0 } }, /* 05d */ + { .mk = { 0 }, .brk = { 0 } }, /* 05e */ + { .mk = { 0 }, .brk = { 0 } }, /* 05f */ + { .mk = { 0x47, 0 }, .brk = { 0xF0, 0x47, 0 } }, /* 060 */ + { .mk = { 0x4F, 0 }, .brk = { 0xF0, 0x4F, 0 } }, /* 061 */ + { .mk = { 0x56, 0 }, .brk = { 0xF0, 0x56, 0 } }, /* 062 */ + { .mk = { 0x5E, 0 }, .brk = { 0xF0, 0x5E, 0 } }, /* 063 */ + { .mk = { 0x08, 0 }, .brk = { 0xF0, 0x08, 0 } }, /* 064 */ + { .mk = { 0x10, 0 }, .brk = { 0xF0, 0x10, 0 } }, /* 065 */ + { .mk = { 0x18, 0 }, .brk = { 0xF0, 0x18, 0 } }, /* 066 */ + { .mk = { 0x20, 0 }, .brk = { 0xF0, 0x20, 0 } }, /* 067 */ + { .mk = { 0x28, 0 }, .brk = { 0xF0, 0x28, 0 } }, /* 068 */ + { .mk = { 0x30, 0 }, .brk = { 0xF0, 0x30, 0 } }, /* 069 */ + { .mk = { 0x38, 0 }, .brk = { 0xF0, 0x38, 0 } }, /* 06a */ + { .mk = { 0x40, 0 }, .brk = { 0xF0, 0x40, 0 } }, /* 06b */ + { .mk = { 0x48, 0 }, .brk = { 0xF0, 0x48, 0 } }, /* 06c */ + { .mk = { 0x50, 0 }, .brk = { 0xF0, 0x50, 0 } }, /* 06d */ + { .mk = { 0x57, 0 }, .brk = { 0xF0, 0x57, 0 } }, /* 06e */ + { .mk = { 0x6F, 0 }, .brk = { 0xF0, 0x6F, 0 } }, /* 06f */ + { .mk = { 0x13, 0 }, .brk = { 0xF0, 0x13, 0 } }, /* 070 */ + { .mk = { 0x19, 0 }, .brk = { 0xF0, 0x19, 0 } }, /* 071 */ + { .mk = { 0x39, 0 }, .brk = { 0xF0, 0x39, 0 } }, /* 072 */ + { .mk = { 0x51, 0 }, .brk = { 0xF0, 0x51, 0 } }, /* 073 */ + { .mk = { 0x53, 0 }, .brk = { 0xF0, 0x53, 0 } }, /* 074 */ + { .mk = { 0x5C, 0 }, .brk = { 0xF0, 0x5C, 0 } }, /* 075 */ + { .mk = { 0x5F, 0 }, .brk = { 0xF0, 0x5F, 0 } }, /* 076 */ + { .mk = { 0x62, 0 }, .brk = { 0xF0, 0x62, 0 } }, /* 077 */ + { .mk = { 0x63, 0 }, .brk = { 0xF0, 0x63, 0 } }, /* 078 */ + { .mk = { 0x64, 0 }, .brk = { 0xF0, 0x64, 0 } }, /* 079 */ + { .mk = { 0x65, 0 }, .brk = { 0xF0, 0x65, 0 } }, /* 07a */ + { .mk = { 0x67, 0 }, .brk = { 0xF0, 0x67, 0 } }, /* 07b */ + { .mk = { 0x68, 0 }, .brk = { 0xF0, 0x68, 0 } }, /* 07c */ + { .mk = { 0x6A, 0 }, .brk = { 0xF0, 0x6A, 0 } }, /* 07d */ + { .mk = { 0x6D, 0 }, .brk = { 0xF0, 0x6D, 0 } }, /* 07e */ + { .mk = { 0x6E, 0 }, .brk = { 0xF0, 0x6E, 0 } }, /* 07f */ + { .mk = { 0 }, .brk = { 0 } }, /* 080 */ + { .mk = { 0 }, .brk = { 0 } }, /* 081 */ + { .mk = { 0 }, .brk = { 0 } }, /* 082 */ + { .mk = { 0 }, .brk = { 0 } }, /* 083 */ + { .mk = { 0 }, .brk = { 0 } }, /* 084 */ + { .mk = { 0 }, .brk = { 0 } }, /* 085 */ + { .mk = { 0 }, .brk = { 0 } }, /* 086 */ + { .mk = { 0 }, .brk = { 0 } }, /* 087 */ + { .mk = { 0 }, .brk = { 0 } }, /* 088 */ + { .mk = { 0 }, .brk = { 0 } }, /* 089 */ + { .mk = { 0 }, .brk = { 0 } }, /* 08a */ + { .mk = { 0 }, .brk = { 0 } }, /* 08b */ + { .mk = { 0 }, .brk = { 0 } }, /* 08c */ + { .mk = { 0 }, .brk = { 0 } }, /* 08d */ + { .mk = { 0 }, .brk = { 0 } }, /* 08e */ + { .mk = { 0 }, .brk = { 0 } }, /* 08f */ + { .mk = { 0 }, .brk = { 0 } }, /* 090 */ + { .mk = { 0 }, .brk = { 0 } }, /* 091 */ + { .mk = { 0 }, .brk = { 0 } }, /* 092 */ + { .mk = { 0 }, .brk = { 0 } }, /* 093 */ + { .mk = { 0 }, .brk = { 0 } }, /* 094 */ + { .mk = { 0 }, .brk = { 0 } }, /* 095 */ + { .mk = { 0 }, .brk = { 0 } }, /* 096 */ + { .mk = { 0 }, .brk = { 0 } }, /* 097 */ + { .mk = { 0 }, .brk = { 0 } }, /* 098 */ + { .mk = { 0 }, .brk = { 0 } }, /* 099 */ + { .mk = { 0 }, .brk = { 0 } }, /* 09a */ + { .mk = { 0 }, .brk = { 0 } }, /* 09b */ + { .mk = { 0 }, .brk = { 0 } }, /* 09c */ + { .mk = { 0 }, .brk = { 0 } }, /* 09d */ + { .mk = { 0 }, .brk = { 0 } }, /* 09e */ + { .mk = { 0 }, .brk = { 0 } }, /* 09f */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0aa */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ab */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ac */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ad */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ae */ + { .mk = { 0 }, .brk = { 0 } }, /* 0af */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ba */ + { .mk = { 0 }, .brk = { 0 } }, /* 0bb */ + { .mk = { 0 }, .brk = { 0 } }, /* 0bc */ + { .mk = { 0 }, .brk = { 0 } }, /* 0bd */ + { .mk = { 0 }, .brk = { 0 } }, /* 0be */ + { .mk = { 0 }, .brk = { 0 } }, /* 0bf */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ca */ + { .mk = { 0 }, .brk = { 0 } }, /* 0cb */ + { .mk = { 0 }, .brk = { 0 } }, /* 0cc */ + { .mk = { 0 }, .brk = { 0 } }, /* 0cd */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ce */ + { .mk = { 0 }, .brk = { 0 } }, /* 0cf */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0da */ + { .mk = { 0 }, .brk = { 0 } }, /* 0db */ + { .mk = { 0 }, .brk = { 0 } }, /* 0dc */ + { .mk = { 0 }, .brk = { 0 } }, /* 0dd */ + { .mk = { 0 }, .brk = { 0 } }, /* 0de */ + { .mk = { 0 }, .brk = { 0 } }, /* 0df */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ea */ + { .mk = { 0 }, .brk = { 0 } }, /* 0eb */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ec */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ed */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ee */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ef */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f0 */ + { .mk = { 0xf1, 0 }, .brk = { 0xf0, 0xf1, 0 } }, /* 0f1 */ + { .mk = { 0xf2, 0 }, .brk = { 0xf0, 0xf2, 0 } }, /* 0f2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0fa */ + { .mk = { 0 }, .brk = { 0 } }, /* 0fb */ + { .mk = { 0 }, .brk = { 0 } }, /* 0fc */ + { .mk = { 0 }, .brk = { 0 } }, /* 0fd */ + { .mk = { 0 }, .brk = { 0 } }, /* 0fe */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ff */ + { .mk = { 0 }, .brk = { 0 } }, /* 100 */ + { .mk = { 0 }, .brk = { 0 } }, /* 101 */ + { .mk = { 0 }, .brk = { 0 } }, /* 102 */ + { .mk = { 0 }, .brk = { 0 } }, /* 103 */ + { .mk = { 0 }, .brk = { 0 } }, /* 104 */ + { .mk = { 0 }, .brk = { 0 } }, /* 105 */ + { .mk = { 0 }, .brk = { 0 } }, /* 106 */ + { .mk = { 0 }, .brk = { 0 } }, /* 107 */ + { .mk = { 0 }, .brk = { 0 } }, /* 108 */ + { .mk = { 0 }, .brk = { 0 } }, /* 109 */ + { .mk = { 0 }, .brk = { 0 } }, /* 10a */ + { .mk = { 0 }, .brk = { 0 } }, /* 10b */ + { .mk = { 0 }, .brk = { 0 } }, /* 10c */ + { .mk = { 0 }, .brk = { 0 } }, /* 10d */ + { .mk = { 0 }, .brk = { 0 } }, /* 10e */ + { .mk = { 0 }, .brk = { 0 } }, /* 10f */ + { .mk = { 0 }, .brk = { 0 } }, /* 110 */ + { .mk = { 0 }, .brk = { 0 } }, /* 111 */ + { .mk = { 0 }, .brk = { 0 } }, /* 112 */ + { .mk = { 0 }, .brk = { 0 } }, /* 113 */ + { .mk = { 0 }, .brk = { 0 } }, /* 114 */ + { .mk = { 0 }, .brk = { 0 } }, /* 115 */ + { .mk = { 0 }, .brk = { 0 } }, /* 116 */ + { .mk = { 0 }, .brk = { 0 } }, /* 117 */ + { .mk = { 0 }, .brk = { 0 } }, /* 118 */ + { .mk = { 0 }, .brk = { 0 } }, /* 119 */ + { .mk = { 0 }, .brk = { 0 } }, /* 11a */ + { .mk = { 0 }, .brk = { 0 } }, /* 11b */ + { .mk = { 0x5A, 0 }, .brk = { 0xF0, 0x5A, 0 } }, /* 11c */ + { .mk = { 0x14, 0 }, .brk = { 0xF0, 0x14, 0 } }, /* 11d */ + { .mk = { 0 }, .brk = { 0 } }, /* 11e */ + { .mk = { 0 }, .brk = { 0 } }, /* 11f */ + { .mk = { 0 }, .brk = { 0 } }, /* 120 */ + { .mk = { 0 }, .brk = { 0 } }, /* 121 */ + { .mk = { 0 }, .brk = { 0 } }, /* 122 */ + { .mk = { 0 }, .brk = { 0 } }, /* 123 */ + { .mk = { 0 }, .brk = { 0 } }, /* 124 */ + { .mk = { 0 }, .brk = { 0 } }, /* 125 */ + { .mk = { 0 }, .brk = { 0 } }, /* 126 */ + { .mk = { 0 }, .brk = { 0 } }, /* 127 */ + { .mk = { 0 }, .brk = { 0 } }, /* 128 */ + { .mk = { 0 }, .brk = { 0 } }, /* 129 */ + { .mk = { 0 }, .brk = { 0 } }, /* 12a */ + { .mk = { 0 }, .brk = { 0 } }, /* 12b */ + { .mk = { 0 }, .brk = { 0 } }, /* 12c */ + { .mk = { 0 }, .brk = { 0 } }, /* 12d */ + { .mk = { 0 }, .brk = { 0 } }, /* 12e */ + { .mk = { 0 }, .brk = { 0 } }, /* 12f */ + { .mk = { 0 }, .brk = { 0 } }, /* 130 */ + { .mk = { 0 }, .brk = { 0 } }, /* 131 */ + { .mk = { 0 }, .brk = { 0 } }, /* 132 */ + { .mk = { 0 }, .brk = { 0 } }, /* 133 */ + { .mk = { 0 }, .brk = { 0 } }, /* 134 */ + { .mk = { 0x4A, 0 }, .brk = { 0xF0, 0x4A, 0 } }, /* 135 */ + { .mk = { 0 }, .brk = { 0 } }, /* 136 */ + { .mk = { 0x7C, 0 }, .brk = { 0xF0, 0x7C, 0 } }, /* 137 */ + { .mk = { 0x11, 0 }, .brk = { 0xF0, 0x11, 0 } }, /* 138 */ + { .mk = { 0 }, .brk = { 0 } }, /* 139 */ + { .mk = { 0 }, .brk = { 0 } }, /* 13a */ + { .mk = { 0 }, .brk = { 0 } }, /* 13b */ + { .mk = { 0 }, .brk = { 0 } }, /* 13c */ + { .mk = { 0 }, .brk = { 0 } }, /* 13d */ + { .mk = { 0 }, .brk = { 0 } }, /* 13e */ + { .mk = { 0 }, .brk = { 0 } }, /* 13f */ + { .mk = { 0 }, .brk = { 0 } }, /* 140 */ + { .mk = { 0 }, .brk = { 0 } }, /* 141 */ + { .mk = { 0 }, .brk = { 0 } }, /* 142 */ + { .mk = { 0 }, .brk = { 0 } }, /* 143 */ + { .mk = { 0 }, .brk = { 0 } }, /* 144 */ + { .mk = { 0 }, .brk = { 0 } }, /* 145 */ + { .mk = { 0x7E, 0 }, .brk = { 0xF0, 0x7E, 0 } }, /* 146 */ + { .mk = { 0x6C, 0 }, .brk = { 0xF0, 0x6C, 0 } }, /* 147 */ + { .mk = { 0x75, 0 }, .brk = { 0xF0, 0x75, 0 } }, /* 148 */ + { .mk = { 0x7D, 0 }, .brk = { 0xF0, 0x7D, 0 } }, /* 149 */ + { .mk = { 0 }, .brk = { 0 } }, /* 14a */ + { .mk = { 0x6B, 0 }, .brk = { 0xF0, 0x6B, 0 } }, /* 14b */ + { .mk = { 0 }, .brk = { 0 } }, /* 14c */ + { .mk = { 0x74, 0 }, .brk = { 0xF0, 0x74, 0 } }, /* 14d */ + { .mk = { 0 }, .brk = { 0 } }, /* 14e */ + { .mk = { 0x69, 0 }, .brk = { 0xF0, 0x69, 0 } }, /* 14f */ + { .mk = { 0x72, 0 }, .brk = { 0xF0, 0x72, 0 } }, /* 150 */ + { .mk = { 0x7A, 0 }, .brk = { 0xF0, 0x7A, 0 } }, /* 151 */ + { .mk = { 0x70, 0 }, .brk = { 0xF0, 0x70, 0 } }, /* 152 */ + { .mk = { 0x71, 0 }, .brk = { 0xF0, 0x71, 0 } }, /* 153 */ + { .mk = { 0 }, .brk = { 0 } }, /* 154 */ + { .mk = { 0 }, .brk = { 0 } }, /* 155 */ + { .mk = { 0 }, .brk = { 0 } }, /* 156 */ + { .mk = { 0 }, .brk = { 0 } }, /* 157 */ + { .mk = { 0 }, .brk = { 0 } }, /* 158 */ + { .mk = { 0 }, .brk = { 0 } }, /* 159 */ + { .mk = { 0 }, .brk = { 0 } }, /* 15a */ + { .mk = { 0x61, 0 }, .brk = { 0xF0, 0x61, 0 } }, /* 15b */ + { .mk = { 0 }, .brk = { 0 } }, /* 15c */ + { .mk = { 0 }, .brk = { 0 } }, /* 15d */ + { .mk = { 0 }, .brk = { 0 } }, /* 15e */ + { .mk = { 0 }, .brk = { 0 } }, /* 15f */ + { .mk = { 0 }, .brk = { 0 } }, /* 160 */ + { .mk = { 0 }, .brk = { 0 } }, /* 161 */ + { .mk = { 0 }, .brk = { 0 } }, /* 162 */ + { .mk = { 0 }, .brk = { 0 } }, /* 163 */ + { .mk = { 0 }, .brk = { 0 } }, /* 164 */ + { .mk = { 0 }, .brk = { 0 } }, /* 165 */ + { .mk = { 0 }, .brk = { 0 } }, /* 166 */ + { .mk = { 0 }, .brk = { 0 } }, /* 167 */ + { .mk = { 0 }, .brk = { 0 } }, /* 168 */ + { .mk = { 0 }, .brk = { 0 } }, /* 169 */ + { .mk = { 0 }, .brk = { 0 } }, /* 16a */ + { .mk = { 0 }, .brk = { 0 } }, /* 16b */ + { .mk = { 0 }, .brk = { 0 } }, /* 16c */ + { .mk = { 0 }, .brk = { 0 } }, /* 16d */ + { .mk = { 0 }, .brk = { 0 } }, /* 16e */ + { .mk = { 0 }, .brk = { 0 } }, /* 16f */ + { .mk = { 0 }, .brk = { 0 } }, /* 170 */ + { .mk = { 0 }, .brk = { 0 } }, /* 171 */ + { .mk = { 0 }, .brk = { 0 } }, /* 172 */ + { .mk = { 0 }, .brk = { 0 } }, /* 173 */ + { .mk = { 0 }, .brk = { 0 } }, /* 174 */ + { .mk = { 0 }, .brk = { 0 } }, /* 175 */ + { .mk = { 0 }, .brk = { 0 } }, /* 176 */ + { .mk = { 0 }, .brk = { 0 } }, /* 177 */ + { .mk = { 0 }, .brk = { 0 } }, /* 178 */ + { .mk = { 0 }, .brk = { 0 } }, /* 179 */ + { .mk = { 0 }, .brk = { 0 } }, /* 17a */ + { .mk = { 0 }, .brk = { 0 } }, /* 17b */ + { .mk = { 0 }, .brk = { 0 } }, /* 17c */ + { .mk = { 0 }, .brk = { 0 } }, /* 17d */ + { .mk = { 0 }, .brk = { 0 } }, /* 17e */ + { .mk = { 0 }, .brk = { 0 } }, /* 17f */ + { .mk = { 0 }, .brk = { 0 } }, /* 180 */ + { .mk = { 0 }, .brk = { 0 } }, /* 181 */ + { .mk = { 0 }, .brk = { 0 } }, /* 182 */ + { .mk = { 0 }, .brk = { 0 } }, /* 183 */ + { .mk = { 0 }, .brk = { 0 } }, /* 184 */ + { .mk = { 0 }, .brk = { 0 } }, /* 185 */ + { .mk = { 0 }, .brk = { 0 } }, /* 186 */ + { .mk = { 0 }, .brk = { 0 } }, /* 187 */ + { .mk = { 0 }, .brk = { 0 } }, /* 188 */ + { .mk = { 0 }, .brk = { 0 } }, /* 189 */ + { .mk = { 0 }, .brk = { 0 } }, /* 18a */ + { .mk = { 0 }, .brk = { 0 } }, /* 18b */ + { .mk = { 0 }, .brk = { 0 } }, /* 18c */ + { .mk = { 0 }, .brk = { 0 } }, /* 18d */ + { .mk = { 0 }, .brk = { 0 } }, /* 18e */ + { .mk = { 0 }, .brk = { 0 } }, /* 18f */ + { .mk = { 0 }, .brk = { 0 } }, /* 190 */ + { .mk = { 0 }, .brk = { 0 } }, /* 191 */ + { .mk = { 0 }, .brk = { 0 } }, /* 192 */ + { .mk = { 0 }, .brk = { 0 } }, /* 193 */ + { .mk = { 0 }, .brk = { 0 } }, /* 194 */ + { .mk = { 0 }, .brk = { 0 } }, /* 195 */ + { .mk = { 0 }, .brk = { 0 } }, /* 196 */ + { .mk = { 0 }, .brk = { 0 } }, /* 197 */ + { .mk = { 0 }, .brk = { 0 } }, /* 198 */ + { .mk = { 0 }, .brk = { 0 } }, /* 199 */ + { .mk = { 0 }, .brk = { 0 } }, /* 19a */ + { .mk = { 0 }, .brk = { 0 } }, /* 19b */ + { .mk = { 0 }, .brk = { 0 } }, /* 19c */ + { .mk = { 0 }, .brk = { 0 } }, /* 19d */ + { .mk = { 0 }, .brk = { 0 } }, /* 19e */ + { .mk = { 0 }, .brk = { 0 } }, /* 19f */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1aa */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ab */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ac */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ad */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ae */ + { .mk = { 0 }, .brk = { 0 } }, /* 1af */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ba */ + { .mk = { 0 }, .brk = { 0 } }, /* 1bb */ + { .mk = { 0 }, .brk = { 0 } }, /* 1bc */ + { .mk = { 0 }, .brk = { 0 } }, /* 1bd */ + { .mk = { 0 }, .brk = { 0 } }, /* 1be */ + { .mk = { 0 }, .brk = { 0 } }, /* 1bf */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ca */ + { .mk = { 0 }, .brk = { 0 } }, /* 1cb */ + { .mk = { 0 }, .brk = { 0 } }, /* 1cc */ + { .mk = { 0 }, .brk = { 0 } }, /* 1cd */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ce */ + { .mk = { 0 }, .brk = { 0 } }, /* 1cf */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1da */ + { .mk = { 0 }, .brk = { 0 } }, /* 1db */ + { .mk = { 0 }, .brk = { 0 } }, /* 1dc */ + { .mk = { 0 }, .brk = { 0 } }, /* 1dd */ + { .mk = { 0 }, .brk = { 0 } }, /* 1de */ + { .mk = { 0 }, .brk = { 0 } }, /* 1df */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ea */ + { .mk = { 0 }, .brk = { 0 } }, /* 1eb */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ec */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ed */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ee */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ef */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1fa */ + { .mk = { 0 }, .brk = { 0 } }, /* 1fb */ + { .mk = { 0 }, .brk = { 0 } }, /* 1fc */ + { .mk = { 0 }, .brk = { 0 } }, /* 1fd */ + { .mk = { 0 }, .brk = { 0 } }, /* 1fe */ + { .mk = { 0 }, .brk = { 0 } } /* 1ff */ + // clang-format on +}; + +const scancode scancode_set1_ax[512] = { + // clang-format off + { .mk = { 0 }, .brk = { 0 } }, /* 000 */ + { .mk = { 0x01, 0 }, .brk = { 0x81, 0 } }, /* 001 */ + { .mk = { 0x02, 0 }, .brk = { 0x82, 0 } }, /* 002 */ + { .mk = { 0x03, 0 }, .brk = { 0x83, 0 } }, /* 003 */ + { .mk = { 0x04, 0 }, .brk = { 0x84, 0 } }, /* 004 */ + { .mk = { 0x05, 0 }, .brk = { 0x85, 0 } }, /* 005 */ + { .mk = { 0x06, 0 }, .brk = { 0x86, 0 } }, /* 006 */ + { .mk = { 0x07, 0 }, .brk = { 0x87, 0 } }, /* 007 */ + { .mk = { 0x08, 0 }, .brk = { 0x88, 0 } }, /* 008 */ + { .mk = { 0x09, 0 }, .brk = { 0x89, 0 } }, /* 009 */ + { .mk = { 0x0a, 0 }, .brk = { 0x8a, 0 } }, /* 00a */ + { .mk = { 0x0b, 0 }, .brk = { 0x8b, 0 } }, /* 00b */ + { .mk = { 0x0c, 0 }, .brk = { 0x8c, 0 } }, /* 00c */ + { .mk = { 0x0d, 0 }, .brk = { 0x8d, 0 } }, /* 00d */ + { .mk = { 0x0e, 0 }, .brk = { 0x8e, 0 } }, /* 00e */ + { .mk = { 0x0f, 0 }, .brk = { 0x8f, 0 } }, /* 00f */ + { .mk = { 0x10, 0 }, .brk = { 0x90, 0 } }, /* 010 */ + { .mk = { 0x11, 0 }, .brk = { 0x91, 0 } }, /* 011 */ + { .mk = { 0x12, 0 }, .brk = { 0x92, 0 } }, /* 012 */ + { .mk = { 0x13, 0 }, .brk = { 0x93, 0 } }, /* 013 */ + { .mk = { 0x14, 0 }, .brk = { 0x94, 0 } }, /* 014 */ + { .mk = { 0x15, 0 }, .brk = { 0x95, 0 } }, /* 015 */ + { .mk = { 0x16, 0 }, .brk = { 0x96, 0 } }, /* 016 */ + { .mk = { 0x17, 0 }, .brk = { 0x97, 0 } }, /* 017 */ + { .mk = { 0x18, 0 }, .brk = { 0x98, 0 } }, /* 018 */ + { .mk = { 0x19, 0 }, .brk = { 0x99, 0 } }, /* 019 */ + { .mk = { 0x1a, 0 }, .brk = { 0x9a, 0 } }, /* 01a */ + { .mk = { 0x1b, 0 }, .brk = { 0x9b, 0 } }, /* 01b */ + { .mk = { 0x1c, 0 }, .brk = { 0x9c, 0 } }, /* 01c */ + { .mk = { 0x1d, 0 }, .brk = { 0x9d, 0 } }, /* 01d */ + { .mk = { 0x1e, 0 }, .brk = { 0x9e, 0 } }, /* 01e */ + { .mk = { 0x1f, 0 }, .brk = { 0x9f, 0 } }, /* 01f */ + { .mk = { 0x20, 0 }, .brk = { 0xa0, 0 } }, /* 020 */ + { .mk = { 0x21, 0 }, .brk = { 0xa1, 0 } }, /* 021 */ + { .mk = { 0x22, 0 }, .brk = { 0xa2, 0 } }, /* 022 */ + { .mk = { 0x23, 0 }, .brk = { 0xa3, 0 } }, /* 023 */ + { .mk = { 0x24, 0 }, .brk = { 0xa4, 0 } }, /* 024 */ + { .mk = { 0x25, 0 }, .brk = { 0xa5, 0 } }, /* 025 */ + { .mk = { 0x26, 0 }, .brk = { 0xa6, 0 } }, /* 026 */ + { .mk = { 0x27, 0 }, .brk = { 0xa7, 0 } }, /* 027 */ + { .mk = { 0x28, 0 }, .brk = { 0xa8, 0 } }, /* 028 */ + { .mk = { 0x2b, 0 }, .brk = { 0xab, 0 } }, /* 029 */ + { .mk = { 0x2a, 0 }, .brk = { 0xaa, 0 } }, /* 02a */ + { .mk = { 0x29, 0 }, .brk = { 0xa9, 0 } }, /* 02b */ + { .mk = { 0x2c, 0 }, .brk = { 0xac, 0 } }, /* 02c */ + { .mk = { 0x2d, 0 }, .brk = { 0xad, 0 } }, /* 02d */ + { .mk = { 0x2e, 0 }, .brk = { 0xae, 0 } }, /* 02e */ + { .mk = { 0x2f, 0 }, .brk = { 0xaf, 0 } }, /* 02f */ + { .mk = { 0x30, 0 }, .brk = { 0xb0, 0 } }, /* 030 */ + { .mk = { 0x31, 0 }, .brk = { 0xb1, 0 } }, /* 031 */ + { .mk = { 0x32, 0 }, .brk = { 0xb2, 0 } }, /* 032 */ + { .mk = { 0x33, 0 }, .brk = { 0xb3, 0 } }, /* 033 */ + { .mk = { 0x34, 0 }, .brk = { 0xb4, 0 } }, /* 034 */ + { .mk = { 0x35, 0 }, .brk = { 0xb5, 0 } }, /* 035 */ + { .mk = { 0x36, 0 }, .brk = { 0xb6, 0 } }, /* 036 */ + { .mk = { 0x37, 0 }, .brk = { 0xb7, 0 } }, /* 037 */ + { .mk = { 0x38, 0 }, .brk = { 0xb8, 0 } }, /* 038 */ + { .mk = { 0x39, 0 }, .brk = { 0xb9, 0 } }, /* 039 */ + { .mk = { 0x3a, 0 }, .brk = { 0xba, 0 } }, /* 03a */ + { .mk = { 0x3b, 0 }, .brk = { 0xbb, 0 } }, /* 03b */ + { .mk = { 0x3c, 0 }, .brk = { 0xbc, 0 } }, /* 03c */ + { .mk = { 0x3d, 0 }, .brk = { 0xbd, 0 } }, /* 03d */ + { .mk = { 0x3e, 0 }, .brk = { 0xbe, 0 } }, /* 03e */ + { .mk = { 0x3f, 0 }, .brk = { 0xbf, 0 } }, /* 03f */ + { .mk = { 0x40, 0 }, .brk = { 0xc0, 0 } }, /* 040 */ + { .mk = { 0x41, 0 }, .brk = { 0xc1, 0 } }, /* 041 */ + { .mk = { 0x42, 0 }, .brk = { 0xc2, 0 } }, /* 042 */ + { .mk = { 0x43, 0 }, .brk = { 0xc3, 0 } }, /* 043 */ + { .mk = { 0x44, 0 }, .brk = { 0xc4, 0 } }, /* 044 */ + { .mk = { 0x45, 0 }, .brk = { 0xc5, 0 } }, /* 045 */ + { .mk = { 0x46, 0 }, .brk = { 0xc6, 0 } }, /* 046 */ + { .mk = { 0x47, 0 }, .brk = { 0xc7, 0 } }, /* 047 */ + { .mk = { 0x48, 0 }, .brk = { 0xc8, 0 } }, /* 048 */ + { .mk = { 0x49, 0 }, .brk = { 0xc9, 0 } }, /* 049 */ + { .mk = { 0x4a, 0 }, .brk = { 0xca, 0 } }, /* 04a */ + { .mk = { 0x4b, 0 }, .brk = { 0xcb, 0 } }, /* 04b */ + { .mk = { 0x4c, 0 }, .brk = { 0xcc, 0 } }, /* 04c */ + { .mk = { 0x4d, 0 }, .brk = { 0xcd, 0 } }, /* 04d */ + { .mk = { 0x4e, 0 }, .brk = { 0xce, 0 } }, /* 04e */ + { .mk = { 0x4f, 0 }, .brk = { 0xcf, 0 } }, /* 04f */ + { .mk = { 0x50, 0 }, .brk = { 0xd0, 0 } }, /* 050 */ + { .mk = { 0x51, 0 }, .brk = { 0xd1, 0 } }, /* 051 */ + { .mk = { 0x52, 0 }, .brk = { 0xd2, 0 } }, /* 052 */ + { .mk = { 0x53, 0 }, .brk = { 0xd3, 0 } }, /* 053 */ + { .mk = { 0x54, 0 }, .brk = { 0xd4, 0 } }, /* 054 */ + { .mk = { 0 }, .brk = { 0 } }, /* 055 */ + { .mk = { 0x56, 0 }, .brk = { 0xd6, 0 } }, /* 054 */ + { .mk = { 0 }, .brk = { 0 } }, /* 057 */ + { .mk = { 0 }, .brk = { 0 } }, /* 058 */ + { .mk = { 0 }, .brk = { 0 } }, /* 059 */ + { .mk = { 0 }, .brk = { 0 } }, /* 05a */ + { .mk = { 0 }, .brk = { 0 } }, /* 05b */ + { .mk = { 0x5c, 0 }, .brk = { 0xdc, 0 } }, /* 05c */ + { .mk = { 0 }, .brk = { 0 } }, /* 05d */ + { .mk = { 0 }, .brk = { 0 } }, /* 05e */ + { .mk = { 0 }, .brk = { 0 } }, /* 05f */ + { .mk = { 0x60, 0 }, .brk = { 0xe0, 0 } }, /* 060 */ + { .mk = { 0x61, 0 }, .brk = { 0xe1, 0 } }, /* 061 */ + { .mk = { 0x62, 0 }, .brk = { 0xe2, 0 } }, /* 062 */ + { .mk = { 0x63, 0 }, .brk = { 0xe3, 0 } }, /* 063 */ + { .mk = { 0x64, 0 }, .brk = { 0xe4, 0 } }, /* 064 */ + { .mk = { 0x65, 0 }, .brk = { 0xe5, 0 } }, /* 065 */ + { .mk = { 0x66, 0 }, .brk = { 0xe6, 0 } }, /* 066 */ + { .mk = { 0x67, 0 }, .brk = { 0xe7, 0 } }, /* 067 */ + { .mk = { 0x68, 0 }, .brk = { 0xe8, 0 } }, /* 068 */ + { .mk = { 0x69, 0 }, .brk = { 0xe9, 0 } }, /* 069 */ + { .mk = { 0x6a, 0 }, .brk = { 0xea, 0 } }, /* 06a */ + { .mk = { 0x6b, 0 }, .brk = { 0xeb, 0 } }, /* 06b */ + { .mk = { 0x6c, 0 }, .brk = { 0xec, 0 } }, /* 06c */ + { .mk = { 0x6d, 0 }, .brk = { 0xed, 0 } }, /* 06d */ + { .mk = { 0x6e, 0 }, .brk = { 0xee, 0 } }, /* 06e */ + { .mk = { 0x6f, 0 }, .brk = { 0xef, 0 } }, /* 06f */ + { .mk = { 0x70, 0 }, .brk = { 0xf0, 0 } }, /* 070 */ + { .mk = { 0x71, 0 }, .brk = { 0xf1, 0 } }, /* 071 */ + { .mk = { 0x72, 0 }, .brk = { 0xf2, 0 } }, /* 072 */ + { .mk = { 0x56, 0 }, .brk = { 0xd6, 0 } }, /* 054 */ + { .mk = { 0x74, 0 }, .brk = { 0xf4, 0 } }, /* 074 */ + { .mk = { 0x75, 0 }, .brk = { 0xf5, 0 } }, /* 075 */ + { .mk = { 0x76, 0 }, .brk = { 0xf6, 0 } }, /* 076 */ + { .mk = { 0x77, 0 }, .brk = { 0xf7, 0 } }, /* 077 */ + { .mk = { 0x78, 0 }, .brk = { 0xf8, 0 } }, /* 078 */ + { .mk = { 0x79, 0 }, .brk = { 0xf9, 0 } }, /* 079 */ + { .mk = { 0x7a, 0 }, .brk = { 0xfa, 0 } }, /* 07a */ + { .mk = { 0x7b, 0 }, .brk = { 0xfb, 0 } }, /* 07b */ + { .mk = { 0x7c, 0 }, .brk = { 0xfc, 0 } }, /* 07c */ + { .mk = { 0x2b, 0 }, .brk = { 0xab, 0 } }, /* 07d */ + { .mk = { 0x7e, 0 }, .brk = { 0xfe, 0 } }, /* 07e */ + { .mk = { 0x7f, 0 }, .brk = { 0xff, 0 } }, /* 07f */ + { .mk = { 0 }, .brk = { 0 } }, /* 080 */ + { .mk = { 0 }, .brk = { 0 } }, /* 081 */ + { .mk = { 0 }, .brk = { 0 } }, /* 082 */ + { .mk = { 0 }, .brk = { 0 } }, /* 083 */ + { .mk = { 0 }, .brk = { 0 } }, /* 084 */ + { .mk = { 0 }, .brk = { 0 } }, /* 085 */ + { .mk = { 0 }, .brk = { 0 } }, /* 086 */ + { .mk = { 0 }, .brk = { 0 } }, /* 087 */ + { .mk = { 0 }, .brk = { 0 } }, /* 088 */ + { .mk = { 0 }, .brk = { 0 } }, /* 089 */ + { .mk = { 0 }, .brk = { 0 } }, /* 08a */ + { .mk = { 0 }, .brk = { 0 } }, /* 08b */ + { .mk = { 0 }, .brk = { 0 } }, /* 08c */ + { .mk = { 0 }, .brk = { 0 } }, /* 08d */ + { .mk = { 0 }, .brk = { 0 } }, /* 08e */ + { .mk = { 0 }, .brk = { 0 } }, /* 08f */ + { .mk = { 0 }, .brk = { 0 } }, /* 090 */ + { .mk = { 0 }, .brk = { 0 } }, /* 091 */ + { .mk = { 0 }, .brk = { 0 } }, /* 092 */ + { .mk = { 0 }, .brk = { 0 } }, /* 093 */ + { .mk = { 0 }, .brk = { 0 } }, /* 094 */ + { .mk = { 0 }, .brk = { 0 } }, /* 095 */ + { .mk = { 0 }, .brk = { 0 } }, /* 096 */ + { .mk = { 0 }, .brk = { 0 } }, /* 097 */ + { .mk = { 0 }, .brk = { 0 } }, /* 098 */ + { .mk = { 0 }, .brk = { 0 } }, /* 099 */ + { .mk = { 0 }, .brk = { 0 } }, /* 09a */ + { .mk = { 0 }, .brk = { 0 } }, /* 09b */ + { .mk = { 0 }, .brk = { 0 } }, /* 09c */ + { .mk = { 0 }, .brk = { 0 } }, /* 09d */ + { .mk = { 0 }, .brk = { 0 } }, /* 09e */ + { .mk = { 0 }, .brk = { 0 } }, /* 09f */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0aa */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ab */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ac */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ad */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ae */ + { .mk = { 0 }, .brk = { 0 } }, /* 0af */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ba */ + { .mk = { 0 }, .brk = { 0 } }, /* 0bb */ + { .mk = { 0 }, .brk = { 0 } }, /* 0bc */ + { .mk = { 0 }, .brk = { 0 } }, /* 0bd */ + { .mk = { 0 }, .brk = { 0 } }, /* 0be */ + { .mk = { 0 }, .brk = { 0 } }, /* 0bf */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ca */ + { .mk = { 0 }, .brk = { 0 } }, /* 0cb */ + { .mk = { 0 }, .brk = { 0 } }, /* 0cc */ + { .mk = { 0 }, .brk = { 0 } }, /* 0cd */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ce */ + { .mk = { 0 }, .brk = { 0 } }, /* 0cf */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0da */ + { .mk = { 0 }, .brk = { 0 } }, /* 0db */ + { .mk = { 0 }, .brk = { 0 } }, /* 0dc */ + { .mk = { 0 }, .brk = { 0 } }, /* 0dd */ + { .mk = { 0 }, .brk = { 0 } }, /* 0de */ + { .mk = { 0 }, .brk = { 0 } }, /* 0df */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ea */ + { .mk = { 0 }, .brk = { 0 } }, /* 0eb */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ec */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ed */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ee */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ef */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f0 */ + { .mk = { 0xf1, 0 }, .brk = { 0 } }, /* 0f1 */ + { .mk = { 0xf2, 0 }, .brk = { 0 } }, /* 0f2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0fa */ + { .mk = { 0 }, .brk = { 0 } }, /* 0fb */ + { .mk = { 0 }, .brk = { 0 } }, /* 0fc */ + { .mk = { 0 }, .brk = { 0 } }, /* 0fd */ + { .mk = { 0 }, .brk = { 0 } }, /* 0fe */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ff */ + { .mk = { 0 }, .brk = { 0 } }, /* 100 */ + { .mk = { 0 }, .brk = { 0 } }, /* 101 */ + { .mk = { 0 }, .brk = { 0 } }, /* 102 */ + { .mk = { 0 }, .brk = { 0 } }, /* 103 */ + { .mk = { 0 }, .brk = { 0 } }, /* 104 */ + { .mk = { 0 }, .brk = { 0 } }, /* 105 */ + { .mk = { 0 }, .brk = { 0 } }, /* 106 */ + { .mk = { 0 }, .brk = { 0 } }, /* 107 */ + { .mk = { 0 }, .brk = { 0 } }, /* 108 */ + { .mk = { 0 }, .brk = { 0 } }, /* 109 */ + { .mk = { 0 }, .brk = { 0 } }, /* 10a */ + { .mk = { 0 }, .brk = { 0 } }, /* 10b */ + { .mk = { 0 }, .brk = { 0 } }, /* 10c */ + { .mk = { 0 }, .brk = { 0 } }, /* 10d */ + { .mk = { 0 }, .brk = { 0 } }, /* 10e */ + { .mk = { 0 }, .brk = { 0 } }, /* 10f */ + { .mk = { 0 }, .brk = { 0 } }, /* 110 */ + { .mk = { 0 }, .brk = { 0 } }, /* 111 */ + { .mk = { 0 }, .brk = { 0 } }, /* 112 */ + { .mk = { 0 }, .brk = { 0 } }, /* 113 */ + { .mk = { 0 }, .brk = { 0 } }, /* 114 */ + { .mk = { 0 }, .brk = { 0 } }, /* 115 */ + { .mk = { 0 }, .brk = { 0 } }, /* 116 */ + { .mk = { 0 }, .brk = { 0 } }, /* 117 */ + { .mk = { 0 }, .brk = { 0 } }, /* 118 */ + { .mk = { 0 }, .brk = { 0 } }, /* 119 */ + { .mk = { 0 }, .brk = { 0 } }, /* 11a */ + { .mk = { 0 }, .brk = { 0 } }, /* 11b */ + { .mk = { 0x1c, 0 }, .brk = { 0x9c, 0 } }, /* 11c */ + { .mk = { 0x1d, 0 }, .brk = { 0x9d, 0 } }, /* 11d */ + { .mk = { 0 }, .brk = { 0 } }, /* 11e */ + { .mk = { 0 }, .brk = { 0 } }, /* 11f */ + { .mk = { 0 }, .brk = { 0 } }, /* 120 */ + { .mk = { 0 }, .brk = { 0 } }, /* 121 */ + { .mk = { 0 }, .brk = { 0 } }, /* 122 */ + { .mk = { 0 }, .brk = { 0 } }, /* 123 */ + { .mk = { 0 }, .brk = { 0 } }, /* 124 */ + { .mk = { 0 }, .brk = { 0 } }, /* 125 */ + { .mk = { 0 }, .brk = { 0 } }, /* 126 */ + { .mk = { 0 }, .brk = { 0 } }, /* 127 */ + { .mk = { 0 }, .brk = { 0 } }, /* 128 */ + { .mk = { 0 }, .brk = { 0 } }, /* 129 */ + { .mk = { 0 }, .brk = { 0 } }, /* 12a */ + { .mk = { 0 }, .brk = { 0 } }, /* 12b */ + { .mk = { 0 }, .brk = { 0 } }, /* 12c */ + { .mk = { 0 }, .brk = { 0 } }, /* 12d */ + { .mk = { 0 }, .brk = { 0 } }, /* 12e */ + { .mk = { 0 }, .brk = { 0 } }, /* 12f */ + { .mk = { 0 }, .brk = { 0 } }, /* 130 */ + { .mk = { 0 }, .brk = { 0 } }, /* 131 */ + { .mk = { 0 }, .brk = { 0 } }, /* 132 */ + { .mk = { 0 }, .brk = { 0 } }, /* 133 */ + { .mk = { 0 }, .brk = { 0 } }, /* 134 */ + { .mk = { 0x35, 0 }, .brk = { 0xb5, 0 } }, /* 135 */ + { .mk = { 0 }, .brk = { 0 } }, /* 136 */ + { .mk = { 0x37, 0 }, .brk = { 0xb7, 0 } }, /* 137 */ + { .mk = { 0x38, 0 }, .brk = { 0xb8, 0 } }, /* 138 */ + { .mk = { 0 }, .brk = { 0 } }, /* 139 */ + { .mk = { 0 }, .brk = { 0 } }, /* 13a */ + { .mk = { 0 }, .brk = { 0 } }, /* 13b */ + { .mk = { 0 }, .brk = { 0 } }, /* 13c */ + { .mk = { 0 }, .brk = { 0 } }, /* 13d */ + { .mk = { 0 }, .brk = { 0 } }, /* 13e */ + { .mk = { 0 }, .brk = { 0 } }, /* 13f */ + { .mk = { 0 }, .brk = { 0 } }, /* 140 */ + { .mk = { 0 }, .brk = { 0 } }, /* 141 */ + { .mk = { 0 }, .brk = { 0 } }, /* 142 */ + { .mk = { 0 }, .brk = { 0 } }, /* 143 */ + { .mk = { 0 }, .brk = { 0 } }, /* 144 */ + { .mk = { 0 }, .brk = { 0 } }, /* 145 */ + { .mk = { 0x46, 0 }, .brk = { 0xc6, 0 } }, /* 146 */ + { .mk = { 0x47, 0 }, .brk = { 0xc7, 0 } }, /* 147 */ + { .mk = { 0x48, 0 }, .brk = { 0xc8, 0 } }, /* 148 */ + { .mk = { 0x49, 0 }, .brk = { 0xc9, 0 } }, /* 149 */ + { .mk = { 0 }, .brk = { 0 } }, /* 14a */ + { .mk = { 0x4b, 0 }, .brk = { 0xcb, 0 } }, /* 14b */ + { .mk = { 0 }, .brk = { 0 } }, /* 14c */ + { .mk = { 0x4d, 0 }, .brk = { 0xcd, 0 } }, /* 14d */ + { .mk = { 0 }, .brk = { 0 } }, /* 14e */ + { .mk = { 0x4f, 0 }, .brk = { 0xcf, 0 } }, /* 14f */ + { .mk = { 0x50, 0 }, .brk = { 0xd0, 0 } }, /* 150 */ + { .mk = { 0x51, 0 }, .brk = { 0xd1, 0 } }, /* 151 */ + { .mk = { 0x52, 0 }, .brk = { 0xd2, 0 } }, /* 152 */ + { .mk = { 0x53, 0 }, .brk = { 0xd3, 0 } }, /* 153 */ + { .mk = { 0 }, .brk = { 0 } }, /* 154 */ + { .mk = { 0 }, .brk = { 0 } }, /* 155 */ + { .mk = { 0 }, .brk = { 0 } }, /* 156 */ + { .mk = { 0 }, .brk = { 0 } }, /* 157 */ + { .mk = { 0 }, .brk = { 0 } }, /* 158 */ + { .mk = { 0 }, .brk = { 0 } }, /* 159 */ + { .mk = { 0 }, .brk = { 0 } }, /* 15a */ + { .mk = { 0x5c, 0 }, .brk = { 0xdc, 0 } }, /* 15b */ + { .mk = { 0 }, .brk = { 0 } }, /* 15c */ + { .mk = { 0 }, .brk = { 0 } }, /* 15d */ + { .mk = { 0 }, .brk = { 0 } }, /* 15e */ + { .mk = { 0 }, .brk = { 0 } }, /* 15f */ + { .mk = { 0 }, .brk = { 0 } }, /* 160 */ + { .mk = { 0 }, .brk = { 0 } }, /* 161 */ + { .mk = { 0 }, .brk = { 0 } }, /* 162 */ + { .mk = { 0 }, .brk = { 0 } }, /* 163 */ + { .mk = { 0 }, .brk = { 0 } }, /* 164 */ + { .mk = { 0 }, .brk = { 0 } }, /* 165 */ + { .mk = { 0 }, .brk = { 0 } }, /* 166 */ + { .mk = { 0 }, .brk = { 0 } }, /* 167 */ + { .mk = { 0 }, .brk = { 0 } }, /* 168 */ + { .mk = { 0 }, .brk = { 0 } }, /* 169 */ + { .mk = { 0 }, .brk = { 0 } }, /* 16a */ + { .mk = { 0 }, .brk = { 0 } }, /* 16b */ + { .mk = { 0 }, .brk = { 0 } }, /* 16c */ + { .mk = { 0 }, .brk = { 0 } }, /* 16d */ + { .mk = { 0 }, .brk = { 0 } }, /* 16e */ + { .mk = { 0 }, .brk = { 0 } }, /* 16f */ + { .mk = { 0 }, .brk = { 0 } }, /* 170 */ + { .mk = { 0 }, .brk = { 0 } }, /* 171 */ + { .mk = { 0 }, .brk = { 0 } }, /* 172 */ + { .mk = { 0 }, .brk = { 0 } }, /* 173 */ + { .mk = { 0 }, .brk = { 0 } }, /* 174 */ + { .mk = { 0 }, .brk = { 0 } }, /* 175 */ + { .mk = { 0 }, .brk = { 0 } }, /* 176 */ + { .mk = { 0 }, .brk = { 0 } }, /* 177 */ + { .mk = { 0 }, .brk = { 0 } }, /* 178 */ + { .mk = { 0 }, .brk = { 0 } }, /* 179 */ + { .mk = { 0 }, .brk = { 0 } }, /* 17a */ + { .mk = { 0 }, .brk = { 0 } }, /* 17b */ + { .mk = { 0 }, .brk = { 0 } }, /* 17c */ + { .mk = { 0 }, .brk = { 0 } }, /* 17d */ + { .mk = { 0 }, .brk = { 0 } }, /* 17e */ + { .mk = { 0 }, .brk = { 0 } }, /* 17f */ + { .mk = { 0 }, .brk = { 0 } }, /* 180 */ + { .mk = { 0 }, .brk = { 0 } }, /* 181 */ + { .mk = { 0 }, .brk = { 0 } }, /* 182 */ + { .mk = { 0 }, .brk = { 0 } }, /* 183 */ + { .mk = { 0 }, .brk = { 0 } }, /* 184 */ + { .mk = { 0 }, .brk = { 0 } }, /* 185 */ + { .mk = { 0 }, .brk = { 0 } }, /* 186 */ + { .mk = { 0 }, .brk = { 0 } }, /* 187 */ + { .mk = { 0 }, .brk = { 0 } }, /* 188 */ + { .mk = { 0 }, .brk = { 0 } }, /* 189 */ + { .mk = { 0 }, .brk = { 0 } }, /* 18a */ + { .mk = { 0 }, .brk = { 0 } }, /* 18b */ + { .mk = { 0 }, .brk = { 0 } }, /* 18c */ + { .mk = { 0 }, .brk = { 0 } }, /* 18d */ + { .mk = { 0 }, .brk = { 0 } }, /* 18e */ + { .mk = { 0 }, .brk = { 0 } }, /* 18f */ + { .mk = { 0 }, .brk = { 0 } }, /* 190 */ + { .mk = { 0 }, .brk = { 0 } }, /* 191 */ + { .mk = { 0 }, .brk = { 0 } }, /* 192 */ + { .mk = { 0 }, .brk = { 0 } }, /* 193 */ + { .mk = { 0 }, .brk = { 0 } }, /* 194 */ + { .mk = { 0 }, .brk = { 0 } }, /* 195 */ + { .mk = { 0 }, .brk = { 0 } }, /* 196 */ + { .mk = { 0 }, .brk = { 0 } }, /* 197 */ + { .mk = { 0 }, .brk = { 0 } }, /* 198 */ + { .mk = { 0 }, .brk = { 0 } }, /* 199 */ + { .mk = { 0 }, .brk = { 0 } }, /* 19a */ + { .mk = { 0 }, .brk = { 0 } }, /* 19b */ + { .mk = { 0 }, .brk = { 0 } }, /* 19c */ + { .mk = { 0 }, .brk = { 0 } }, /* 19d */ + { .mk = { 0 }, .brk = { 0 } }, /* 19e */ + { .mk = { 0 }, .brk = { 0 } }, /* 19f */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1aa */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ab */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ac */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ad */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ae */ + { .mk = { 0 }, .brk = { 0 } }, /* 1af */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ba */ + { .mk = { 0 }, .brk = { 0 } }, /* 1bb */ + { .mk = { 0 }, .brk = { 0 } }, /* 1bc */ + { .mk = { 0 }, .brk = { 0 } }, /* 1bd */ + { .mk = { 0 }, .brk = { 0 } }, /* 1be */ + { .mk = { 0 }, .brk = { 0 } }, /* 1bf */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ca */ + { .mk = { 0 }, .brk = { 0 } }, /* 1cb */ + { .mk = { 0 }, .brk = { 0 } }, /* 1cc */ + { .mk = { 0 }, .brk = { 0 } }, /* 1cd */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ce */ + { .mk = { 0 }, .brk = { 0 } }, /* 1cf */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1da */ + { .mk = { 0 }, .brk = { 0 } }, /* 1db */ + { .mk = { 0 }, .brk = { 0 } }, /* 1dc */ + { .mk = { 0 }, .brk = { 0 } }, /* 1dd */ + { .mk = { 0 }, .brk = { 0 } }, /* 1de */ + { .mk = { 0 }, .brk = { 0 } }, /* 1df */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ea */ + { .mk = { 0 }, .brk = { 0 } }, /* 1eb */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ec */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ed */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ee */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ef */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1fa */ + { .mk = { 0 }, .brk = { 0 } }, /* 1fb */ + { .mk = { 0 }, .brk = { 0 } }, /* 1fc */ + { .mk = { 0 }, .brk = { 0 } }, /* 1fd */ + { .mk = { 0 }, .brk = { 0 } }, /* 1fe */ + { .mk = { 0 }, .brk = { 0 } } /* 1ff */ + // clang-format on +}; + +const scancode scancode_set2_ax[512] = { + // clang-format off + { .mk = { 0 }, .brk = { 0 } }, /* 000 */ + { .mk = { 0x76, 0 }, .brk = { 0xF0, 0x76, 0 } }, /* 001 */ + { .mk = { 0x16, 0 }, .brk = { 0xF0, 0x16, 0 } }, /* 002 */ + { .mk = { 0x1E, 0 }, .brk = { 0xF0, 0x1E, 0 } }, /* 003 */ + { .mk = { 0x26, 0 }, .brk = { 0xF0, 0x26, 0 } }, /* 004 */ + { .mk = { 0x25, 0 }, .brk = { 0xF0, 0x25, 0 } }, /* 005 */ + { .mk = { 0x2E, 0 }, .brk = { 0xF0, 0x2E, 0 } }, /* 006 */ + { .mk = { 0x36, 0 }, .brk = { 0xF0, 0x36, 0 } }, /* 007 */ + { .mk = { 0x3D, 0 }, .brk = { 0xF0, 0x3D, 0 } }, /* 008 */ + { .mk = { 0x3E, 0 }, .brk = { 0xF0, 0x3E, 0 } }, /* 009 */ + { .mk = { 0x46, 0 }, .brk = { 0xF0, 0x46, 0 } }, /* 00a */ + { .mk = { 0x45, 0 }, .brk = { 0xF0, 0x45, 0 } }, /* 00b */ + { .mk = { 0x4E, 0 }, .brk = { 0xF0, 0x4E, 0 } }, /* 00c */ + { .mk = { 0x55, 0 }, .brk = { 0xF0, 0x55, 0 } }, /* 00d */ + { .mk = { 0x66, 0 }, .brk = { 0xF0, 0x66, 0 } }, /* 00e */ + { .mk = { 0x0D, 0 }, .brk = { 0xF0, 0x0D, 0 } }, /* 00f */ + { .mk = { 0x15, 0 }, .brk = { 0xF0, 0x15, 0 } }, /* 010 */ + { .mk = { 0x1D, 0 }, .brk = { 0xF0, 0x1D, 0 } }, /* 011 */ + { .mk = { 0x24, 0 }, .brk = { 0xF0, 0x24, 0 } }, /* 012 */ + { .mk = { 0x2D, 0 }, .brk = { 0xF0, 0x2D, 0 } }, /* 013 */ + { .mk = { 0x2C, 0 }, .brk = { 0xF0, 0x2C, 0 } }, /* 014 */ + { .mk = { 0x35, 0 }, .brk = { 0xF0, 0x35, 0 } }, /* 015 */ + { .mk = { 0x3C, 0 }, .brk = { 0xF0, 0x3C, 0 } }, /* 016 */ + { .mk = { 0x43, 0 }, .brk = { 0xF0, 0x43, 0 } }, /* 017 */ + { .mk = { 0x44, 0 }, .brk = { 0xF0, 0x44, 0 } }, /* 018 */ + { .mk = { 0x4D, 0 }, .brk = { 0xF0, 0x4D, 0 } }, /* 019 */ + { .mk = { 0x54, 0 }, .brk = { 0xF0, 0x54, 0 } }, /* 01a */ + { .mk = { 0x5B, 0 }, .brk = { 0xF0, 0x5B, 0 } }, /* 01b */ + { .mk = { 0x5A, 0 }, .brk = { 0xF0, 0x5A, 0 } }, /* 01c */ + { .mk = { 0x14, 0 }, .brk = { 0xF0, 0x14, 0 } }, /* 01d */ + { .mk = { 0x1C, 0 }, .brk = { 0xF0, 0x1C, 0 } }, /* 01e */ + { .mk = { 0x1B, 0 }, .brk = { 0xF0, 0x1B, 0 } }, /* 01f */ + { .mk = { 0x23, 0 }, .brk = { 0xF0, 0x23, 0 } }, /* 020 */ + { .mk = { 0x2B, 0 }, .brk = { 0xF0, 0x2B, 0 } }, /* 021 */ + { .mk = { 0x34, 0 }, .brk = { 0xF0, 0x34, 0 } }, /* 022 */ + { .mk = { 0x33, 0 }, .brk = { 0xF0, 0x33, 0 } }, /* 023 */ + { .mk = { 0x3B, 0 }, .brk = { 0xF0, 0x3B, 0 } }, /* 024 */ + { .mk = { 0x42, 0 }, .brk = { 0xF0, 0x42, 0 } }, /* 025 */ + { .mk = { 0x4B, 0 }, .brk = { 0xF0, 0x4B, 0 } }, /* 026 */ + { .mk = { 0x4C, 0 }, .brk = { 0xF0, 0x4C, 0 } }, /* 027 */ + { .mk = { 0x52, 0 }, .brk = { 0xF0, 0x52, 0 } }, /* 028 */ + { .mk = { 0x5D, 0 }, .brk = { 0xF0, 0x5D, 0 } }, /* 029 */ + { .mk = { 0x12, 0 }, .brk = { 0xF0, 0x12, 0 } }, /* 02a */ + { .mk = { 0x0E, 0 }, .brk = { 0xF0, 0x0E, 0 } }, /* 02b */ + { .mk = { 0x1A, 0 }, .brk = { 0xF0, 0x1A, 0 } }, /* 02c */ + { .mk = { 0x22, 0 }, .brk = { 0xF0, 0x22, 0 } }, /* 02d */ + { .mk = { 0x21, 0 }, .brk = { 0xF0, 0x21, 0 } }, /* 02e */ + { .mk = { 0x2A, 0 }, .brk = { 0xF0, 0x2A, 0 } }, /* 02f */ + { .mk = { 0x32, 0 }, .brk = { 0xF0, 0x32, 0 } }, /* 030 */ + { .mk = { 0x31, 0 }, .brk = { 0xF0, 0x31, 0 } }, /* 031 */ + { .mk = { 0x3A, 0 }, .brk = { 0xF0, 0x3A, 0 } }, /* 032 */ + { .mk = { 0x41, 0 }, .brk = { 0xF0, 0x41, 0 } }, /* 033 */ + { .mk = { 0x49, 0 }, .brk = { 0xF0, 0x49, 0 } }, /* 034 */ + { .mk = { 0x4A, 0 }, .brk = { 0xF0, 0x4A, 0 } }, /* 035 */ + { .mk = { 0x59, 0 }, .brk = { 0xF0, 0x59, 0 } }, /* 036 */ + { .mk = { 0x7C, 0 }, .brk = { 0xF0, 0x7C, 0 } }, /* 037 */ + { .mk = { 0x11, 0 }, .brk = { 0xF0, 0x11, 0 } }, /* 038 */ + { .mk = { 0x29, 0 }, .brk = { 0xF0, 0x29, 0 } }, /* 039 */ + { .mk = { 0x58, 0 }, .brk = { 0xF0, 0x58, 0 } }, /* 03a */ + { .mk = { 0x05, 0 }, .brk = { 0xF0, 0x05, 0 } }, /* 03b */ + { .mk = { 0x06, 0 }, .brk = { 0xF0, 0x06, 0 } }, /* 03c */ + { .mk = { 0x04, 0 }, .brk = { 0xF0, 0x04, 0 } }, /* 03d */ + { .mk = { 0x0C, 0 }, .brk = { 0xF0, 0x0C, 0 } }, /* 03e */ + { .mk = { 0x03, 0 }, .brk = { 0xF0, 0x03, 0 } }, /* 03f */ + { .mk = { 0x0B, 0 }, .brk = { 0xF0, 0x0B, 0 } }, /* 040 */ + { .mk = { 0x83, 0 }, .brk = { 0xF0, 0x83, 0 } }, /* 041 */ + { .mk = { 0x0A, 0 }, .brk = { 0xF0, 0x0A, 0 } }, /* 042 */ + { .mk = { 0x01, 0 }, .brk = { 0xF0, 0x01, 0 } }, /* 043 */ + { .mk = { 0x09, 0 }, .brk = { 0xF0, 0x09, 0 } }, /* 044 */ + { .mk = { 0x77, 0 }, .brk = { 0xF0, 0x77, 0 } }, /* 045 */ + { .mk = { 0x7E, 0 }, .brk = { 0xF0, 0x7E, 0 } }, /* 046 */ + { .mk = { 0x6C, 0 }, .brk = { 0xF0, 0x6C, 0 } }, /* 047 */ + { .mk = { 0x75, 0 }, .brk = { 0xF0, 0x75, 0 } }, /* 048 */ + { .mk = { 0x7D, 0 }, .brk = { 0xF0, 0x7D, 0 } }, /* 049 */ + { .mk = { 0x7B, 0 }, .brk = { 0xF0, 0x7B, 0 } }, /* 04a */ + { .mk = { 0x6B, 0 }, .brk = { 0xF0, 0x6B, 0 } }, /* 04b */ + { .mk = { 0x73, 0 }, .brk = { 0xF0, 0x73, 0 } }, /* 04c */ + { .mk = { 0x74, 0 }, .brk = { 0xF0, 0x74, 0 } }, /* 04d */ + { .mk = { 0x79, 0 }, .brk = { 0xF0, 0x79, 0 } }, /* 04e */ + { .mk = { 0x69, 0 }, .brk = { 0xF0, 0x69, 0 } }, /* 04f */ + { .mk = { 0x72, 0 }, .brk = { 0xF0, 0x72, 0 } }, /* 050 */ + { .mk = { 0x7A, 0 }, .brk = { 0xF0, 0x7A, 0 } }, /* 051 */ + { .mk = { 0x70, 0 }, .brk = { 0xF0, 0x70, 0 } }, /* 052 */ + { .mk = { 0x71, 0 }, .brk = { 0xF0, 0x71, 0 } }, /* 053 */ + { .mk = { 0x84, 0 }, .brk = { 0xF0, 0x84, 0 } }, /* 054 */ + { .mk = { 0 }, .brk = { 0 } }, /* 055 */ + { .mk = { 0x61, 0 }, .brk = { 0xF0, 0x61, 0 } }, /* 056 */ + { .mk = { 0 }, .brk = { 0 } }, /* 057 */ + { .mk = { 0 }, .brk = { 0 } }, /* 058 */ + { .mk = { 0 }, .brk = { 0 } }, /* 059 */ + { .mk = { 0 }, .brk = { 0 } }, /* 05a */ + { .mk = { 0 }, .brk = { 0 } }, /* 05b */ + { .mk = { 0x27, 0 }, .brk = { 0xF0, 0x27, 0 } }, /* 05c */ + { .mk = { 0 }, .brk = { 0 } }, /* 05d */ + { .mk = { 0 }, .brk = { 0 } }, /* 05e */ + { .mk = { 0 }, .brk = { 0 } }, /* 05f */ + { .mk = { 0x47, 0 }, .brk = { 0xF0, 0x47, 0 } }, /* 060 */ + { .mk = { 0x4F, 0 }, .brk = { 0xF0, 0x4F, 0 } }, /* 061 */ + { .mk = { 0x56, 0 }, .brk = { 0xF0, 0x56, 0 } }, /* 062 */ + { .mk = { 0x5E, 0 }, .brk = { 0xF0, 0x5E, 0 } }, /* 063 */ + { .mk = { 0x08, 0 }, .brk = { 0xF0, 0x08, 0 } }, /* 064 */ + { .mk = { 0x10, 0 }, .brk = { 0xF0, 0x10, 0 } }, /* 065 */ + { .mk = { 0x18, 0 }, .brk = { 0xF0, 0x18, 0 } }, /* 066 */ + { .mk = { 0x20, 0 }, .brk = { 0xF0, 0x20, 0 } }, /* 067 */ + { .mk = { 0x28, 0 }, .brk = { 0xF0, 0x28, 0 } }, /* 068 */ + { .mk = { 0x30, 0 }, .brk = { 0xF0, 0x30, 0 } }, /* 069 */ + { .mk = { 0x38, 0 }, .brk = { 0xF0, 0x38, 0 } }, /* 06a */ + { .mk = { 0x40, 0 }, .brk = { 0xF0, 0x40, 0 } }, /* 06b */ + { .mk = { 0x48, 0 }, .brk = { 0xF0, 0x48, 0 } }, /* 06c */ + { .mk = { 0x50, 0 }, .brk = { 0xF0, 0x50, 0 } }, /* 06d */ + { .mk = { 0x57, 0 }, .brk = { 0xF0, 0x57, 0 } }, /* 06e */ + { .mk = { 0x6F, 0 }, .brk = { 0xF0, 0x6F, 0 } }, /* 06f */ + { .mk = { 0x13, 0 }, .brk = { 0xF0, 0x13, 0 } }, /* 070 */ + { .mk = { 0x19, 0 }, .brk = { 0xF0, 0x19, 0 } }, /* 071 */ + { .mk = { 0x39, 0 }, .brk = { 0xF0, 0x39, 0 } }, /* 072 */ + { .mk = { 0x5D, 0 }, .brk = { 0xF0, 0x5D, 0 } }, /* 073 */ + { .mk = { 0x53, 0 }, .brk = { 0xF0, 0x53, 0 } }, /* 074 */ + { .mk = { 0x5C, 0 }, .brk = { 0xF0, 0x5C, 0 } }, /* 075 */ + { .mk = { 0x5F, 0 }, .brk = { 0xF0, 0x5F, 0 } }, /* 076 */ + { .mk = { 0x62, 0 }, .brk = { 0xF0, 0x62, 0 } }, /* 077 */ + { .mk = { 0x63, 0 }, .brk = { 0xF0, 0x63, 0 } }, /* 078 */ + { .mk = { 0x64, 0 }, .brk = { 0xF0, 0x64, 0 } }, /* 079 */ + { .mk = { 0x65, 0 }, .brk = { 0xF0, 0x65, 0 } }, /* 07a */ + { .mk = { 0x67, 0 }, .brk = { 0xF0, 0x67, 0 } }, /* 07b */ + { .mk = { 0x68, 0 }, .brk = { 0xF0, 0x68, 0 } }, /* 07c */ + { .mk = { 0x61, 0 }, .brk = { 0xF0, 0x61, 0 } }, /* 07d */ + { .mk = { 0x6D, 0 }, .brk = { 0xF0, 0x6D, 0 } }, /* 07e */ + { .mk = { 0x6E, 0 }, .brk = { 0xF0, 0x6E, 0 } }, /* 07f */ + { .mk = { 0 }, .brk = { 0 } }, /* 080 */ + { .mk = { 0 }, .brk = { 0 } }, /* 081 */ + { .mk = { 0 }, .brk = { 0 } }, /* 082 */ + { .mk = { 0 }, .brk = { 0 } }, /* 083 */ + { .mk = { 0 }, .brk = { 0 } }, /* 084 */ + { .mk = { 0 }, .brk = { 0 } }, /* 085 */ + { .mk = { 0 }, .brk = { 0 } }, /* 086 */ + { .mk = { 0 }, .brk = { 0 } }, /* 087 */ + { .mk = { 0 }, .brk = { 0 } }, /* 088 */ + { .mk = { 0 }, .brk = { 0 } }, /* 089 */ + { .mk = { 0 }, .brk = { 0 } }, /* 08a */ + { .mk = { 0 }, .brk = { 0 } }, /* 08b */ + { .mk = { 0 }, .brk = { 0 } }, /* 08c */ + { .mk = { 0 }, .brk = { 0 } }, /* 08d */ + { .mk = { 0 }, .brk = { 0 } }, /* 08e */ + { .mk = { 0 }, .brk = { 0 } }, /* 08f */ + { .mk = { 0 }, .brk = { 0 } }, /* 090 */ + { .mk = { 0 }, .brk = { 0 } }, /* 091 */ + { .mk = { 0 }, .brk = { 0 } }, /* 092 */ + { .mk = { 0 }, .brk = { 0 } }, /* 093 */ + { .mk = { 0 }, .brk = { 0 } }, /* 094 */ + { .mk = { 0 }, .brk = { 0 } }, /* 095 */ + { .mk = { 0 }, .brk = { 0 } }, /* 096 */ + { .mk = { 0 }, .brk = { 0 } }, /* 097 */ + { .mk = { 0 }, .brk = { 0 } }, /* 098 */ + { .mk = { 0 }, .brk = { 0 } }, /* 099 */ + { .mk = { 0 }, .brk = { 0 } }, /* 09a */ + { .mk = { 0 }, .brk = { 0 } }, /* 09b */ + { .mk = { 0 }, .brk = { 0 } }, /* 09c */ + { .mk = { 0 }, .brk = { 0 } }, /* 09d */ + { .mk = { 0 }, .brk = { 0 } }, /* 09e */ + { .mk = { 0 }, .brk = { 0 } }, /* 09f */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0a9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0aa */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ab */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ac */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ad */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ae */ + { .mk = { 0 }, .brk = { 0 } }, /* 0af */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0b9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ba */ + { .mk = { 0 }, .brk = { 0 } }, /* 0bb */ + { .mk = { 0 }, .brk = { 0 } }, /* 0bc */ + { .mk = { 0 }, .brk = { 0 } }, /* 0bd */ + { .mk = { 0 }, .brk = { 0 } }, /* 0be */ + { .mk = { 0 }, .brk = { 0 } }, /* 0bf */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0c9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ca */ + { .mk = { 0 }, .brk = { 0 } }, /* 0cb */ + { .mk = { 0 }, .brk = { 0 } }, /* 0cc */ + { .mk = { 0 }, .brk = { 0 } }, /* 0cd */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ce */ + { .mk = { 0 }, .brk = { 0 } }, /* 0cf */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0d9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0da */ + { .mk = { 0 }, .brk = { 0 } }, /* 0db */ + { .mk = { 0 }, .brk = { 0 } }, /* 0dc */ + { .mk = { 0 }, .brk = { 0 } }, /* 0dd */ + { .mk = { 0 }, .brk = { 0 } }, /* 0de */ + { .mk = { 0 }, .brk = { 0 } }, /* 0df */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0e9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ea */ + { .mk = { 0 }, .brk = { 0 } }, /* 0eb */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ec */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ed */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ee */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ef */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f0 */ + { .mk = { 0xf1, 0 }, .brk = { 0xf0, 0xf1, 0 } }, /* 0f1 */ + { .mk = { 0xf2, 0 }, .brk = { 0xf0, 0xf2, 0 } }, /* 0f2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0f9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 0fa */ + { .mk = { 0 }, .brk = { 0 } }, /* 0fb */ + { .mk = { 0 }, .brk = { 0 } }, /* 0fc */ + { .mk = { 0 }, .brk = { 0 } }, /* 0fd */ + { .mk = { 0 }, .brk = { 0 } }, /* 0fe */ + { .mk = { 0 }, .brk = { 0 } }, /* 0ff */ + { .mk = { 0 }, .brk = { 0 } }, /* 100 */ + { .mk = { 0 }, .brk = { 0 } }, /* 101 */ + { .mk = { 0 }, .brk = { 0 } }, /* 102 */ + { .mk = { 0 }, .brk = { 0 } }, /* 103 */ + { .mk = { 0 }, .brk = { 0 } }, /* 104 */ + { .mk = { 0 }, .brk = { 0 } }, /* 105 */ + { .mk = { 0 }, .brk = { 0 } }, /* 106 */ + { .mk = { 0 }, .brk = { 0 } }, /* 107 */ + { .mk = { 0 }, .brk = { 0 } }, /* 108 */ + { .mk = { 0 }, .brk = { 0 } }, /* 109 */ + { .mk = { 0 }, .brk = { 0 } }, /* 10a */ + { .mk = { 0 }, .brk = { 0 } }, /* 10b */ + { .mk = { 0 }, .brk = { 0 } }, /* 10c */ + { .mk = { 0 }, .brk = { 0 } }, /* 10d */ + { .mk = { 0 }, .brk = { 0 } }, /* 10e */ + { .mk = { 0 }, .brk = { 0 } }, /* 10f */ + { .mk = { 0 }, .brk = { 0 } }, /* 110 */ + { .mk = { 0 }, .brk = { 0 } }, /* 111 */ + { .mk = { 0 }, .brk = { 0 } }, /* 112 */ + { .mk = { 0 }, .brk = { 0 } }, /* 113 */ + { .mk = { 0 }, .brk = { 0 } }, /* 114 */ + { .mk = { 0 }, .brk = { 0 } }, /* 115 */ + { .mk = { 0 }, .brk = { 0 } }, /* 116 */ + { .mk = { 0 }, .brk = { 0 } }, /* 117 */ + { .mk = { 0 }, .brk = { 0 } }, /* 118 */ + { .mk = { 0 }, .brk = { 0 } }, /* 119 */ + { .mk = { 0 }, .brk = { 0 } }, /* 11a */ + { .mk = { 0 }, .brk = { 0 } }, /* 11b */ + { .mk = { 0x5A, 0 }, .brk = { 0xF0, 0x5A, 0 } }, /* 11c */ + { .mk = { 0x14, 0 }, .brk = { 0xF0, 0x14, 0 } }, /* 11d */ + { .mk = { 0 }, .brk = { 0 } }, /* 11e */ + { .mk = { 0 }, .brk = { 0 } }, /* 11f */ + { .mk = { 0 }, .brk = { 0 } }, /* 120 */ + { .mk = { 0 }, .brk = { 0 } }, /* 121 */ + { .mk = { 0 }, .brk = { 0 } }, /* 122 */ + { .mk = { 0 }, .brk = { 0 } }, /* 123 */ + { .mk = { 0 }, .brk = { 0 } }, /* 124 */ + { .mk = { 0 }, .brk = { 0 } }, /* 125 */ + { .mk = { 0 }, .brk = { 0 } }, /* 126 */ + { .mk = { 0 }, .brk = { 0 } }, /* 127 */ + { .mk = { 0 }, .brk = { 0 } }, /* 128 */ + { .mk = { 0 }, .brk = { 0 } }, /* 129 */ + { .mk = { 0 }, .brk = { 0 } }, /* 12a */ + { .mk = { 0 }, .brk = { 0 } }, /* 12b */ + { .mk = { 0 }, .brk = { 0 } }, /* 12c */ + { .mk = { 0 }, .brk = { 0 } }, /* 12d */ + { .mk = { 0 }, .brk = { 0 } }, /* 12e */ + { .mk = { 0 }, .brk = { 0 } }, /* 12f */ + { .mk = { 0 }, .brk = { 0 } }, /* 130 */ + { .mk = { 0 }, .brk = { 0 } }, /* 131 */ + { .mk = { 0 }, .brk = { 0 } }, /* 132 */ + { .mk = { 0 }, .brk = { 0 } }, /* 133 */ + { .mk = { 0 }, .brk = { 0 } }, /* 134 */ + { .mk = { 0x4A, 0 }, .brk = { 0xF0, 0x4A, 0 } }, /* 135 */ + { .mk = { 0 }, .brk = { 0 } }, /* 136 */ + { .mk = { 0x7C, 0 }, .brk = { 0xF0, 0x7C, 0 } }, /* 137 */ + { .mk = { 0x11, 0 }, .brk = { 0xF0, 0x11, 0 } }, /* 138 */ + { .mk = { 0 }, .brk = { 0 } }, /* 139 */ + { .mk = { 0 }, .brk = { 0 } }, /* 13a */ + { .mk = { 0 }, .brk = { 0 } }, /* 13b */ + { .mk = { 0 }, .brk = { 0 } }, /* 13c */ + { .mk = { 0 }, .brk = { 0 } }, /* 13d */ + { .mk = { 0 }, .brk = { 0 } }, /* 13e */ + { .mk = { 0 }, .brk = { 0 } }, /* 13f */ + { .mk = { 0 }, .brk = { 0 } }, /* 140 */ + { .mk = { 0 }, .brk = { 0 } }, /* 141 */ + { .mk = { 0 }, .brk = { 0 } }, /* 142 */ + { .mk = { 0 }, .brk = { 0 } }, /* 143 */ + { .mk = { 0 }, .brk = { 0 } }, /* 144 */ + { .mk = { 0 }, .brk = { 0 } }, /* 145 */ + { .mk = { 0x7E, 0 }, .brk = { 0xF0, 0x7E, 0 } }, /* 146 */ + { .mk = { 0x6C, 0 }, .brk = { 0xF0, 0x6C, 0 } }, /* 147 */ + { .mk = { 0x75, 0 }, .brk = { 0xF0, 0x75, 0 } }, /* 148 */ + { .mk = { 0x7D, 0 }, .brk = { 0xF0, 0x7D, 0 } }, /* 149 */ + { .mk = { 0 }, .brk = { 0 } }, /* 14a */ + { .mk = { 0x6B, 0 }, .brk = { 0xF0, 0x6B, 0 } }, /* 14b */ + { .mk = { 0 }, .brk = { 0 } }, /* 14c */ + { .mk = { 0x74, 0 }, .brk = { 0xF0, 0x74, 0 } }, /* 14d */ + { .mk = { 0 }, .brk = { 0 } }, /* 14e */ + { .mk = { 0x69, 0 }, .brk = { 0xF0, 0x69, 0 } }, /* 14f */ + { .mk = { 0x72, 0 }, .brk = { 0xF0, 0x72, 0 } }, /* 150 */ + { .mk = { 0x7A, 0 }, .brk = { 0xF0, 0x7A, 0 } }, /* 151 */ + { .mk = { 0x70, 0 }, .brk = { 0xF0, 0x70, 0 } }, /* 152 */ + { .mk = { 0x71, 0 }, .brk = { 0xF0, 0x71, 0 } }, /* 153 */ + { .mk = { 0 }, .brk = { 0 } }, /* 154 */ + { .mk = { 0 }, .brk = { 0 } }, /* 155 */ + { .mk = { 0 }, .brk = { 0 } }, /* 156 */ + { .mk = { 0 }, .brk = { 0 } }, /* 157 */ + { .mk = { 0 }, .brk = { 0 } }, /* 158 */ + { .mk = { 0 }, .brk = { 0 } }, /* 159 */ + { .mk = { 0 }, .brk = { 0 } }, /* 15a */ + { .mk = { 0x27, 0 }, .brk = { 0xF0, 0x27, 0 } }, /* 15b */ + { .mk = { 0 }, .brk = { 0 } }, /* 15c */ + { .mk = { 0 }, .brk = { 0 } }, /* 15d */ + { .mk = { 0 }, .brk = { 0 } }, /* 15e */ + { .mk = { 0 }, .brk = { 0 } }, /* 15f */ + { .mk = { 0 }, .brk = { 0 } }, /* 160 */ + { .mk = { 0 }, .brk = { 0 } }, /* 161 */ + { .mk = { 0 }, .brk = { 0 } }, /* 162 */ + { .mk = { 0 }, .brk = { 0 } }, /* 163 */ + { .mk = { 0 }, .brk = { 0 } }, /* 164 */ + { .mk = { 0 }, .brk = { 0 } }, /* 165 */ + { .mk = { 0 }, .brk = { 0 } }, /* 166 */ + { .mk = { 0 }, .brk = { 0 } }, /* 167 */ + { .mk = { 0 }, .brk = { 0 } }, /* 168 */ + { .mk = { 0 }, .brk = { 0 } }, /* 169 */ + { .mk = { 0 }, .brk = { 0 } }, /* 16a */ + { .mk = { 0 }, .brk = { 0 } }, /* 16b */ + { .mk = { 0 }, .brk = { 0 } }, /* 16c */ + { .mk = { 0 }, .brk = { 0 } }, /* 16d */ + { .mk = { 0 }, .brk = { 0 } }, /* 16e */ + { .mk = { 0 }, .brk = { 0 } }, /* 16f */ + { .mk = { 0 }, .brk = { 0 } }, /* 170 */ + { .mk = { 0 }, .brk = { 0 } }, /* 171 */ + { .mk = { 0 }, .brk = { 0 } }, /* 172 */ + { .mk = { 0 }, .brk = { 0 } }, /* 173 */ + { .mk = { 0 }, .brk = { 0 } }, /* 174 */ + { .mk = { 0 }, .brk = { 0 } }, /* 175 */ + { .mk = { 0 }, .brk = { 0 } }, /* 176 */ + { .mk = { 0 }, .brk = { 0 } }, /* 177 */ + { .mk = { 0 }, .brk = { 0 } }, /* 178 */ + { .mk = { 0 }, .brk = { 0 } }, /* 179 */ + { .mk = { 0 }, .brk = { 0 } }, /* 17a */ + { .mk = { 0 }, .brk = { 0 } }, /* 17b */ + { .mk = { 0 }, .brk = { 0 } }, /* 17c */ + { .mk = { 0 }, .brk = { 0 } }, /* 17d */ + { .mk = { 0 }, .brk = { 0 } }, /* 17e */ + { .mk = { 0 }, .brk = { 0 } }, /* 17f */ + { .mk = { 0 }, .brk = { 0 } }, /* 180 */ + { .mk = { 0 }, .brk = { 0 } }, /* 181 */ + { .mk = { 0 }, .brk = { 0 } }, /* 182 */ + { .mk = { 0 }, .brk = { 0 } }, /* 183 */ + { .mk = { 0 }, .brk = { 0 } }, /* 184 */ + { .mk = { 0 }, .brk = { 0 } }, /* 185 */ + { .mk = { 0 }, .brk = { 0 } }, /* 186 */ + { .mk = { 0 }, .brk = { 0 } }, /* 187 */ + { .mk = { 0 }, .brk = { 0 } }, /* 188 */ + { .mk = { 0 }, .brk = { 0 } }, /* 189 */ + { .mk = { 0 }, .brk = { 0 } }, /* 18a */ + { .mk = { 0 }, .brk = { 0 } }, /* 18b */ + { .mk = { 0 }, .brk = { 0 } }, /* 18c */ + { .mk = { 0 }, .brk = { 0 } }, /* 18d */ + { .mk = { 0 }, .brk = { 0 } }, /* 18e */ + { .mk = { 0 }, .brk = { 0 } }, /* 18f */ + { .mk = { 0 }, .brk = { 0 } }, /* 190 */ + { .mk = { 0 }, .brk = { 0 } }, /* 191 */ + { .mk = { 0 }, .brk = { 0 } }, /* 192 */ + { .mk = { 0 }, .brk = { 0 } }, /* 193 */ + { .mk = { 0 }, .brk = { 0 } }, /* 194 */ + { .mk = { 0 }, .brk = { 0 } }, /* 195 */ + { .mk = { 0 }, .brk = { 0 } }, /* 196 */ + { .mk = { 0 }, .brk = { 0 } }, /* 197 */ + { .mk = { 0 }, .brk = { 0 } }, /* 198 */ + { .mk = { 0 }, .brk = { 0 } }, /* 199 */ + { .mk = { 0 }, .brk = { 0 } }, /* 19a */ + { .mk = { 0 }, .brk = { 0 } }, /* 19b */ + { .mk = { 0 }, .brk = { 0 } }, /* 19c */ + { .mk = { 0 }, .brk = { 0 } }, /* 19d */ + { .mk = { 0 }, .brk = { 0 } }, /* 19e */ + { .mk = { 0 }, .brk = { 0 } }, /* 19f */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1a9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1aa */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ab */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ac */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ad */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ae */ + { .mk = { 0 }, .brk = { 0 } }, /* 1af */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1b9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ba */ + { .mk = { 0 }, .brk = { 0 } }, /* 1bb */ + { .mk = { 0 }, .brk = { 0 } }, /* 1bc */ + { .mk = { 0 }, .brk = { 0 } }, /* 1bd */ + { .mk = { 0 }, .brk = { 0 } }, /* 1be */ + { .mk = { 0 }, .brk = { 0 } }, /* 1bf */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1c9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ca */ + { .mk = { 0 }, .brk = { 0 } }, /* 1cb */ + { .mk = { 0 }, .brk = { 0 } }, /* 1cc */ + { .mk = { 0 }, .brk = { 0 } }, /* 1cd */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ce */ + { .mk = { 0 }, .brk = { 0 } }, /* 1cf */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1d9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1da */ + { .mk = { 0 }, .brk = { 0 } }, /* 1db */ + { .mk = { 0 }, .brk = { 0 } }, /* 1dc */ + { .mk = { 0 }, .brk = { 0 } }, /* 1dd */ + { .mk = { 0 }, .brk = { 0 } }, /* 1de */ + { .mk = { 0 }, .brk = { 0 } }, /* 1df */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1e9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ea */ + { .mk = { 0 }, .brk = { 0 } }, /* 1eb */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ec */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ed */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ee */ + { .mk = { 0 }, .brk = { 0 } }, /* 1ef */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f0 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f1 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f2 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f3 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f4 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f5 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f6 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f7 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f8 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1f9 */ + { .mk = { 0 }, .brk = { 0 } }, /* 1fa */ + { .mk = { 0 }, .brk = { 0 } }, /* 1fb */ + { .mk = { 0 }, .brk = { 0 } }, /* 1fc */ + { .mk = { 0 }, .brk = { 0 } }, /* 1fd */ + { .mk = { 0 }, .brk = { 0 } }, /* 1fe */ + { .mk = { 0 }, .brk = { 0 } } /* 1ff */ + // clang-format on +}; + +const scancode scancode_set1[512] = { // clang-format off { .mk = { 0 }, .brk = { 0 } }, /* 000 */ { .mk = { 0x01, 0 }, .brk = { 0x81, 0 } }, /* 001 */ @@ -1159,7 +3225,7 @@ static const scancode scancode_set3[512] = { { .mk = { 0x52, 0 }, .brk = { 0xf0, 0x52, 0 } }, /* 028 */ { .mk = { 0x0E, 0 }, .brk = { 0xf0, 0x0E, 0 } }, /* 029 */ { .mk = { 0x12, 0 }, .brk = { 0xf0, 0x12, 0 } }, /* 02a */ - { .mk = { 0x5C, 0 }, .brk = { 0xf0, 0x5C, 0 } }, /* 02b */ + { .mk = {0x8c, 0x2B, 0 }, .brk = { 0xf0, 0x8c, 0x2B, 0 } }, /* 02b */ { .mk = { 0x1A, 0 }, .brk = { 0xf0, 0x1A, 0 } }, /* 02c */ { .mk = { 0x22, 0 }, .brk = { 0xf0, 0x22, 0 } }, /* 02d */ { .mk = { 0x21, 0 }, .brk = { 0xf0, 0x21, 0 } }, /* 02e */ @@ -1202,7 +3268,7 @@ static const scancode scancode_set3[512] = { { .mk = { 0x71, 0 }, .brk = { 0xf0, 0x71, 0 } }, /* 053 */ { .mk = { 0x57, 0 }, .brk = { 0xf0, 0x57, 0 } }, /* 054 */ { .mk = { 0x60, 0 }, .brk = { 0xf0, 0x60, 0 } }, /* 055 */ - { .mk = { 0 }, .brk = { 0 } }, /* 056 */ + { .mk = {0x8c, 0x56, 0 }, .brk = { 0xf0, 0x8c, 0x56, 0 } }, /* 056 */ { .mk = { 0x56, 0 }, .brk = { 0xf0, 0x56, 0 } }, /* 057 */ { .mk = { 0x5E, 0 }, .brk = { 0xf0, 0x5E, 0 } }, /* 058 */ { .mk = { 0 }, .brk = { 0 } }, /* 059 */ @@ -1228,20 +3294,20 @@ static const scancode scancode_set3[512] = { { .mk = { 0x50, 0 }, .brk = { 0xf0, 0x50, 0 } }, /* 06d */ { .mk = { 0 }, .brk = { 0 } }, /* 06e */ { .mk = { 0 }, .brk = { 0 } }, /* 06f */ - { .mk = { 0x87, 0 }, .brk = { 0xf0, 0x87, 0 } }, /* 070 */ + { .mk = {0x8c, 0x70, 0 }, .brk = { 0xf0, 0x8c, 0x70, 0 } }, /* 07d */ { .mk = { 0 }, .brk = { 0 } }, /* 071 */ { .mk = { 0 }, .brk = { 0 } }, /* 072 */ - { .mk = { 0x51, 0 }, .brk = { 0xf0, 0x51, 0 } }, /* 073 */ + { .mk = {0x8c, 0x73, 0 }, .brk = { 0xf0, 0x8c, 0x73, 0 } }, /* 073 */ { .mk = { 0x53, 0 }, .brk = { 0xf0, 0x53, 0 } }, /* 074 */ { .mk = { 0x5C, 0 }, .brk = { 0xf0, 0x5C, 0 } }, /* 075 */ { .mk = { 0 }, .brk = { 0 } }, /* 076 */ { .mk = { 0x62, 0 }, .brk = { 0xf0, 0x62, 0 } }, /* 077 */ { .mk = { 0x63, 0 }, .brk = { 0xf0, 0x63, 0 } }, /* 078 */ - { .mk = { 0x86, 0 }, .brk = { 0xf0, 0x86, 0 } }, /* 079 */ + { .mk = {0x8c, 0x79, 0 }, .brk = { 0xf0, 0x8c, 0x79, 0 } }, /* 079 */ { .mk = { 0 }, .brk = { 0 } }, /* 07a */ - { .mk = { 0x85, 0 }, .brk = { 0xf0, 0x85, 0 } }, /* 07b */ + { .mk = {0x8c, 0x7b, 0 }, .brk = { 0xf0, 0x8c, 0x7b, 0 } }, /* 07b */ { .mk = { 0x68, 0 }, .brk = { 0xf0, 0x68, 0 } }, /* 07c */ - { .mk = { 0x13, 0 }, .brk = { 0xf0, 0x13, 0 } }, /* 07d */ + { .mk = {0x8c, 0x7d, 0 }, .brk = { 0xf0, 0x8c, 0x7d, 0 } }, /* 07d */ { .mk = { 0 }, .brk = { 0 } }, /* 07e */ { .mk = { 0 }, .brk = { 0 } }, /* 07f */ { .mk = { 0x80, 0 }, .brk = { 0xf0, 0x80, 0 } }, /* 080 */ @@ -3229,16 +5295,26 @@ keyboard_at_log(const char *fmt, ...) #endif static void -keyboard_at_set_scancode_set(void) +keyboard_at_set_scancode_set(atkbc_dev_t *dev) { switch (keyboard_mode) { default: case 0x01: - keyboard_set_table(scancode_set1); + if (dev->type & FLAG_AX) + keyboard_set_table(scancode_set1_ax); + else if ((dev->type & FLAG_TYPE_MASK) > KBD_84_KEY) + keyboard_set_table(scancode_set1); + else + keyboard_set_table(scancode_set1_at); break; case 0x02: - keyboard_set_table(scancode_set2); + if (dev->type & FLAG_AX) + keyboard_set_table(scancode_set2_ax); + else if ((dev->type & FLAG_TYPE_MASK) > KBD_84_KEY) + keyboard_set_table(scancode_set2); + else + keyboard_set_table(scancode_set2_at); break; case 0x03: @@ -3274,6 +5350,89 @@ add_data_kbd(uint16_t val) uint8_t num_lock = 0; uint8_t shift_states = 0; + if ((keyboard_mode == 0x03) && (val == 0x8c)) { + is_special = 1; + return; + } else if (is_special) { + uint8_t keys = (dev->type & FLAG_TYPE_MASK); + + switch (val) { + case 0x2b: + switch (keys) { + default: + val = 0x5c; + break; + case KBD_102_KEY: case KBD_JIS: + case KBD_ABNT2: + val = 0x53; + break; + } + break; + case 0x56: + switch (keys) { + default: + val = 0x12; + break; + case KBD_102_KEY: case KBD_ABNT2: + val = 0x13; + break; + } + break; + case 0x70: + switch (keys) { + default: + val = 0x29; + break; + case KBD_JIS: + val = 0x87; + break; + } + break; + case 0x73: + switch (keys) { + default: + val = 0x59; + break; + case KBD_JIS: case KBD_ABNT2: + val = 0x5c; + break; + } + break; + case 0x79: + switch (keys) { + default: + val = 0x29; + break; + case KBD_JIS: + val = 0x86; + break; + } + break; + case 0x7b: + switch (keys) { + default: + val = 0x29; + break; + case KBD_JIS: + val = 0x85; + break; + } + break; + case 0x7d: + switch (keys) { + default: + val = 0x66; + break; + case KBD_JIS: + val = 0x13; + break; + } + break; + } + + is_special = 0; + } + dev->ignore = 1; keyboard_get_states(NULL, &num_lock, NULL, NULL); @@ -3463,7 +5622,9 @@ keyboard_at_set_defaults(atkbc_dev_t *dev) memset(keyboard_set3_flags, 0, 512); keyboard_mode = 0x02; - keyboard_at_set_scancode_set(); + keyboard_at_set_scancode_set(dev); + + is_special = 0; } static void @@ -3530,8 +5691,9 @@ keyboard_at_write(void *priv) case 0x8a: kbc_at_dev_queue_add(dev, 0xfa, 0); /* ACK */ keyboard_mode = val; + is_special = 0; keyboard_at_log("%s: Set scan code set [%02X]\n", dev->name, keyboard_mode); - keyboard_at_set_scancode_set(); + keyboard_at_set_scancode_set(dev); break; default: /* Fatal so any instance of anything attempting to set scan code > 3 can be reported to us. */ @@ -3599,7 +5761,7 @@ keyboard_at_write(void *priv) break; case 0xf0: /* get/set scan code set */ - if (dev->type & FLAG_PS2) { + if (dev->type & FLAG_PS2_KBD) { dev->command = val; keyboard_at_log("%s: scan code set\n", dev->name); dev->flags |= FLAG_CTRLDAT; @@ -3659,11 +5821,11 @@ keyboard_at_write(void *priv) memset(keyboard_set3_flags, 0, 512); keyboard_mode = 0x02; - keyboard_at_set_scancode_set(); + keyboard_at_set_scancode_set(dev); break; case 0xf7: /* set all keys to repeat */ - if (dev->type & FLAG_PS2) { + if (dev->type & FLAG_PS2_KBD) { keyboard_at_log("%s: set all keys to repeat\n", dev->name); kbc_at_dev_queue_add(dev, 0xfa, 0); keyboard_set3_all_break = 1; @@ -3672,7 +5834,7 @@ keyboard_at_write(void *priv) break; case 0xf8: /* set all keys to give make/break codes */ - if (dev->type & FLAG_PS2) { + if (dev->type & FLAG_PS2_KBD) { keyboard_at_log("%s: set all keys to give make/break codes\n", dev->name); kbc_at_dev_queue_add(dev, 0xfa, 0); keyboard_set3_all_break = 1; @@ -3681,7 +5843,7 @@ keyboard_at_write(void *priv) break; case 0xf9: /* set all keys to give make codes only */ - if (dev->type & FLAG_PS2) { + if (dev->type & FLAG_PS2_KBD) { keyboard_at_log("%s: set all keys to give make codes only\n", dev->name); kbc_at_dev_queue_add(dev, 0xfa, 0); keyboard_set3_all_break = 0; @@ -3690,7 +5852,7 @@ keyboard_at_write(void *priv) break; case 0xfa: /* set all keys to repeat and give make/break codes */ - if (dev->type & FLAG_PS2) { + if (dev->type & FLAG_PS2_KBD) { keyboard_at_log("%s: set all keys to repeat and give make/break codes\n", dev->name); kbc_at_dev_queue_add(dev, 0xfa, 0); keyboard_set3_all_repeat = 1; @@ -3791,14 +5953,13 @@ keyboard_at_init(const device_t *info) Key 63 = Japanese key between right Ctrl and right Alt, scan code: 86 (Henkan/Zenkouho 79); Key 65? = Japanese key between right Ctrl and right Alt, scan code: 87 (Hiragana/Katakana 70). */ - dev->type = FLAG_PS2 | KBD_102_KEY /* device_get_config_int("type") */; + dev->type = info->local | device_get_config_int("keys"); + /* We assume that the IBM PS/55 machine uses the 5576-002 keyboard (JP/CN layout) here. This is not smart but suitable for supporting a keyboard ID that is rarely used in standard PCs. At least, the Taiwanese PS/55 uses the same keyboard ID and scancode set. The Korean one is unknown. */ - if (!!strstr(machine_getname(), "PS/55")) - dev->type = FLAG_PS2 | KBD_JIS; keyboard_at_log("%s: type=%d\n", dev->name, dev->type); @@ -3818,7 +5979,9 @@ keyboard_at_init(const device_t *info) SavedKbd = dev; keyboard_update_states(0, 0, 0, 0); - inv_cmd_response = (dev->type & FLAG_PS2) ? 0xfe : 0xfa; + inv_cmd_response = (dev->type & FLAG_PS2_KBD) ? 0xfe : 0xfa; + + is_special = 0; #ifdef SCAN_CODE_TABLES_COMPARISON pclog_toggle_suppr(); @@ -3977,22 +6140,20 @@ keyboard_at_close(void *priv) static const device_config_t keyboard_at_config[] = { // clang-format off { - .name = "type", - .description = "Type", + .name = "keys", + .description = "Keys", .type = CONFIG_SELECTION, .default_string = NULL, - .default_int = 1, + .default_int = KBD_101_KEY, .file_filter = NULL, .spinner = { 0 }, .selection = { - { .description = "AT 84-key", .value = FLAG_AT | KBD_84_KEY }, - { .description = "AT 101/102/106-key", .value = FLAG_AT | KBD_101_KEY }, - { .description = "AT Korean", .value = FLAG_AT | KBD_KOREAN }, - { .description = "PS/2 101-key", .value = FLAG_PS2 | KBD_101_KEY }, - { .description = "PS/2 102-key", .value = FLAG_PS2 | KBD_102_KEY }, - { .description = "PS/2 106-key JIS", .value = FLAG_PS2 | KBD_JIS }, - { .description = "PS/2 Korean", .value = FLAG_PS2 | KBD_KOREAN }, - { .description = "" } + { .description = "84", .value = KBD_84_KEY }, + { .description = "101 (ANSI)", .value = KBD_101_KEY }, + { .description = "102 (ISO)", .value = KBD_102_KEY }, + { .description = "106 (JIS)", .value = KBD_JIS }, + { .description = "103 (KSC)", .value = KBD_KSC }, + { .description = "104 (ABNT2)", .value = KBD_ABNT2 } }, .bios = { { 0 } } }, @@ -4002,12 +6163,36 @@ static const device_config_t keyboard_at_config[] = { // clang-format on }; -/* TODO: Add more keyboard types. */ -const device_t keyboard_at_generic_device = { - .name = "Standard AT or PS/2 Keyboard", - .internal_name = "ps2", - .flags = DEVICE_PS2_KBC, - .local = 0, +static const device_config_t keyboard_ps2_config[] = { + // clang-format off + { + .name = "keys", + .description = "Keys", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = KBD_101_KEY, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "101 (ANSI)", .value = KBD_101_KEY }, + { .description = "102 (ISO)", .value = KBD_102_KEY }, + { .description = "106 (JIS)", .value = KBD_JIS }, + { .description = "103 (KSC)", .value = KBD_KSC }, + { .description = "104 (ABNT2)", .value = KBD_ABNT2 } + }, + .bios = { { 0 } } + }, + { + .name = "", .description = "", .type = CONFIG_END + } + // clang-format on +}; + +const device_t keyboard_at_device = { + .name = "AT Keyboard", + .internal_name = "keyboard_at", + .flags = DEVICE_AT_KBC, + .local = FLAG_AT, .init = keyboard_at_init, .close = keyboard_at_close, .reset = NULL, @@ -4016,3 +6201,60 @@ const device_t keyboard_at_generic_device = { .force_redraw = NULL, .config = keyboard_at_config }; + +const device_t keyboard_ax_device = { + .name = "AX Keyboard", + .internal_name = "keyboard_ax", + .flags = DEVICE_AT_KBC, + .local = FLAG_AX | KBD_JIS, + .init = keyboard_at_init, + .close = keyboard_at_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t keyboard_ps2_device = { + .name = "PS/2 Keyboard", + .internal_name = "keyboard_ps2", + .flags = DEVICE_AT_KBC | DEVICE_PS2_KBC, + .local = FLAG_PS2_KBD, + .init = keyboard_at_init, + .close = keyboard_at_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = keyboard_ps2_config +}; + +const device_t keyboard_ps55_device = { + .name = "PS/55 Keyboard", + .internal_name = "keyboard_ps55", + .flags = DEVICE_AT_KBC | DEVICE_PS2_KBC, + .local = FLAG_PS2_KBD | KBD_JIS, + .init = keyboard_at_init, + .close = keyboard_at_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t keyboard_at_generic_device = { + .name = "AT/PS/2 Keyboard", + .internal_name = "keyboard_at", + .flags = DEVICE_AT_KBC, + .local = KBD_102_KEY, + .init = keyboard_at_init, + .close = keyboard_at_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = keyboard_at_config +}; + diff --git a/src/device/keyboard_xt.c b/src/device/keyboard_xt.c index 5190de839..2936868b0 100644 --- a/src/device/keyboard_xt.c +++ b/src/device/keyboard_xt.c @@ -35,62 +35,8 @@ #include <86box/machine.h> #include <86box/m_xt_t1000.h> #include <86box/cassette.h> -#include <86box/io.h> -#include <86box/pic.h> -#include <86box/pit.h> -#include <86box/ppi.h> -#include <86box/mem.h> -#include <86box/rom.h> -#include <86box/sound.h> -#include <86box/snd_speaker.h> -#include <86box/video.h> #include <86box/keyboard.h> -#define STAT_PARITY 0x80 -#define STAT_RTIMEOUT 0x40 -#define STAT_TTIMEOUT 0x20 -#define STAT_LOCK 0x10 -#define STAT_CD 0x08 -#define STAT_SYSFLAG 0x04 -#define STAT_IFULL 0x02 -#define STAT_OFULL 0x01 - -/* Keyboard Types */ -enum { - KBD_TYPE_PC81 = 0, - KBD_TYPE_PC82, - KBD_TYPE_XT82, - KBD_TYPE_XT86, - KBD_TYPE_COMPAQ, - KBD_TYPE_TANDY, - KBD_TYPE_TOSHIBA, - KBD_TYPE_VTECH, - KBD_TYPE_OLIVETTI, - KBD_TYPE_ZENITH, - KBD_TYPE_PRAVETZ, - KBD_TYPE_HYUNDAI, - KBD_TYPE_FE2010, - KBD_TYPE_XTCLONE -}; - -typedef struct xtkbd_t { - int want_irq; - int blocked; - int tandy; - - uint8_t pa; - uint8_t pb; - uint8_t pd; - uint8_t cfg; - uint8_t clock; - uint8_t key_waiting; - uint8_t type; - uint8_t pravetz_flags; - uint8_t cpu_speed; - - pc_timer_t send_delay_timer; -} xtkbd_t; - /*XT keyboard has no escape scancodes, and no scancodes beyond 53*/ const scancode scancode_xt[512] = { // clang-format off @@ -609,810 +555,66 @@ const scancode scancode_xt[512] = { // clang-format on }; -static uint8_t key_queue[16]; -static int key_queue_start = 0; -static int key_queue_end = 0; -static int is_tandy = 0; -static int is_t1x00 = 0; -static int is_amstrad = 0; - -#ifdef ENABLE_KEYBOARD_XT_LOG -int keyboard_xt_do_log = ENABLE_KEYBOARD_XT_LOG; - -static void -kbd_log(const char *fmt, ...) -{ - va_list ap; - - if (keyboard_xt_do_log) { - va_start(ap, fmt); - pclog_ex(fmt, ap); - va_end(ap); - } -} -#else -# define kbd_log(fmt, ...) -#endif - -static uint8_t -get_fdd_switch_settings(void) -{ - - uint8_t fdd_count = 0; - - for (uint8_t i = 0; i < FDD_NUM; i++) { - if (fdd_get_flags(i)) - fdd_count++; - } - - if (!fdd_count) - return 0x00; - else - return ((fdd_count - 1) << 6) | 0x01; -} - -static uint8_t -get_videomode_switch_settings(void) -{ - - if (video_is_mda()) - return 0x30; - else if (video_is_cga()) - return 0x20; /* 0x10 would be 40x25 */ - else - return 0x00; -} - -static void -kbd_poll(void *priv) -{ - xtkbd_t *kbd = (xtkbd_t *) priv; - - timer_advance_u64(&kbd->send_delay_timer, 1000 * TIMER_USEC); - - if (!(kbd->pb & 0x40) && (kbd->type != KBD_TYPE_TANDY)) - return; - - if (kbd->want_irq) { - kbd->want_irq = 0; - kbd->pa = kbd->key_waiting; - kbd->blocked = 1; - picint(2); -#ifdef ENABLE_KEYBOARD_XT_LOG - kbd_log("XTkbd: kbd_poll(): keyboard_xt : take IRQ\n"); -#endif - } - - if ((key_queue_start != key_queue_end) && !kbd->blocked) { - kbd->key_waiting = key_queue[key_queue_start]; - kbd_log("XTkbd: reading %02X from the key queue at %i\n", - kbd->key_waiting, key_queue_start); - key_queue_start = (key_queue_start + 1) & 0x0f; - kbd->want_irq = 1; - } -} - -static void -kbd_adddata(uint16_t val) -{ - /* Test for T1000 'Fn' key (Right Alt / Right Ctrl) */ - if (is_t1x00) { - if (keyboard_recv(0x138) || keyboard_recv(0x11d)) { /* 'Fn' pressed */ - t1000_syskey(0x00, 0x04, 0x00); /* Set 'Fn' indicator */ - switch (val) { - case 0x45: /* Num Lock => toggle numpad */ - t1000_syskey(0x00, 0x00, 0x10); - break; - case 0x47: /* Home => internal display */ - t1000_syskey(0x40, 0x00, 0x00); - break; - case 0x49: /* PgDn => turbo on */ - t1000_syskey(0x80, 0x00, 0x00); - break; - case 0x4D: /* Right => toggle LCD font */ - t1000_syskey(0x00, 0x00, 0x20); - break; - case 0x4F: /* End => external display */ - t1000_syskey(0x00, 0x40, 0x00); - break; - case 0x51: /* PgDn => turbo off */ - t1000_syskey(0x00, 0x80, 0x00); - break; - case 0x54: /* SysRQ => toggle window */ - t1000_syskey(0x00, 0x00, 0x08); - break; - - default: - break; - } - } else - t1000_syskey(0x04, 0x00, 0x00); /* Reset 'Fn' indicator */ - } - - key_queue[key_queue_end] = val; - kbd_log("XTkbd: %02X added to key queue at %i\n", - val, key_queue_end); - key_queue_end = (key_queue_end + 1) & 0x0f; -} - -void -kbd_adddata_process(uint16_t val, void (*adddata)(uint16_t val)) -{ - uint8_t num_lock = 0; - uint8_t shift_states = 0; - - if (!adddata) - return; - - keyboard_get_states(NULL, &num_lock, NULL, NULL); - shift_states = keyboard_get_shift() & STATE_LSHIFT; - - if (is_amstrad) - num_lock = !num_lock; - - /* If NumLock is on, invert the left shift state so we can always check for - the the same way flag being set (and with NumLock on that then means it - is actually *NOT* set). */ - if (num_lock) - shift_states ^= STATE_LSHIFT; - - switch (val) { - case FAKE_LSHIFT_ON: - /* If NumLock is on, fake shifts are sent when shift is *NOT* presed, - if NumLock is off, fake shifts are sent when shift is pressed. */ - if (shift_states) { - /* Send fake shift. */ - adddata(num_lock ? 0x2a : 0xaa); - } - break; - case FAKE_LSHIFT_OFF: - if (shift_states) { - /* Send fake shift. */ - adddata(num_lock ? 0xaa : 0x2a); - } - break; - default: - adddata(val); - break; - } -} - -static void -kbd_adddata_ex(uint16_t val) -{ - kbd_adddata_process(val, kbd_adddata); -} - -static void -kbd_write(uint16_t port, uint8_t val, void *priv) -{ - xtkbd_t *kbd = (xtkbd_t *) priv; - uint8_t bit; - uint8_t set; - uint8_t new_clock; - - switch (port) { - case 0x61: /* Keyboard Control Register (aka Port B) */ - if (!(val & 0x80) || (kbd->type == KBD_TYPE_HYUNDAI)) { - new_clock = !!(val & 0x40); - if (!kbd->clock && new_clock) { - key_queue_start = key_queue_end = 0; - kbd->want_irq = 0; - kbd->blocked = 0; - kbd_adddata(0xaa); - } - } - - kbd->pb = val; - if (!(kbd->pb & 0x80) || (kbd->type == KBD_TYPE_HYUNDAI)) - kbd->clock = !!(kbd->pb & 0x40); - ppi.pb = val; - - timer_process(); - - if (((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82) || - (kbd->type == KBD_TYPE_PRAVETZ)) && (cassette != NULL)) - pc_cas_set_motor(cassette, (kbd->pb & 0x08) == 0); - - speaker_update(); - - speaker_gated = val & 1; - speaker_enable = val & 2; - - if (speaker_enable) - was_speaker_enable = 1; - pit_devs[0].set_gate(pit_devs[0].data, 2, val & 1); - - if (val & 0x80) { - kbd->pa = 0; - kbd->blocked = 0; - picintc(2); - } - -#ifdef ENABLE_KEYBOARD_XT_LOG - if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82) || (kbd->type == KBD_TYPE_PRAVETZ)) - kbd_log("XTkbd: Cassette motor is %s\n", !(val & 0x08) ? "ON" : "OFF"); -#endif - break; - - case 0x62: /* Switch Register (aka Port C) */ -#ifdef ENABLE_KEYBOARD_XT_LOG - if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82) || (kbd->type == KBD_TYPE_PRAVETZ)) - kbd_log("XTkbd: Cassette IN is %i\n", !!(val & 0x10)); -#endif - if (kbd->type == KBD_TYPE_FE2010) { - kbd_log("XTkbd: Switch register in is %02X\n", val); - if (!(kbd->cfg & 0x08)) - kbd->pd = (kbd->pd & 0x30) | (val & 0xcf); - } - break; - - case 0x63: - if (kbd->type == KBD_TYPE_FE2010) { - kbd_log("XTkbd: Configuration register in is %02X\n", val); - if (!(kbd->cfg & 0x08)) - kbd->cfg = val; - } - break; - - case 0xc0 ... 0xcf: /* Pravetz Flags */ - kbd_log("XTkbd: Port %02X out: %02X\n", port, val); - if (kbd->type == KBD_TYPE_PRAVETZ) { - bit = (port >> 1) & 0x07; - set = (port & 0x01) << bit; - kbd->pravetz_flags = (kbd->pravetz_flags & ~(1 << bit)) | set; - } - break; - - case 0x1f0: - kbd_log("XTkbd: Port %04X out: %02X\n", port, val); - if (kbd->type == KBD_TYPE_VTECH) { - kbd->cpu_speed = val; - cpu_dynamic_switch(kbd->cpu_speed >> 7); - } - break; - - default: - break; - } -} - -static uint8_t -kbd_read(uint16_t port, void *priv) -{ - const xtkbd_t *kbd = (xtkbd_t *) priv; - uint8_t ret = 0xff; - - switch (port) { - case 0x60: /* Keyboard Data Register (aka Port A) */ - if ((kbd->pb & 0x80) && ((kbd->type == KBD_TYPE_PC81) || - (kbd->type == KBD_TYPE_PC82) || (kbd->type == KBD_TYPE_PRAVETZ) || - (kbd->type == KBD_TYPE_XT82) || (kbd->type == KBD_TYPE_XT86) || - (kbd->type == KBD_TYPE_XTCLONE) || (kbd->type == KBD_TYPE_COMPAQ) || - (kbd->type == KBD_TYPE_ZENITH) || (kbd->type == KBD_TYPE_HYUNDAI) || - (kbd->type == KBD_TYPE_VTECH))) { - if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82) || - (kbd->type == KBD_TYPE_XTCLONE) || (kbd->type == KBD_TYPE_COMPAQ) || - (kbd->type == KBD_TYPE_PRAVETZ) || (kbd->type == KBD_TYPE_HYUNDAI)) - ret = (kbd->pd & ~0x02) | (hasfpu ? 0x02 : 0x00); - else if ((kbd->type == KBD_TYPE_XT82) || (kbd->type == KBD_TYPE_XT86) || - (kbd->type == KBD_TYPE_VTECH)) - /* According to Ruud on the PCem forum, this is supposed to - return 0xFF on the XT. */ - ret = 0xff; - else if (kbd->type == KBD_TYPE_ZENITH) { - /* Zenith Data Systems Z-151 - * SW1 switch settings: - * bits 6-7: floppy drive number - * bits 4-5: video mode - * bit 2-3: base memory size - * bit 1: fpu enable - * bit 0: fdc enable - */ - ret = get_fdd_switch_settings(); - - ret |= get_videomode_switch_settings(); - - /* Base memory size should always be 64k */ - ret |= 0x0c; - - if (hasfpu) - ret |= 0x02; - } - } else - ret = kbd->pa; - break; - - case 0x61: /* Keyboard Control Register (aka Port B) */ - ret = kbd->pb; - break; - - case 0x62: /* Switch Register (aka Port C) */ - if (kbd->type == KBD_TYPE_FE2010) { - if (kbd->pb & 0x04) /* PB2 */ - ret = (kbd->pd & 0x0d) | (hasfpu ? 0x02 : 0x00); - else - ret = kbd->pd >> 4; - } else if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82) || - (kbd->type == KBD_TYPE_PRAVETZ)) { - if (kbd->pb & 0x04) /* PB2 */ - switch (mem_size + isa_mem_size) { - case 64: - case 48: - case 32: - case 16: - ret = 0x00; - break; - default: - ret = (((mem_size + isa_mem_size) - 64) / 32) & 0x0f; - break; - } - else - ret = (((mem_size + isa_mem_size) - 64) / 32) >> 4; - } else if ((kbd->type == KBD_TYPE_OLIVETTI) || - (kbd->type == KBD_TYPE_ZENITH)) { - /* Olivetti M19 or Zenith Data Systems Z-151 */ - if (kbd->pb & 0x04) /* PB2 */ - ret = kbd->pd & 0xbf; - else - ret = kbd->pd >> 4; - } else { - if (kbd->pb & 0x08) /* PB3 */ - ret = kbd->pd >> 4; - else - ret = (kbd->pd & 0x0d) | (hasfpu ? 0x02 : 0x00); - } - ret |= (ppispeakon ? 0x20 : 0); - - /* This is needed to avoid error 131 (cassette error). - This is serial read: bit 5 = clock, bit 4 = data, cassette header is 256 x 0xff. */ - if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82) || - (kbd->type == KBD_TYPE_PRAVETZ)) { - if (cassette == NULL) - ret |= (ppispeakon ? 0x10 : 0); - else - ret |= (pc_cas_get_inp(cassette) ? 0x10 : 0); - } - - if (kbd->type == KBD_TYPE_TANDY) - ret |= (tandy1k_eeprom_read() ? 0x10 : 0); - break; - - case 0x63: /* Keyboard Configuration Register (aka Port D) */ - if ((kbd->type == KBD_TYPE_XT82) || (kbd->type == KBD_TYPE_XT86) || - (kbd->type == KBD_TYPE_XTCLONE) || (kbd->type == KBD_TYPE_COMPAQ) || - (kbd->type == KBD_TYPE_TOSHIBA) || (kbd->type == KBD_TYPE_HYUNDAI) || - (kbd->type == KBD_TYPE_VTECH)) - ret = kbd->pd; - break; - - case 0xc0: /* Pravetz Flags */ - if (kbd->type == KBD_TYPE_PRAVETZ) - ret = kbd->pravetz_flags; - kbd_log("XTkbd: Port %02X in : %02X\n", port, ret); - break; - - case 0x1f0: - if (kbd->type == KBD_TYPE_VTECH) - ret = kbd->cpu_speed; - kbd_log("XTkbd: Port %04X in : %02X\n", port, ret); - break; - - default: - break; - } - - return ret; -} - -static void -kbd_reset(void *priv) -{ - xtkbd_t *kbd = (xtkbd_t *) priv; - - kbd->want_irq = 0; - kbd->blocked = 0; - kbd->pa = 0x00; - kbd->pb = 0x00; - kbd->pravetz_flags = 0x00; - - keyboard_scan = 1; - - key_queue_start = 0; - key_queue_end = 0; -} - -void -keyboard_set_is_amstrad(int ams) -{ - is_amstrad = ams; -} +typedef struct { + int type; +} kbd_t; static void * kbd_init(const device_t *info) { - xtkbd_t *kbd; + kbd_t *dev = (kbd_t *) calloc(1, sizeof(kbd_t)); - kbd = (xtkbd_t *) calloc(1, sizeof(xtkbd_t)); + dev->type = info->local; - io_sethandler(0x0060, 4, - kbd_read, NULL, NULL, kbd_write, NULL, NULL, kbd); - keyboard_send = kbd_adddata_ex; - kbd->type = info->local; - if (kbd->type == KBD_TYPE_VTECH) - kbd->cpu_speed = (!!cpu) << 2; - kbd_reset(kbd); - if (kbd->type == KBD_TYPE_PRAVETZ) - io_sethandler(0x00c0, 16, - kbd_read, NULL, NULL, kbd_write, NULL, NULL, kbd); - if (kbd->type == KBD_TYPE_VTECH) - io_sethandler(0x01f0, 1, - kbd_read, NULL, NULL, kbd_write, NULL, NULL, kbd); + if (dev->type == KBD_83_KEY) + keyboard_set_table(scancode_xt); + else + keyboard_set_table(scancode_set1); - key_queue_start = key_queue_end = 0; - - video_reset(gfxcard[0]); - - if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82) || - (kbd->type == KBD_TYPE_PRAVETZ) || (kbd->type == KBD_TYPE_XT82) || - (kbd->type <= KBD_TYPE_XT86) || (kbd->type == KBD_TYPE_XTCLONE) || - (kbd->type == KBD_TYPE_COMPAQ) || (kbd->type == KBD_TYPE_TOSHIBA) || - (kbd->type == KBD_TYPE_OLIVETTI) || (kbd->type == KBD_TYPE_HYUNDAI) || - (kbd->type == KBD_TYPE_VTECH) || (kbd->type == KBD_TYPE_FE2010)) { - /* DIP switch readout: bit set = OFF, clear = ON. */ - if (kbd->type == KBD_TYPE_OLIVETTI) - /* Olivetti M19 - * Jumpers J1, J2 - monitor type. - * 01 - mono (high-res) - * 10 - color (low-res, disables 640x400x2 mode) - * 00 - autoswitching - */ - kbd->pd |= 0x00; - else - /* Switches 7, 8 - floppy drives. */ - kbd->pd = get_fdd_switch_settings(); - - /* Switches 5, 6 - video card type */ - kbd->pd |= get_videomode_switch_settings(); - - /* Switches 3, 4 - memory size. */ - if ((kbd->type == KBD_TYPE_XT86) || (kbd->type == KBD_TYPE_XTCLONE) || - (kbd->type == KBD_TYPE_HYUNDAI) || (kbd->type == KBD_TYPE_COMPAQ) || - (kbd->type == KBD_TYPE_TOSHIBA) || (kbd->type == KBD_TYPE_FE2010)) { - switch (mem_size) { - case 256: - kbd->pd |= 0x00; - break; - case 512: - kbd->pd |= 0x04; - break; - case 576: - kbd->pd |= 0x08; - break; - case 640: - default: - kbd->pd |= 0x0c; - break; - } - } else if ((kbd->type == KBD_TYPE_XT82) || (kbd->type == KBD_TYPE_VTECH)) { - switch (mem_size) { - case 64: /* 1x64k */ - kbd->pd |= 0x00; - break; - case 128: /* 2x64k */ - kbd->pd |= 0x04; - break; - case 192: /* 3x64k */ - kbd->pd |= 0x08; - break; - case 256: /* 4x64k */ - default: - kbd->pd |= 0x0c; - break; - } - } else if (kbd->type == KBD_TYPE_PC82) { - switch (mem_size) { -#ifdef PC82_192K_3BANK - case 192: /* 3x64k, not supported by stock BIOS due to bugs */ - kbd->pd |= 0x08; - break; -#else - case 192: /* 2x64k + 2x32k */ -#endif - case 64: /* 4x16k */ - case 96: /* 2x32k + 2x16k */ - case 128: /* 4x32k */ - case 160: /* 2x64k + 2x16k */ - case 224: /* 3x64k + 1x32k */ - case 256: /* 4x64k */ - default: - kbd->pd |= 0x0c; - break; - } - } else { /* really just the PC '81 */ - switch (mem_size) { - case 16: /* 1x16k */ - kbd->pd |= 0x00; - break; - case 32: /* 2x16k */ - kbd->pd |= 0x04; - break; - case 48: /* 3x16k */ - kbd->pd |= 0x08; - break; - case 64: /* 4x16k */ - default: - kbd->pd |= 0x0c; - break; - } - } - - /* Switch 2 - 8087 FPU. */ - if (hasfpu) - kbd->pd |= 0x02; - } else if (kbd->type == KBD_TYPE_ZENITH) { - /* Zenith Data Systems Z-151 - * SW2 switch settings: - * bit 7: monitor frequency - * bits 5-6: autoboot (00-11 resident monitor, 10 hdd, 01 fdd) - * bits 0-4: installed memory - */ - kbd->pd = 0x20; - switch (mem_size) { - case 128: - kbd->pd |= 0x02; - break; - case 192: - kbd->pd |= 0x04; - break; - case 256: - kbd->pd |= 0x06; - break; - case 320: - kbd->pd |= 0x08; - break; - case 384: - kbd->pd |= 0x0a; - break; - case 448: - kbd->pd |= 0x0c; - break; - case 512: - kbd->pd |= 0x0e; - break; - case 576: - kbd->pd |= 0x10; - break; - case 640: - default: - kbd->pd |= 0x12; - break; - } - } - - timer_add(&kbd->send_delay_timer, kbd_poll, kbd, 1); - - keyboard_set_table(scancode_xt); - - is_tandy = (kbd->type == KBD_TYPE_TANDY); - is_t1x00 = (kbd->type == KBD_TYPE_TOSHIBA); - - is_amstrad = 0; - - return kbd; + return dev; } static void kbd_close(void *priv) { - xtkbd_t *kbd = (xtkbd_t *) priv; - - /* Stop the timer. */ - timer_disable(&kbd->send_delay_timer); - - /* Disable scanning. */ - keyboard_scan = 0; - - keyboard_send = NULL; - - io_removehandler(0x0060, 4, - kbd_read, NULL, NULL, kbd_write, NULL, NULL, kbd); + kbd_t *kbd = (kbd_t *) priv; free(kbd); } -const device_t keyboard_pc_device = { - .name = "IBM PC Keyboard (1981)", - .internal_name = "keyboard_pc", - .flags = 0, - .local = KBD_TYPE_PC81, - .init = kbd_init, - .close = kbd_close, - .reset = kbd_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL +static const device_config_t keyboard_pc_xt_config[] = { + // clang-format off + { + .name = "keys", + .description = "Keys", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = KBD_83_KEY, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "83", .value = KBD_83_KEY }, + { .description = "101 (ANSI)", .value = KBD_101_KEY }, + { .description = "102 (ISO)", .value = KBD_102_KEY } + }, + .bios = { { 0 } } + }, + { + .name = "", .description = "", .type = CONFIG_END + } + // clang-format on }; -const device_t keyboard_pc82_device = { - .name = "IBM PC Keyboard (1982)", - .internal_name = "keyboard_pc82", - .flags = 0, - .local = KBD_TYPE_PC82, +const device_t keyboard_pc_xt_device = { + .name = "PC/XT Keyboard", + .internal_name = "keyboard_pc_xt", + .flags = DEVICE_XT_KBC, + .local = 0, .init = kbd_init, .close = kbd_close, - .reset = kbd_reset, + .reset = NULL, .available = NULL, .speed_changed = NULL, .force_redraw = NULL, - .config = NULL -}; - -const device_t keyboard_pravetz_device = { - .name = "Pravetz Keyboard", - .internal_name = "keyboard_pravetz", - .flags = 0, - .local = KBD_TYPE_PRAVETZ, - .init = kbd_init, - .close = kbd_close, - .reset = kbd_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t keyboard_xt_device = { - .name = "XT (1982) Keyboard", - .internal_name = "keyboard_xt", - .flags = 0, - .local = KBD_TYPE_XT82, - .init = kbd_init, - .close = kbd_close, - .reset = kbd_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t keyboard_xt86_device = { - .name = "XT (1986) Keyboard", - .internal_name = "keyboard_xt86", - .flags = 0, - .local = KBD_TYPE_XT86, - .init = kbd_init, - .close = kbd_close, - .reset = kbd_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t keyboard_xt_compaq_device = { - .name = "Compaq Portable Keyboard", - .internal_name = "keyboard_xt_compaq", - .flags = 0, - .local = KBD_TYPE_COMPAQ, - .init = kbd_init, - .close = kbd_close, - .reset = kbd_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t keyboard_tandy_device = { - .name = "Tandy 1000 Keyboard", - .internal_name = "keyboard_tandy", - .flags = 0, - .local = KBD_TYPE_TANDY, - .init = kbd_init, - .close = kbd_close, - .reset = kbd_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t keyboard_xt_t1x00_device = { - .name = "Toshiba T1x00 Keyboard", - .internal_name = "keyboard_xt_t1x00", - .flags = 0, - .local = KBD_TYPE_TOSHIBA, - .init = kbd_init, - .close = kbd_close, - .reset = kbd_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t keyboard_xt_lxt3_device = { - .name = "VTech Laser Turbo XT Keyboard", - .internal_name = "keyboard_xt_lxt", - .flags = 0, - .local = KBD_TYPE_VTECH, - .init = kbd_init, - .close = kbd_close, - .reset = kbd_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t keyboard_xt_olivetti_device = { - .name = "Olivetti XT Keyboard", - .internal_name = "keyboard_xt_olivetti", - .flags = 0, - .local = KBD_TYPE_OLIVETTI, - .init = kbd_init, - .close = kbd_close, - .reset = kbd_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t keyboard_xt_zenith_device = { - .name = "Zenith XT Keyboard", - .internal_name = "keyboard_xt_zenith", - .flags = 0, - .local = KBD_TYPE_ZENITH, - .init = kbd_init, - .close = kbd_close, - .reset = kbd_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t keyboard_xt_hyundai_device = { - .name = "Hyundai XT Keyboard", - .internal_name = "keyboard_xt_hyundai", - .flags = 0, - .local = KBD_TYPE_HYUNDAI, - .init = kbd_init, - .close = kbd_close, - .reset = kbd_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t keyboard_xt_fe2010_device = { - .name = "Faraday FE2010 XT Keyboard", - .internal_name = "keyboard_xt_fe2010", - .flags = 0, - .local = KBD_TYPE_FE2010, - .init = kbd_init, - .close = kbd_close, - .reset = kbd_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t keyboard_xtclone_device = { - .name = "XT (Clone) Keyboard", - .internal_name = "keyboard_xtclone", - .flags = 0, - .local = KBD_TYPE_XTCLONE, - .init = kbd_init, - .close = kbd_close, - .reset = kbd_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL + .config = keyboard_pc_xt_config }; diff --git a/src/device/mouse_serial.c b/src/device/mouse_serial.c index 7310b0e6d..45750ef09 100644 --- a/src/device/mouse_serial.c +++ b/src/device/mouse_serial.c @@ -480,7 +480,7 @@ ltsermouse_update_report_period(mouse_t *dev) } static void -ltsermouse_switch_baud_rate(mouse_t *dev, int next_state) +ltsermouse_switch_baud_rate(mouse_t *dev, int next_state, int prompt_off) { double word_lens[FORMATS_NUM] = { [FORMAT_BP1_ABS] = 7.0 + 1.0, /* 7 data bits + even parity */ @@ -517,7 +517,7 @@ ltsermouse_switch_baud_rate(mouse_t *dev, int next_state) ltsermouse_set_report_period(dev, dev->rps); if (!dev->continuous && (next_state != STATE_BAUD_RATE)) { - if (dev->prompt) + if (dev->prompt && prompt_off) ltsermouse_set_prompt_mode(dev, 0); sermouse_transmit_report(dev, 0); @@ -569,7 +569,7 @@ ltsermouse_process_command(mouse_t *dev) dev->buf[0] = 0x06; sermouse_transmit(dev, 1, 0, 0); - ltsermouse_switch_baud_rate(dev, STATE_BAUD_RATE); + ltsermouse_switch_baud_rate(dev, STATE_BAUD_RATE, 0); break; case 0x4a: /* Report Rate Selection commands */ @@ -614,7 +614,7 @@ ltsermouse_process_command(mouse_t *dev) case 0x58: /* Microsoft Compatible Format (3+1 byte 3-button, from the FreeBSD source code) */ if ((dev->rev >= 0x02) && ((dev->command != 0x58) || (dev->rev > 0x04))) { dev->format = dev->command & 0x1f; - ltsermouse_switch_baud_rate(dev, sermouse_next_state(dev)); + ltsermouse_switch_baud_rate(dev, sermouse_next_state(dev), 0); } break; @@ -706,7 +706,7 @@ ltsermouse_process_data(mouse_t *dev) dev->bps = 9600; break; } - ltsermouse_switch_baud_rate(dev, (dev->prompt || dev->continuous) ? STATE_IDLE : STATE_TRANSMIT_REPORT); + ltsermouse_switch_baud_rate(dev, (dev->prompt || dev->continuous) ? STATE_IDLE : STATE_TRANSMIT_REPORT, 0); break; default: dev->state = STATE_IDLE; @@ -744,7 +744,7 @@ sermouse_reset(mouse_t *dev, int callback) break; } - ltsermouse_switch_baud_rate(dev, callback ? STATE_TRANSMIT : STATE_IDLE); + ltsermouse_switch_baud_rate(dev, callback ? STATE_TRANSMIT : STATE_IDLE, 1); } static void diff --git a/src/disk/CMakeLists.txt b/src/disk/CMakeLists.txt index 48d9e61ff..1cccfe2da 100644 --- a/src/disk/CMakeLists.txt +++ b/src/disk/CMakeLists.txt @@ -37,7 +37,7 @@ add_library(hdd OBJECT hdc_ide_w83769f.c ) -add_library(zip OBJECT zip.c) +add_library(rdisk OBJECT rdisk.c) add_library(mo OBJECT mo.c) diff --git a/src/disk/hdc.c b/src/disk/hdc.c index 05691b77f..135528401 100644 --- a/src/disk/hdc.c +++ b/src/disk/hdc.c @@ -79,6 +79,8 @@ static const struct { { &xtide_at_2ch_device }, { &xtide_at_ps2_device }, { &xtide_at_ps2_2ch_device }, + { &ide_ter_device }, + { &ide_qua_device }, { &st506_at_wd1003_device }, { &esdi_at_wd1007vse1_device }, /* MCA */ @@ -89,6 +91,9 @@ static const struct { { &ide_vlb_device }, { &ide_vlb_2ch_device }, /* PCI */ + { &ide_cmd646_ter_qua_device }, + { &ide_cmd648_ter_qua_device }, + { &ide_cmd649_ter_qua_device }, { &ide_pci_device }, { &ide_pci_2ch_device }, { NULL } @@ -109,18 +114,14 @@ hdc_init(void) void hdc_reset(void) { - hdc_log("HDC: reset(current=%d, internal=%d)\n", - hdc_current[0], (machines[machine].flags & MACHINE_HDC) ? 1 : 0); + for (int i = 0; i < HDC_MAX; i++) { + hdc_log("HDC %i: reset(current=%d, internal=%d)\n", i, + hdc_current[i], hdc_current[i] == HDC_INTERNAL); - /* If we have a valid controller, add its device. */ - if (hdc_current[0] > HDC_INTERNAL) - device_add(controllers[hdc_current[0]].device); - - /* Now, add the tertiary and/or quaternary IDE controllers. */ - if (ide_ter_enabled) - device_add(&ide_ter_device); - if (ide_qua_enabled) - device_add(&ide_qua_device); + /* If we have a valid controller, add its device. */ + if (hdc_current[i] > HDC_INTERNAL) + device_add_inst(controllers[hdc_current[i]].device, i + 1); + } } const char * @@ -130,7 +131,7 @@ hdc_get_internal_name(int hdc) } int -hdc_get_from_internal_name(char *s) +hdc_get_from_internal_name(const char *s) { int c = 0; diff --git a/src/disk/hdc_ide.c b/src/disk/hdc_ide.c index d725b2ace..367a6f3ac 100644 --- a/src/disk/hdc_ide.c +++ b/src/disk/hdc_ide.c @@ -46,7 +46,7 @@ #include <86box/hdc.h> #include <86box/hdc_ide.h> #include <86box/hdd.h> -#include <86box/zip.h> +#include <86box/rdisk.h> #include <86box/version.h> /* Bits of 'atastat' */ @@ -234,9 +234,7 @@ static uint8_t ide_qua_pnp_rom[] = { 0x79, 0x00 }; -ide_t *ide_drives[IDE_NUM]; -int ide_ter_enabled = 0; -int ide_qua_enabled = 0; +ide_t *ide_drives[IDE_NUM] = { 0 }; static void ide_atapi_callback(ide_t *ide); static void ide_callback(void *priv); @@ -2828,20 +2826,23 @@ ide_board_close(int board) ide_log("ide_board_close(%i)\n", board); - if ((ide_boards[board] == NULL) || !ide_boards[board]->inited) + if (ide_boards[board] == NULL) return; ide_log("IDE: Closing board %i...\n", board); - timer_stop(&ide_boards[board]->timer); + if (ide_boards[board]->inited) { + timer_stop(&ide_boards[board]->timer); - ide_clear_bus_master(board); + ide_clear_bus_master(board); + } /* Close hard disk image files (if previously open) */ for (uint8_t d = 0; d < 2; d++) { c = (board << 1) + d; - ide_boards[board]->ide[d] = NULL; + if (ide_boards[board]->inited) + ide_boards[board]->ide[d] = NULL; dev = ide_drives[c]; @@ -3265,6 +3266,16 @@ ide_close(UNUSED(void *priv)) } } +void +ide_hard_reset(void) +{ + for (int i = 0; i < IDE_BUS_MAX; i++) + ide_boards[i] = NULL; + + for (int i = 0; i < IDE_NUM; i++) + ide_drives[i] = NULL; +} + static uint8_t mcide_mca_read(const int port, void *priv) { diff --git a/src/disk/hdc_ide_cmd640.c b/src/disk/hdc_ide_cmd640.c index 84a40efa4..9674063d2 100644 --- a/src/disk/hdc_ide_cmd640.c +++ b/src/disk/hdc_ide_cmd640.c @@ -34,7 +34,7 @@ #include <86box/hdc.h> #include <86box/hdc_ide.h> #include <86box/hdc_ide_sff8038i.h> -#include <86box/zip.h> +#include <86box/rdisk.h> #include <86box/mo.h> typedef struct cmd640_t { @@ -417,10 +417,10 @@ cmd640_reset(void *priv) (cdrom[i].ide_channel <= max_channel) && cdrom[i].priv) scsi_cdrom_reset((scsi_common_t *) cdrom[i].priv); } - for (i = 0; i < ZIP_NUM; i++) { - if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) && (zip_drives[i].ide_channel >= min_channel) && - (zip_drives[i].ide_channel <= max_channel) && zip_drives[i].priv) - zip_reset((scsi_common_t *) zip_drives[i].priv); + for (i = 0; i < RDISK_NUM; i++) { + if ((rdisk_drives[i].bus_type == RDISK_BUS_ATAPI) && (rdisk_drives[i].ide_channel >= min_channel) && + (rdisk_drives[i].ide_channel <= max_channel) && rdisk_drives[i].priv) + rdisk_reset((scsi_common_t *) rdisk_drives[i].priv); } for (i = 0; i < MO_NUM; i++) { if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && (mo_drives[i].ide_channel >= min_channel) && @@ -667,7 +667,7 @@ const device_t ide_cmd640_pci_legacy_only_device = { }; const device_t ide_cmd640_pci_single_channel_device = { - .name = "CMD PCI-0640B PCI", + .name = "CMD PCI-0640B PCI (Single Channel)", .internal_name = "ide_cmd640_pci_single_channel", .flags = DEVICE_PCI, .local = 0x2000a, @@ -681,7 +681,7 @@ const device_t ide_cmd640_pci_single_channel_device = { }; const device_t ide_cmd640_pci_single_channel_sec_device = { - .name = "CMD PCI-0640B PCI", + .name = "CMD PCI-0640B PCI (Single Channel, Secondary)", .internal_name = "ide_cmd640_pci_single_channel_sec", .flags = DEVICE_PCI, .local = 0x4000a, diff --git a/src/disk/hdc_ide_cmd646.c b/src/disk/hdc_ide_cmd646.c index a61b78ec3..7929db53a 100644 --- a/src/disk/hdc_ide_cmd646.c +++ b/src/disk/hdc_ide_cmd646.c @@ -34,8 +34,26 @@ #include <86box/hdc.h> #include <86box/hdc_ide.h> #include <86box/hdc_ide_sff8038i.h> -#include <86box/zip.h> +#include <86box/rdisk.h> +#include <86box/rom.h> +#include <86box/hdd.h> +#include <86box/scsi_disk.h> #include <86box/mo.h> +#include "cpu.h" +#include "x86.h" + +#define CMD_TYPE_646 0x0000000 +#define CMD_TYPE_648 0x0100000 +#define CMD_TYPE_649 0x0200000 + +#define CMD648_JP7 0x0400000 /* Reload subsystem ID on reset. */ +#define CMD648_RAID 0x0800000 + +#define CMD64X_ONBOARD 0x1000000 + +#define CMD648_BIOS_FILE "roms/hdd/ide/648_1910.bin" +#define CMD649_REV_1914_BIOS_FILE "roms/hdd/ide/649_1914.bin" +#define CMD649_REV_2301_BIOS_FILE "roms/hdd/ide/649_2301.bin" typedef struct cmd646_t { uint8_t vlb_idx; @@ -46,11 +64,17 @@ typedef struct cmd646_t { uint8_t regs[256]; uint32_t local; + uint32_t rom_addr; + uint32_t rom_addr_size; + uint32_t rom_addr_mask; int irq_pin; + int has_bios; int irq_mode[2]; + rom_t bios_rom; + sff8038i_t *bm[2]; } cmd646_t; @@ -80,7 +104,8 @@ cmd646_set_irq_0(uint8_t status, void *priv) if (!(dev->regs[0x50] & 0x04) || (status & 0x04)) dev->regs[0x50] = (dev->regs[0x50] & ~0x04) | status; - sff_bus_master_set_irq(status, dev->bm[0]); + if (!(dev->local & CMD_TYPE_648) || !(dev->regs[0x71] & 0x10)) + sff_bus_master_set_irq(status, dev->bm[0]); } static void @@ -91,7 +116,8 @@ cmd646_set_irq_1(uint8_t status, void *priv) if (!(dev->regs[0x57] & 0x10) || (status & 0x04)) dev->regs[0x57] = (dev->regs[0x57] & ~0x10) | (status << 2); - sff_bus_master_set_irq(status, dev->bm[1]); + if (!(dev->local & CMD_TYPE_648) || !(dev->regs[0x71] & 0x20)) + sff_bus_master_set_irq(status, dev->bm[1]); } static int @@ -116,13 +142,24 @@ cmd646_ide_handlers(cmd646_t *dev) uint16_t main; uint16_t side; int irq_mode[2] = { IRQ_MODE_LEGACY, IRQ_MODE_LEGACY }; + int first = 0; + int reg09 = dev->regs[0x09]; + int reg50 = dev->regs[0x50]; + + if ((dev->local & CMD_TYPE_648) && (dev->regs[0x0a] == 0x04) && (dev->regs[0x0b] == 0x01)) { + reg09 = 0xff; + reg50 |= 0x40; + } + + if (dev->local & 0x80000) + first += 2; sff_set_slot(dev->bm[0], dev->pci_slot); sff_set_slot(dev->bm[1], dev->pci_slot); - ide_pri_disable(); + ide_handlers(first, 0); - if ((dev->regs[0x09] & 0x01) && (dev->regs[0x50] & 0x40)) { + if ((reg09 & 0x01) && (reg50 & 0x40)) { main = (dev->regs[0x11] << 8) | (dev->regs[0x10] & 0xf8); side = ((dev->regs[0x15] << 8) | (dev->regs[0x14] & 0xfc)) + 2; } else { @@ -130,23 +167,28 @@ cmd646_ide_handlers(cmd646_t *dev) side = 0x3f6; } - ide_set_base(0, main); - ide_set_side(0, side); + ide_set_base(first, main); + ide_set_side(first, side); - if (dev->regs[0x09] & 0x01) + if (reg09 & 0x01) irq_mode[0] = IRQ_MODE_PCI_IRQ_PIN; sff_set_irq_mode(dev->bm[0], irq_mode[0]); + cmd646_log("IDE %i: %04X, %04X, %i\n", first, main, side, irq_mode[0]); - if (dev->regs[0x04] & 0x01) - ide_pri_enable(); + int pri_enabled = (dev->regs[0x04] & 0x01); + if (dev->local & CMD_TYPE_648) + pri_enabled = pri_enabled && (dev->regs[0x51] & 0x04); + + if (pri_enabled) + ide_handlers(first, 1); if (dev->single_channel) return; - ide_sec_disable(); + ide_handlers(first + 1, 0); - if ((dev->regs[0x09] & 0x04) && (dev->regs[0x50] & 0x40)) { + if ((reg09 & 0x04) && (reg50 & 0x40)) { main = (dev->regs[0x19] << 8) | (dev->regs[0x18] & 0xf8); side = ((dev->regs[0x1d] << 8) | (dev->regs[0x1c] & 0xfc)) + 2; } else { @@ -154,16 +196,17 @@ cmd646_ide_handlers(cmd646_t *dev) side = 0x376; } - ide_set_base(1, main); - ide_set_side(1, side); + ide_set_base(first + 1, main); + ide_set_side(first + 1, side); - if (dev->regs[0x09] & 0x04) - irq_mode[1] = 1; + if (reg09 & 0x04) + irq_mode[1] = IRQ_MODE_PCI_IRQ_PIN; sff_set_irq_mode(dev->bm[1], irq_mode[1]); + cmd646_log("IDE %i: %04X, %04X, %i\n", first + 1, main, side, irq_mode[1]); if ((dev->regs[0x04] & 0x01) && (dev->regs[0x51] & 0x08)) - ide_sec_enable(); + ide_handlers(first + 1, 1); } static void @@ -175,74 +218,176 @@ cmd646_ide_bm_handlers(cmd646_t *dev) sff_bus_master_handler(dev->bm[1], (dev->regs[0x04] & 1), base + 8); } +uint8_t +cmd646_bm_write(uint16_t port, uint8_t val, void *priv) +{ + cmd646_t *dev = (cmd646_t *) priv; + uint8_t ret = val; + + switch (port & 0x000f) { + case 0x0001: + dev->regs[(port & 0x000f) | 0x70] = val & 0xf0; + if (val & 0x04) + dev->regs[0x50] &= ~0x04; + if (val & 0x08) + dev->regs[0x57] &= ~0x10; + ret &= 0x03; + break; + case 0x0003: + dev->regs[0x73] = val; + break; + case 0x0009: + dev->regs[(port & 0x000f) | 0x70] = (dev->regs[(port & 0x000f) | 0x70] & 0x0f) | (val & 0xf0); + ret &= 0x03; + break; + case 0x000b: + dev->regs[0x7b] = val; + break; + } + + return ret; +} + +uint8_t +cmd646_bm_read(uint16_t port, uint8_t val, void *priv) +{ + cmd646_t *dev = (cmd646_t *) priv; + uint8_t ret = val; + + switch (port & 0x000f) { + case 0x0001: + ret = (dev->regs[(port & 0x000f) | 0x70] & 0xf3) | (dev->regs[0x50] & 0x04) | ((dev->regs[0x57] & 0x10) >> 1); + break; + case 0x0002: case 0x000a: + ret |= 0x08; + break; + case 0x0003: + ret = dev->regs[0x73]; + break; + case 0x0009: + ret = dev->regs[(port & 0x000f) | 0x70]; + break; + case 0x000b: + ret = dev->regs[0x7b]; + break; + } + + return ret; +} + +static void +cmd646_bios_handler(cmd646_t *dev) +{ + if ((dev->local & CMD_TYPE_648) && dev->has_bios) { + uint32_t *addr = (uint32_t *) &(dev->regs[0x30]); + + *addr &= (~dev->rom_addr_mask) | 0x00000001; + dev->rom_addr = *addr & 0xfffffff0; + + cmd646_log("ROM address now: %08X\n", dev->rom_addr); + + if ((dev->regs[0x04] & 0x02) && (*addr & 0x00000001)) + mem_mapping_set_addr(&dev->bios_rom.mapping, dev->rom_addr, dev->rom_addr_size); + else + mem_mapping_disable(&dev->bios_rom.mapping); + } +} + static void cmd646_pci_write(int func, int addr, uint8_t val, void *priv) { - cmd646_t *dev = (cmd646_t *) priv; + cmd646_t *dev = (cmd646_t *) priv; + int reg50 = dev->regs[0x50]; + + if ((dev->local & CMD_TYPE_648) && (dev->regs[0x0a] == 0x04) && (dev->regs[0x0b] == 0x01)) + reg50 |= 0x40; cmd646_log("[%04X:%08X] (%08X) cmd646_pci_write(%i, %02X, %02X)\n", CS, cpu_state.pc, ESI, func, addr, val); if (func == 0x00) switch (addr) { case 0x04: - dev->regs[addr] = (val & 0x45); + if (dev->has_bios) + dev->regs[addr] = (val & 0x47); + else + dev->regs[addr] = (val & 0x45); + cmd646_ide_handlers(dev); + cmd646_ide_bm_handlers(dev); + + cmd646_bios_handler(dev); + break; + case 0x05: + if (dev->local & CMD_TYPE_648) + dev->regs[addr] = (dev->regs[addr] & 0x7e) | (val & 0x01); break; case 0x07: - dev->regs[addr] &= ~(val & 0xb1); + if (dev->local & CMD_TYPE_648) + dev->regs[addr] = ((dev->regs[addr] & ~(val & 0xb9)) & 0xbf) | (val & 0x40); + else + dev->regs[addr] &= ~(val & 0xb1); break; case 0x09: - if ((dev->regs[addr] & 0x0a) == 0x0a) { - dev->regs[addr] = (dev->regs[addr] & 0x0a) | (val & 0x05); - dev->irq_mode[0] = !!(val & 0x01); - dev->irq_mode[1] = !!(val & 0x04); + if (!(dev->local & CMD_TYPE_648) || + ((dev->regs[0x0a] == 0x01) && (dev->regs[0x0b] == 0x01))) { + if ((dev->regs[addr] & 0x0a) == 0x0a) { + dev->regs[addr] = (dev->regs[addr] & 0x8a) | (val & 0x05); + dev->irq_mode[0] = !!(val & 0x01); + dev->irq_mode[1] = !!(val & 0x04); + cmd646_ide_handlers(dev); + } + } + break; + case 0x0a: case 0x0b: + if ((dev->local & CMD_TYPE_648) && (dev->regs[0x4f] & 0x04)) { + dev->regs[addr] = val; cmd646_ide_handlers(dev); } break; case 0x10: - if (dev->regs[0x50] & 0x40) { + if (reg50 & 0x40) { dev->regs[0x10] = (val & 0xf8) | 1; cmd646_ide_handlers(dev); } break; case 0x11: - if (dev->regs[0x50] & 0x40) { + if (reg50 & 0x40) { dev->regs[0x11] = val; cmd646_ide_handlers(dev); } break; case 0x14: - if (dev->regs[0x50] & 0x40) { + if (reg50 & 0x40) { dev->regs[0x14] = (val & 0xfc) | 1; cmd646_ide_handlers(dev); } break; case 0x15: - if (dev->regs[0x50] & 0x40) { + if (reg50 & 0x40) { dev->regs[0x15] = val; cmd646_ide_handlers(dev); } break; case 0x18: - if (dev->regs[0x50] & 0x40) { + if (reg50 & 0x40) { dev->regs[0x18] = (val & 0xf8) | 1; cmd646_ide_handlers(dev); } break; case 0x19: - if (dev->regs[0x50] & 0x40) { + if (reg50 & 0x40) { dev->regs[0x19] = val; cmd646_ide_handlers(dev); } break; case 0x1c: - if (dev->regs[0x50] & 0x40) { + if (reg50 & 0x40) { dev->regs[0x1c] = (val & 0xfc) | 1; cmd646_ide_handlers(dev); } break; case 0x1d: - if (dev->regs[0x50] & 0x40) { + if (reg50 & 0x40) { dev->regs[0x1d] = val; cmd646_ide_handlers(dev); } @@ -255,18 +400,42 @@ cmd646_pci_write(int func, int addr, uint8_t val, void *priv) dev->regs[0x21] = val; cmd646_ide_bm_handlers(dev); break; + case 0x2c ... 0x2f: + case 0x8c ... 0x8f: + if (dev->local & CMD_TYPE_648) + dev->regs[(addr & 0x0f) | 0x20] = val; + break; + case 0x30 ... 0x33: + if ((dev->local & CMD_TYPE_648) && dev->has_bios) { + dev->regs[addr] = val; + cmd646_bios_handler(dev); + } + break; + case 0x3c: + dev->regs[0x3c] = val; + break; + case 0x4f: + if (dev->local & CMD_TYPE_648) + dev->regs[addr] = (dev->regs[addr] & 0xfa) | (val & 0x05); + break; case 0x51: - dev->regs[addr] = val & 0xc8; + if (dev->local & CMD_TYPE_648) + dev->regs[addr] = val & 0xcc; + else + dev->regs[addr] = val & 0xc8; cmd646_ide_handlers(dev); break; case 0x52: case 0x54: case 0x56: case 0x58: - case 0x59: case 0x5b: dev->regs[addr] = val; break; + case 0x59: + if ((dev->local & CMD_TYPE_649) || !(dev->local & CMD_TYPE_648)) + dev->regs[addr] = val; + break; case 0x53: case 0x55: dev->regs[addr] = val & 0xc0; @@ -274,10 +443,32 @@ cmd646_pci_write(int func, int addr, uint8_t val, void *priv) case 0x57: dev->regs[addr] = (dev->regs[addr] & 0x10) | (val & 0xcc); break; - case 0x70 ... 0x77: + case 0x64: + if (dev->local & CMD_TYPE_648) + dev->regs[addr] = (dev->regs[addr] & 0xfc) | (val & 0x03); + break; + case 0x65: + if (dev->local & CMD_TYPE_648) + dev->regs[addr] = (dev->regs[addr] & 0x7f) | (val & 0x80); + break; + case 0x71: + if (dev->local & CMD_TYPE_648) + sff_bus_master_write(addr & 0x0f, val, dev->bm[0]); + else + sff_bus_master_write(addr & 0x0f, val & 0x03, dev->bm[0]); + break; + case 0x70: + case 0x72 ... 0x77: sff_bus_master_write(addr & 0x0f, val, dev->bm[0]); break; - case 0x78 ... 0x7f: + case 0x79: + if (dev->local & CMD_TYPE_648) + sff_bus_master_write(addr & 0x0f, val, dev->bm[1]); + else + sff_bus_master_write(addr & 0x0f, val & 0x03, dev->bm[1]); + break; + case 0x78: + case 0x7a ... 0x7f: sff_bus_master_write(addr & 0x0f, val, dev->bm[1]); break; @@ -295,7 +486,9 @@ cmd646_pci_read(int func, int addr, void *priv) if (func == 0x00) { ret = dev->regs[addr]; - if (addr == 0x50) + if ((addr == 0x09) && (dev->local & CMD_TYPE_648) && (dev->regs[0x0a] == 0x04)) + ret = 0x00; + else if (addr == 0x50) dev->regs[0x50] &= ~0x04; else if (addr == 0x57) dev->regs[0x57] &= ~0x10; @@ -303,6 +496,8 @@ cmd646_pci_read(int func, int addr, void *priv) ret = sff_bus_master_read(addr & 0x0f, dev->bm[0]); else if ((addr >= 0x78) && (addr <= 0x7f)) ret = sff_bus_master_read(addr & 0x0f, dev->bm[1]); + else if ((dev->local & CMD_TYPE_648) && (addr >= 0x8c) && (addr <= 0x8f)) + ret = dev->regs[(addr & 0x0f) | 0x20]; } cmd646_log("[%04X:%08X] (%08X) cmd646_pci_read(%i, %02X, %02X)\n", CS, cpu_state.pc, ESI, func, addr, ret); @@ -310,22 +505,44 @@ cmd646_pci_read(int func, int addr, void *priv) return ret; } +static int +check_ch(cmd646_t *dev, int channel) +{ + int ret = 0; + int min = 0; + int max = dev->single_channel ? 1 : 3; + + if (dev->local & 0x80000) { + min += 4; + max += 4; + } + + if ((channel >= min) && (channel <= max)) + ret = 1; + + return ret; +} + static void cmd646_reset(void *priv) { cmd646_t *dev = (cmd646_t *) priv; int i = 0; + for (i = 0; i < HDD_NUM; i++) { + if ((hdd[i].bus_type == HDD_BUS_ATAPI) && check_ch(dev, hdd[i].ide_channel) && hdd[i].priv) + scsi_disk_reset((scsi_common_t *) hdd[i].priv); + } for (i = 0; i < CDROM_NUM; i++) { - if ((cdrom[i].bus_type == CDROM_BUS_ATAPI) && (cdrom[i].ide_channel < 4) && cdrom[i].priv) + if ((cdrom[i].bus_type == CDROM_BUS_ATAPI) && check_ch(dev, cdrom[i].ide_channel) && cdrom[i].priv) scsi_cdrom_reset((scsi_common_t *) cdrom[i].priv); } - for (i = 0; i < ZIP_NUM; i++) { - if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) && (zip_drives[i].ide_channel < 4) && zip_drives[i].priv) - zip_reset((scsi_common_t *) zip_drives[i].priv); + for (i = 0; i < RDISK_NUM; i++) { + if ((rdisk_drives[i].bus_type == RDISK_BUS_ATAPI) && check_ch(dev, rdisk_drives[i].ide_channel) && rdisk_drives[i].priv) + rdisk_reset((scsi_common_t *) rdisk_drives[i].priv); } for (i = 0; i < MO_NUM; i++) { - if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && (mo_drives[i].ide_channel < 4) && mo_drives[i].priv) + if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && check_ch(dev, mo_drives[i].ide_channel) && mo_drives[i].priv) mo_reset((scsi_common_t *) mo_drives[i].priv); } @@ -336,16 +553,41 @@ cmd646_reset(void *priv) dev->regs[0x00] = 0x95; /* CMD */ dev->regs[0x01] = 0x10; - dev->regs[0x02] = 0x46; /* PCI-0646 */ + if (dev->local & CMD_TYPE_649) + dev->regs[0x02] = 0x49; /* PCI-0649 */ + else if (dev->local & CMD_TYPE_648) + dev->regs[0x02] = 0x48; /* PCI-0648 */ + else + dev->regs[0x02] = 0x46; /* PCI-0646 */ dev->regs[0x03] = 0x06; dev->regs[0x04] = 0x00; - dev->regs[0x06] = 0x80; dev->regs[0x07] = 0x02; /* DEVSEL timing: 01 medium */ - dev->regs[0x09] = dev->local; /* Programming interface */ - dev->regs[0x0a] = 0x01; /* IDE controller */ + if ((dev->local & CMD_TYPE_648) && (dev->local & CMD648_RAID)) { + dev->regs[0x06] = 0x90; + dev->regs[0x08] = 0x02; + dev->regs[0x09] = 0x00; /* Programming interface */ + dev->regs[0x0a] = 0x04; /* RAID controller */ + + dev->regs[0x50] = 0x40; /* Enable Base address register R/W; + If 0, they return 0 and are read-only 8 */ + + /* Blank base addresses */ + dev->regs[0x10] = 0x01; + dev->regs[0x14] = 0x01; + dev->regs[0x18] = 0x01; + dev->regs[0x1c] = 0x01; + } else { + dev->regs[0x06] = 0x80; + dev->regs[0x09] = dev->local; /* Programming interface */ + dev->regs[0x0a] = 0x01; /* IDE controller */ + } dev->regs[0x0b] = 0x01; /* Mass storage controller */ - if ((dev->local & 0xffff) == 0x8a) { + if ((dev->local & CMD_TYPE_648) && (dev->local & CMD648_JP7)) + for (int i = 0; i < 4; i++) + dev->regs[0x2c + i] = dev->regs[i]; + + if ((dev->regs[0x09] & 0x8a) == 0x8a) { dev->regs[0x50] = 0x40; /* Enable Base address register R/W; If 0, they return 0 and are read-only 8 */ @@ -371,13 +613,47 @@ cmd646_reset(void *priv) dev->regs[0x51] = 0x08; dev->regs[0x57] = 0x0c; - dev->regs[0x59] = 0x40; - dev->irq_mode[0] = dev->irq_mode[1] = 0; + if (dev->local & CMD_TYPE_648) { + dev->regs[0x34] = 0x60; + + dev->regs[0x4f] = (dev->local & CMD648_JP7) ? 0x02 : 0x00; + dev->regs[0x51] |= 0x04; + + if (dev->local & CMD_TYPE_649) { + dev->regs[0x57] |= 0x80; + dev->regs[0x59] = 0x40; + } else + dev->regs[0x57] |= 0xc0; + + dev->regs[0x60] = 0x01; + dev->regs[0x62] = 0x21; + dev->regs[0x63] = 0x06; + dev->regs[0x65] = 0x60; + dev->regs[0x67] = 0xf0; + + /* 80-pin stuff. */ + dev->regs[0x72] = 0x08; + dev->regs[0x7a] = 0x08; + dev->regs[0x79] = 0x83; + } else + dev->regs[0x59] = 0x40; + dev->irq_pin = PCI_INTA; + if ((dev->local & CMD_TYPE_648) && (dev->local & CMD648_RAID)) + dev->irq_mode[0] = dev->irq_mode[1] = IRQ_MODE_PCI_IRQ_PIN; + else { + dev->irq_mode[0] = (dev->regs[0x09] & 0x01) ? IRQ_MODE_PCI_IRQ_PIN : IRQ_MODE_LEGACY; + dev->irq_mode[1] = (dev->regs[0x09] & 0x04) ? IRQ_MODE_PCI_IRQ_PIN : IRQ_MODE_LEGACY; + } + + dev->irq_pin = PCI_INTA; + cmd646_ide_handlers(dev); cmd646_ide_bm_handlers(dev); + + cmd646_bios_handler(dev); } static void @@ -391,42 +667,147 @@ cmd646_close(void *priv) static void * cmd646_init(const device_t *info) { - cmd646_t *dev = (cmd646_t *) calloc(1, sizeof(cmd646_t)); + cmd646_t *dev = (cmd646_t *) calloc(1, sizeof(cmd646_t)); + int first = 0; dev->local = info->local; device_add(&ide_pci_2ch_device); - if (info->local & 0x80000) - pci_add_card(PCI_ADD_NORMAL, cmd646_pci_read, cmd646_pci_write, dev, &dev->pci_slot); - else + if (info->local & 0x80000) { + first = 2; + device_add(&ide_pci_ter_qua_2ch_device); + } else + device_add(&ide_pci_2ch_device); + + if (info->local & CMD64X_ONBOARD) pci_add_card(PCI_ADD_IDE, cmd646_pci_read, cmd646_pci_write, dev, &dev->pci_slot); + else + pci_add_card(PCI_ADD_NORMAL, cmd646_pci_read, cmd646_pci_write, dev, &dev->pci_slot); dev->single_channel = !!(info->local & 0x20000); - dev->bm[0] = device_add_inst(&sff8038i_device, 1); + dev->bm[0] = device_add_inst(&sff8038i_device, first + 1); if (!dev->single_channel) - dev->bm[1] = device_add_inst(&sff8038i_device, 2); + dev->bm[1] = device_add_inst(&sff8038i_device, first + 2); - ide_set_bus_master(0, cmd646_bus_master_dma_0, cmd646_set_irq_0, dev); + ide_set_bus_master(first, cmd646_bus_master_dma_0, cmd646_set_irq_0, dev); if (!dev->single_channel) - ide_set_bus_master(1, cmd646_bus_master_dma_1, cmd646_set_irq_1, dev); + ide_set_bus_master(first + 1, cmd646_bus_master_dma_1, cmd646_set_irq_1, dev); sff_set_irq_mode(dev->bm[0], IRQ_MODE_LEGACY); if (!dev->single_channel) sff_set_irq_mode(dev->bm[1], IRQ_MODE_LEGACY); + sff_set_slot(dev->bm[0], dev->pci_slot); + sff_set_slot(dev->bm[1], dev->pci_slot); + + if (dev->local & CMD_TYPE_648) { + sff_set_ven_handlers(dev->bm[0], cmd646_bm_write, cmd646_bm_read, dev); + sff_set_ven_handlers(dev->bm[1], cmd646_bm_write, cmd646_bm_read, dev); + + dev->has_bios = device_get_config_int("bios"); + + if (dev->has_bios) { + char *fn = NULL; + + if (dev->local & CMD_TYPE_649) { + const char *bios_rev = (char *) device_get_config_bios("bios_rev"); + fn = (char *) device_get_bios_file(info, bios_rev, 0); + + dev->rom_addr_size = device_get_bios_file_size(info, bios_rev); + } else { + fn = CMD648_BIOS_FILE; + + dev->rom_addr_size = 0x00004000; + } + + dev->rom_addr_mask = dev->rom_addr_size - 1; + + rom_init(&dev->bios_rom, fn, + 0x000d0000, dev->rom_addr_size, dev->rom_addr_mask, 0, MEM_MAPPING_EXTERNAL); + + mem_mapping_disable(&dev->bios_rom.mapping); + } + } + cmd646_reset(dev); + if (dev->local & CMD_TYPE_648) + for (int i = 0; i < 4; i++) + dev->regs[0x2c + i] = dev->regs[i]; + return dev; } +static const device_config_t cmd648_config[] = { + { + .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 cmd649_config[] = { + { + .name = "bios", + .description = "Enable BIOS", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } + }, + { + .name = "bios_rev", + .description = "BIOS Revision", + .type = CONFIG_BIOS, + .default_string = "rev_2301", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .bios = { + { + .name = "Revision 1.9.14", + .internal_name = "rev_1914", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 16384, + .files = { CMD649_REV_2301_BIOS_FILE, "" } + }, + { + .name = "Revision 2.3.01", + .internal_name = "rev_2301", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 65536, + .files = { CMD649_REV_2301_BIOS_FILE, "" } + }, + { .files_no = 0 } + }, + }, + { .name = "", .description = "", .type = CONFIG_END } +}; +// clang-format on + const device_t ide_cmd646_device = { .name = "CMD PCI-0646", .internal_name = "ide_cmd646", .flags = DEVICE_PCI, - .local = 0x8a, + .local = 0x000008a | CMD64X_ONBOARD, .init = cmd646_init, .close = cmd646_close, .reset = cmd646_reset, @@ -440,7 +821,7 @@ const device_t ide_cmd646_legacy_only_device = { .name = "CMD PCI-0646 (Legacy Mode Only)", .internal_name = "ide_cmd646_legacy_only", .flags = DEVICE_PCI, - .local = 0x80, + .local = 0x0000080 | CMD64X_ONBOARD, .init = cmd646_init, .close = cmd646_close, .reset = cmd646_reset, @@ -451,10 +832,10 @@ const device_t ide_cmd646_legacy_only_device = { }; const device_t ide_cmd646_single_channel_device = { - .name = "CMD PCI-0646", + .name = "CMD PCI-0646 (Single Channel)", .internal_name = "ide_cmd646_single_channel", .flags = DEVICE_PCI, - .local = 0x2008a, + .local = 0x002008a | CMD64X_ONBOARD, .init = cmd646_init, .close = cmd646_close, .reset = cmd646_reset, @@ -463,3 +844,59 @@ const device_t ide_cmd646_single_channel_device = { .force_redraw = NULL, .config = NULL }; + +const device_t ide_cmd646_ter_qua_device = { + .name = "CMD PCI-0646 (Tertiary and Quaternary)", + .internal_name = "ide_cmd646_ter_qua", + .flags = DEVICE_PCI, + .local = 0x008008f, + .init = cmd646_init, + .close = cmd646_close, + .reset = cmd646_reset, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t ide_cmd648_ter_qua_device = { + .name = "CMD PCI-0648 (Tertiary and Quaternary)", + .internal_name = "ide_cmd648_ter_qua", + .flags = DEVICE_PCI, + .local = 0x0d8008f, + .init = cmd646_init, + .close = cmd646_close, + .reset = cmd646_reset, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = cmd648_config +}; + +const device_t ide_cmd648_ter_qua_onboard_device = { + .name = "CMD PCI-0648 (Tertiary and Quaternary) On-Board", + .internal_name = "ide_cmd648_ter_qua_onboard", + .flags = DEVICE_PCI, + .local = 0x0d8008f | CMD64X_ONBOARD, + .init = cmd646_init, + .close = cmd646_close, + .reset = cmd646_reset, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t ide_cmd649_ter_qua_device = { + .name = "CMD PCI-0649 (Tertiary and Quaternary)", + .internal_name = "ide_cmd649_ter_qua", + .flags = DEVICE_PCI, + .local = 0x0f8008f, + .init = cmd646_init, + .close = cmd646_close, + .reset = cmd646_reset, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = cmd649_config +}; diff --git a/src/disk/hdc_ide_rz1000.c b/src/disk/hdc_ide_rz1000.c index 06586b267..8e664dd92 100644 --- a/src/disk/hdc_ide_rz1000.c +++ b/src/disk/hdc_ide_rz1000.c @@ -34,7 +34,7 @@ #include <86box/hdc.h> #include <86box/hdc_ide.h> #include <86box/hdc_ide_sff8038i.h> -#include <86box/zip.h> +#include <86box/rdisk.h> #include <86box/mo.h> typedef struct rz1000_t { @@ -182,10 +182,10 @@ rz1000_reset(void *priv) (cdrom[i].ide_channel <= max_channel) && cdrom[i].priv) scsi_cdrom_reset((scsi_common_t *) cdrom[i].priv); } - for (i = 0; i < ZIP_NUM; i++) { - if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) && (zip_drives[i].ide_channel >= min_channel) && - (zip_drives[i].ide_channel <= max_channel) && zip_drives[i].priv) - zip_reset((scsi_common_t *) zip_drives[i].priv); + for (i = 0; i < RDISK_NUM; i++) { + if ((rdisk_drives[i].bus_type == RDISK_BUS_ATAPI) && (rdisk_drives[i].ide_channel >= min_channel) && + (rdisk_drives[i].ide_channel <= max_channel) && rdisk_drives[i].priv) + rdisk_reset((scsi_common_t *) rdisk_drives[i].priv); } for (i = 0; i < MO_NUM; i++) { if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && (mo_drives[i].ide_channel >= min_channel) && @@ -275,7 +275,7 @@ const device_t ide_rz1000_pci_device = { }; const device_t ide_rz1000_pci_single_channel_device = { - .name = "PC Technology RZ-1000 PCI", + .name = "PC Technology RZ-1000 PCI (Single Channel)", .internal_name = "ide_rz1000_pci_single_channel", .flags = DEVICE_PCI, .local = 0x20000, diff --git a/src/disk/hdc_ide_sff8038i.c b/src/disk/hdc_ide_sff8038i.c index 7ded4372f..50deac38a 100644 --- a/src/disk/hdc_ide_sff8038i.c +++ b/src/disk/hdc_ide_sff8038i.c @@ -42,7 +42,7 @@ #include <86box/hdc.h> #include <86box/hdc_ide.h> #include <86box/hdc_ide_sff8038i.h> -#include <86box/zip.h> +#include <86box/rdisk.h> #include <86box/mo.h> #include <86box/plat_unused.h> @@ -118,6 +118,9 @@ sff_bus_master_write(uint16_t port, uint8_t val, void *priv) sff_log("SFF-8038i Bus master BYTE write: %04X %02X\n", port, val); + if (dev->ven_write != NULL) + val = dev->ven_write(port, val, dev->priv); + switch (port & 7) { case 0: sff_log("sff Cmd : val = %02X, old = %02X\n", val, dev->command); @@ -255,6 +258,9 @@ sff_bus_master_read(uint16_t port, void *priv) break; } + if (dev->ven_read != NULL) + ret= dev->ven_read(port, ret, dev->priv); + sff_log("SFF-8038i Bus master BYTE read : %04X %02X\n", port, ret); return ret; @@ -489,10 +495,10 @@ sff_reset(void *priv) cdrom[i].priv) scsi_cdrom_reset((scsi_common_t *) cdrom[i].priv); } - for (uint8_t i = 0; i < ZIP_NUM; i++) { - if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) && (zip_drives[i].ide_channel < 4) && - zip_drives[i].priv) - zip_reset((scsi_common_t *) zip_drives[i].priv); + for (uint8_t i = 0; i < RDISK_NUM; i++) { + if ((rdisk_drives[i].bus_type == RDISK_BUS_ATAPI) && (rdisk_drives[i].ide_channel < 4) && + rdisk_drives[i].priv) + rdisk_reset((scsi_common_t *) rdisk_drives[i].priv); } for (uint8_t i = 0; i < MO_NUM; i++) { if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && (mo_drives[i].ide_channel < 4) && @@ -569,6 +575,16 @@ sff_set_mirq(sff8038i_t *dev, uint8_t mirq) dev->mirq = mirq; } +void +sff_set_ven_handlers(sff8038i_t *dev, uint8_t (*ven_write)(uint16_t port, uint8_t val, void *priv), + uint8_t (*ven_read)(uint16_t port, uint8_t val, void *priv), void *priv) +{ + dev->ven_write = ven_write; + dev->ven_read = ven_read; + + dev->priv = priv; +} + static void sff_close(void *priv) { diff --git a/src/disk/hdc_ide_w83769f.c b/src/disk/hdc_ide_w83769f.c index 7829c5b92..25ee16d10 100644 --- a/src/disk/hdc_ide_w83769f.c +++ b/src/disk/hdc_ide_w83769f.c @@ -34,7 +34,7 @@ #include <86box/hdc.h> #include <86box/hdc_ide.h> #include <86box/hdc_ide_sff8038i.h> -#include <86box/zip.h> +#include <86box/rdisk.h> #include <86box/mo.h> typedef struct w83769f_t { @@ -297,10 +297,10 @@ w83769f_reset(void *priv) (cdrom[i].ide_channel <= max_channel) && cdrom[i].priv) scsi_cdrom_reset((scsi_common_t *) cdrom[i].priv); } - for (i = 0; i < ZIP_NUM; i++) { - if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) && (zip_drives[i].ide_channel >= min_channel) && - (zip_drives[i].ide_channel <= max_channel) && zip_drives[i].priv) - zip_reset((scsi_common_t *) zip_drives[i].priv); + for (i = 0; i < RDISK_NUM; i++) { + if ((rdisk_drives[i].bus_type == RDISK_BUS_ATAPI) && (rdisk_drives[i].ide_channel >= min_channel) && + (rdisk_drives[i].ide_channel <= max_channel) && rdisk_drives[i].priv) + rdisk_reset((scsi_common_t *) rdisk_drives[i].priv); } for (i = 0; i < MO_NUM; i++) { if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && (mo_drives[i].ide_channel >= min_channel) && diff --git a/src/disk/hdc_st506_xt.c b/src/disk/hdc_st506_xt.c index b3a07fa5a..a7313ca63 100644 --- a/src/disk/hdc_st506_xt.c +++ b/src/disk/hdc_st506_xt.c @@ -1915,7 +1915,7 @@ victor_v86p_available(void) static const device_config_t dtc_config[] = { { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0xc8000, @@ -1969,7 +1969,7 @@ static const device_config_t st11_config[] = { }, { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0xc8000, @@ -2006,7 +2006,7 @@ static const device_config_t st11_config[] = { static const device_config_t wd_config[] = { { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0xc8000, @@ -2089,7 +2089,7 @@ static const device_config_t wd_nobios_config[] = { static const device_config_t wd_rll_config[] = { { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0xc8000, @@ -2153,7 +2153,7 @@ static const device_config_t wd_rll_config[] = { static const device_config_t wd1004a_config[] = { { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0xc8000, @@ -2202,7 +2202,7 @@ static const device_config_t wd1004a_config[] = { static const device_config_t wd1004_rll_config[] = { { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0xc8000, diff --git a/src/disk/hdc_xta.c b/src/disk/hdc_xta.c index 4f7ee2fb9..6fa42d9af 100644 --- a/src/disk/hdc_xta.c +++ b/src/disk/hdc_xta.c @@ -1281,7 +1281,7 @@ static const device_config_t wdxt150_config[] = { }, { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0xc8000, diff --git a/src/disk/hdc_xtide.c b/src/disk/hdc_xtide.c index 9a122f595..63067f579 100644 --- a/src/disk/hdc_xtide.c +++ b/src/disk/hdc_xtide.c @@ -341,7 +341,7 @@ static const device_config_t xtide_config[] = { }, { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0xd0000, diff --git a/src/disk/hdd.c b/src/disk/hdd.c index e051cc841..e48af6b20 100644 --- a/src/disk/hdd.c +++ b/src/disk/hdd.c @@ -78,6 +78,12 @@ no_cdrom: if (!strcmp(str, "scsi")) return HDD_BUS_SCSI; + + if (!strcmp(str, "mitsumi")) + return CDROM_BUS_MITSUMI; + + if (!strcmp(str, "mke")) + return CDROM_BUS_MKE; return 0; } @@ -89,6 +95,17 @@ hdd_bus_to_string(int bus, UNUSED(int cdrom)) switch (bus) { default: + if (cdrom) { + switch (bus) { + case CDROM_BUS_MITSUMI: + s = "mitsumi"; + break; + case CDROM_BUS_MKE: + s = "mke"; + break; + } + break; + } case HDD_BUS_DISABLED: break; @@ -143,8 +160,12 @@ hdd_seek_get_time(hard_disk_t *hdd, uint32_t dst_addr, uint8_t operation, uint8_ const hdd_zone_t *zone = NULL; if (hdd->num_zones <= 0) { +#ifdef DO_FATAL fatal("hdd_seek_get_time(): hdd->num_zones < 0)\n"); return 0.0; +#else + return 1000.0; +#endif } for (uint32_t i = 0; i < hdd->num_zones; i++) { zone = &hdd->zones[i]; diff --git a/src/disk/zip.c b/src/disk/rdisk.c similarity index 65% rename from src/disk/zip.c rename to src/disk/rdisk.c index 7602f8096..5780740ad 100644 --- a/src/disk/zip.c +++ b/src/disk/rdisk.c @@ -13,7 +13,7 @@ * * Copyright 2018-2025 Miran Grca. */ -#ifdef ENABLE_ZIP_LOG +#ifdef ENABLE_RDISK_LOG #include #endif #include @@ -31,18 +31,19 @@ #include <86box/plat.h> #include <86box/ui.h> #include <86box/hdc_ide.h> -#include <86box/zip.h> +#include <86box/rdisk.h> +#include <86box/version.h> #define IDE_ATAPI_IS_EARLY id->sc->pad0 -zip_drive_t zip_drives[ZIP_NUM]; +rdisk_drive_t rdisk_drives[RDISK_NUM]; // clang-format off /* Table of all SCSI commands and their flags, needed for the new disc change / not ready handler. */ -const uint8_t zip_command_flags[0x100] = { +const uint8_t rdisk_command_flags[0x100] = { [0x00] = IMPLEMENTED | CHECK_READY, [0x01] = IMPLEMENTED | ALLOW_UA | SCSI_ONLY, [0x03] = IMPLEMENTED | ALLOW_UA, @@ -139,35 +140,35 @@ static const mode_sense_pages_t zip_250_mode_sense_pages_changeable = { }; // clang-format on -static void zip_command_complete(zip_t *dev); -static void zip_init(zip_t *dev); +static void rdisk_command_complete(rdisk_t *dev); +static void rdisk_init(rdisk_t *dev); -#ifdef ENABLE_ZIP_LOG -int zip_do_log = ENABLE_ZIP_LOG; +#ifdef ENABLE_RDISK_LOG +int rdisk_do_log = ENABLE_RDISK_LOG; static void -zip_log(void *priv, const char *fmt, ...) +rdisk_log(void *priv, const char *fmt, ...) { va_list ap; - if (zip_do_log) { + if (rdisk_do_log) { va_start(ap, fmt); log_out(priv, fmt, ap); va_end(ap); } } #else -# define zip_log(priv, fmt, ...) +# define rdisk_log(priv, fmt, ...) #endif static int -zip_load_abort(const zip_t *dev) +rdisk_load_abort(const rdisk_t *dev) { if (dev->drv->fp) fclose(dev->drv->fp); dev->drv->fp = NULL; dev->drv->medium_size = 0; - zip_eject(dev->id); /* Make sure the host OS knows we've rejected (and ejected) the image. */ + rdisk_eject(dev->id); /* Make sure the host OS knows we've rejected (and ejected) the image. */ return 0; } @@ -178,9 +179,9 @@ image_is_zdi(const char *s) } int -zip_is_empty(const uint8_t id) +rdisk_is_empty(const uint8_t id) { - const zip_t *dev = (const zip_t *) zip_drives[id].priv; + const rdisk_t *dev = (const rdisk_t *) rdisk_drives[id].priv; int ret = 0; if ((dev->drv == NULL) || (dev->drv->fp == NULL)) @@ -190,9 +191,9 @@ zip_is_empty(const uint8_t id) } void -zip_load(const zip_t *dev, const char *fn, const int skip_insert) +rdisk_load(const rdisk_t *dev, const char *fn, const int skip_insert) { - const int was_empty = zip_is_empty(dev->id); + const int was_empty = rdisk_is_empty(dev->id); int ret = 0; int offs = 0; @@ -204,7 +205,7 @@ zip_load(const zip_t *dev, const char *fn, const int skip_insert) fn += offs; if (dev->drv == NULL) - zip_eject(dev->id); + rdisk_eject(dev->id); else { const int is_zdi = image_is_zdi(fn); @@ -215,11 +216,11 @@ zip_load(const zip_t *dev, const char *fn, const int skip_insert) if (!dev->drv->read_only) { dev->drv->fp = plat_fopen(fn, "rb"); if (dev->drv->fp == NULL) - ret = zip_load_abort(dev); + ret = rdisk_load_abort(dev); else dev->drv->read_only = 1; } else - ret = zip_load_abort(dev); + ret = rdisk_load_abort(dev); } if (ret) { @@ -233,17 +234,17 @@ zip_load(const zip_t *dev, const char *fn, const int skip_insert) } else dev->drv->base = 0; - if (dev->drv->is_250) { + if (dev->drv->type != RDISK_TYPE_ZIP_100) { if ((size != (ZIP_250_SECTORS << 9)) && (size != (ZIP_SECTORS << 9))) { - zip_log(dev->log, "File is incorrect size for a ZIP image\n"); - zip_log(dev->log, "Must be exactly %i or %i bytes\n", + rdisk_log(dev->log, "File is incorrect size for a RDISK image\n"); + rdisk_log(dev->log, "Must be exactly %i or %i bytes\n", ZIP_250_SECTORS << 9, ZIP_SECTORS << 9); - ret = zip_load_abort(dev); + ret = rdisk_load_abort(dev); } } else if (size != (ZIP_SECTORS << 9)) { - zip_log(dev->log, "File is incorrect size for a ZIP image\n"); - zip_log(dev->log, "Must be exactly %i bytes\n", ZIP_SECTORS << 9); - ret = zip_load_abort(dev); + rdisk_log(dev->log, "File is incorrect size for a RDISK image\n"); + rdisk_log(dev->log, "Must be exactly %i bytes\n", ZIP_SECTORS << 9); + ret = rdisk_load_abort(dev); } if (ret) @@ -252,7 +253,7 @@ zip_load(const zip_t *dev, const char *fn, const int skip_insert) if (ret) { if (fseek(dev->drv->fp, dev->drv->base, SEEK_SET) == -1) - log_fatal(dev->log, "zip_load(): Error seeking to the beginning of " + log_fatal(dev->log, "rdisk_load(): Error seeking to the beginning of " "the file\n"); strncpy(dev->drv->image_path, fn - offs, sizeof(dev->drv->image_path) - 1); @@ -272,26 +273,26 @@ zip_load(const zip_t *dev, const char *fn, const int skip_insert) if (ret && !skip_insert) { /* Signal media change to the emulated machine. */ - zip_insert((zip_t *) dev); + rdisk_insert((rdisk_t *) dev); /* The drive was previously empty, transition directly to UNIT ATTENTION. */ if (was_empty) - zip_insert((zip_t *) dev); + rdisk_insert((rdisk_t *) dev); } if (ret) - ui_sb_update_icon_wp(SB_ZIP | dev->id, dev->drv->read_only); + ui_sb_update_icon_wp(SB_RDISK | dev->id, dev->drv->read_only); } void -zip_disk_reload(const zip_t *dev) +rdisk_disk_reload(const rdisk_t *dev) { if (strlen(dev->drv->prev_image_path) != 0) - (void) zip_load(dev, dev->drv->prev_image_path, 0); + (void) rdisk_load(dev, dev->drv->prev_image_path, 0); } static void -zip_disk_unload(const zip_t *dev) +rdisk_disk_unload(const rdisk_t *dev) { if ((dev->drv != NULL) && (dev->drv->fp != NULL)) { fclose(dev->drv->fp); @@ -300,10 +301,10 @@ zip_disk_unload(const zip_t *dev) } void -zip_disk_close(const zip_t *dev) +rdisk_disk_close(const rdisk_t *dev) { if ((dev->drv != NULL) && (dev->drv->fp != NULL)) { - zip_disk_unload(dev); + rdisk_disk_unload(dev); memcpy(dev->drv->prev_image_path, dev->drv->image_path, sizeof(dev->drv->prev_image_path)); @@ -311,68 +312,68 @@ zip_disk_close(const zip_t *dev) dev->drv->medium_size = 0; - zip_insert((zip_t *) dev); + rdisk_insert((rdisk_t *) dev); } } static void -zip_set_callback(const zip_t *dev) +rdisk_set_callback(const rdisk_t *dev) { - if (dev->drv->bus_type != ZIP_BUS_SCSI) + if (dev->drv->bus_type != RDISK_BUS_SCSI) ide_set_callback(ide_drives[dev->drv->ide_channel], dev->callback); } static void -zip_init(zip_t *dev) +rdisk_init(rdisk_t *dev) { - if (dev->id < ZIP_NUM) { + if (dev->id < RDISK_NUM) { dev->requested_blocks = 1; dev->sense[0] = 0xf0; dev->sense[7] = 10; dev->drv->bus_mode = 0; - if (dev->drv->bus_type >= ZIP_BUS_ATAPI) + if (dev->drv->bus_type >= RDISK_BUS_ATAPI) dev->drv->bus_mode |= 2; - if (dev->drv->bus_type < ZIP_BUS_SCSI) + if (dev->drv->bus_type < RDISK_BUS_SCSI) dev->drv->bus_mode |= 1; - zip_log(dev->log, "Bus type %i, bus mode %i\n", dev->drv->bus_type, dev->drv->bus_mode); - if (dev->drv->bus_type < ZIP_BUS_SCSI) { + rdisk_log(dev->log, "Bus type %i, bus mode %i\n", dev->drv->bus_type, dev->drv->bus_mode); + if (dev->drv->bus_type < RDISK_BUS_SCSI) { dev->tf->phase = 1; dev->tf->request_length = 0xEB14; } dev->tf->status = READY_STAT | DSC_STAT; dev->tf->pos = 0; dev->packet_status = PHASE_NONE; - zip_sense_key = zip_asc = zip_ascq = dev->unit_attention = dev->transition = 0; - zip_info = 0x00000000; + rdisk_sense_key = rdisk_asc = rdisk_ascq = dev->unit_attention = dev->transition = 0; + rdisk_info = 0x00000000; } } static int -zip_supports_pio(const zip_t *dev) +rdisk_supports_pio(const rdisk_t *dev) { return (dev->drv->bus_mode & 1); } static int -zip_supports_dma(const zip_t *dev) +rdisk_supports_dma(const rdisk_t *dev) { return (dev->drv->bus_mode & 2); } /* Returns: 0 for none, 1 for PIO, 2 for DMA. */ static int -zip_current_mode(const zip_t *dev) +rdisk_current_mode(const rdisk_t *dev) { - if (!zip_supports_pio(dev) && !zip_supports_dma(dev)) + if (!rdisk_supports_pio(dev) && !rdisk_supports_dma(dev)) return 0; - if (zip_supports_pio(dev) && !zip_supports_dma(dev)) { - zip_log(dev->log, "Drive does not support DMA, setting to PIO\n"); + if (rdisk_supports_pio(dev) && !rdisk_supports_dma(dev)) { + rdisk_log(dev->log, "Drive does not support DMA, setting to PIO\n"); return 1; } - if (!zip_supports_pio(dev) && zip_supports_dma(dev)) + if (!rdisk_supports_pio(dev) && rdisk_supports_dma(dev)) return 2; - if (zip_supports_pio(dev) && zip_supports_dma(dev)) { - zip_log(dev->log, "Drive supports both, setting to %s\n", + if (rdisk_supports_pio(dev) && rdisk_supports_dma(dev)) { + rdisk_log(dev->log, "Drive supports both, setting to %s\n", (dev->tf->features & 1) ? "DMA" : "PIO"); return (dev->tf->features & 1) ? 2 : 1; } @@ -381,80 +382,81 @@ zip_current_mode(const zip_t *dev) } static void -zip_mode_sense_load(zip_t *dev) +rdisk_mode_sense_load(rdisk_t *dev) { char fn[512] = { 0 }; memset(&dev->ms_pages_saved, 0, sizeof(mode_sense_pages_t)); - if (dev->drv->is_250) { - if (zip_drives[dev->id].bus_type == ZIP_BUS_SCSI) - memcpy(&dev->ms_pages_saved, &zip_250_mode_sense_pages_default_scsi, sizeof(mode_sense_pages_t)); - else - memcpy(&dev->ms_pages_saved, &zip_250_mode_sense_pages_default, sizeof(mode_sense_pages_t)); - } else { - if (zip_drives[dev->id].bus_type == ZIP_BUS_SCSI) + + if (dev->drv->type == RDISK_TYPE_ZIP_100) { + if (rdisk_drives[dev->id].bus_type == RDISK_BUS_SCSI) memcpy(&dev->ms_pages_saved, &zip_mode_sense_pages_default_scsi, sizeof(mode_sense_pages_t)); else memcpy(&dev->ms_pages_saved, &zip_mode_sense_pages_default, sizeof(mode_sense_pages_t)); + } else { + if (rdisk_drives[dev->id].bus_type == RDISK_BUS_SCSI) + memcpy(&dev->ms_pages_saved, &zip_250_mode_sense_pages_default_scsi, sizeof(mode_sense_pages_t)); + else + memcpy(&dev->ms_pages_saved, &zip_250_mode_sense_pages_default, sizeof(mode_sense_pages_t)); } - if (dev->drv->bus_type == ZIP_BUS_SCSI) - sprintf(fn, "scsi_zip_%02i_mode_sense_bin", dev->id); + if (dev->drv->bus_type == RDISK_BUS_SCSI) + sprintf(fn, "scsi_rdisk_%02i_mode_sense_bin", dev->id); else - sprintf(fn, "zip_%02i_mode_sense_bin", dev->id); + sprintf(fn, "rdisk_%02i_mode_sense_bin", dev->id); FILE *fp = plat_fopen(nvr_path(fn), "rb"); if (fp) { - /* Nothing to read, not used by ZIP. */ + /* Nothing to read, not used by RDISK. */ fclose(fp); } } static void -zip_mode_sense_save(const zip_t *dev) +rdisk_mode_sense_save(const rdisk_t *dev) { char fn[512] = { 0 }; - if (dev->drv->bus_type == ZIP_BUS_SCSI) - sprintf(fn, "scsi_zip_%02i_mode_sense_bin", dev->id); + if (dev->drv->bus_type == RDISK_BUS_SCSI) + sprintf(fn, "scsi_rdisk_%02i_mode_sense_bin", dev->id); else - sprintf(fn, "zip_%02i_mode_sense_bin", dev->id); + sprintf(fn, "rdisk_%02i_mode_sense_bin", dev->id); FILE *fp = plat_fopen(nvr_path(fn), "wb"); if (fp) { - /* Nothing to write, not used by ZIP. */ + /* Nothing to write, not used by RDISK. */ fclose(fp); } } /* SCSI Mode Sense 6/10. */ static uint8_t -zip_mode_sense_read(const zip_t *dev, const uint8_t pgctl, +zip_mode_sense_read(const rdisk_t *dev, const uint8_t pgctl, const uint8_t page, const uint8_t pos) { switch (pgctl) { case 0: case 3: - if (dev->drv->is_250 && (page == 5) && (pos == 9) && + if ((dev->drv->type != RDISK_TYPE_ZIP_100) && (page == 5) && (pos == 9) && (dev->drv->medium_size == ZIP_SECTORS)) return 0x60; return dev->ms_pages_saved.pages[page][pos]; case 1: - if (dev->drv->is_250) - return zip_250_mode_sense_pages_changeable.pages[page][pos]; - else + if (dev->drv->type == RDISK_TYPE_ZIP_100) return zip_mode_sense_pages_changeable.pages[page][pos]; + else + return zip_250_mode_sense_pages_changeable.pages[page][pos]; case 2: - if (dev->drv->is_250) { - if ((page == 5) && (pos == 9) && (dev->drv->medium_size == ZIP_SECTORS)) - return 0x60; - if (dev->drv->bus_type == ZIP_BUS_SCSI) - return zip_250_mode_sense_pages_default_scsi.pages[page][pos]; - else - return zip_250_mode_sense_pages_default.pages[page][pos]; - } else { - if (dev->drv->bus_type == ZIP_BUS_SCSI) + if (dev->drv->type == RDISK_TYPE_ZIP_100) { + if (dev->drv->bus_type == RDISK_BUS_SCSI) return zip_mode_sense_pages_default_scsi.pages[page][pos]; else return zip_mode_sense_pages_default.pages[page][pos]; + } else { + if ((page == 5) && (pos == 9) && (dev->drv->medium_size == ZIP_SECTORS)) + return 0x60; + if (dev->drv->bus_type == RDISK_BUS_SCSI) + return zip_250_mode_sense_pages_default_scsi.pages[page][pos]; + else + return zip_250_mode_sense_pages_default.pages[page][pos]; } default: @@ -465,16 +467,16 @@ zip_mode_sense_read(const zip_t *dev, const uint8_t pgctl, } static uint32_t -zip_mode_sense(const zip_t *dev, uint8_t *buf, uint32_t pos, +rdisk_mode_sense(const rdisk_t *dev, uint8_t *buf, uint32_t pos, uint8_t page, const uint8_t block_descriptor_len) { uint64_t pf; const uint8_t pgctl = (page >> 6) & 3; - if (dev->drv->is_250) - pf = zip_250_mode_sense_page_flags; - else + if (dev->drv->type == RDISK_TYPE_ZIP_100) pf = zip_mode_sense_page_flags; + else + pf = zip_250_mode_sense_page_flags; page &= 0x3f; @@ -495,7 +497,7 @@ zip_mode_sense(const zip_t *dev, uint8_t *buf, uint32_t pos, const uint8_t msplen = zip_mode_sense_read(dev, pgctl, i, 1); buf[pos++] = zip_mode_sense_read(dev, pgctl, i, 0); buf[pos++] = msplen; - zip_log(dev->log, "MODE SENSE: Page [%02X] length %i\n", i, msplen); + rdisk_log(dev->log, "MODE SENSE: Page [%02X] length %i\n", i, msplen); for (uint8_t j = 0; j < msplen; j++) buf[pos++] = zip_mode_sense_read(dev, pgctl, i, 2 + j); } @@ -506,7 +508,7 @@ zip_mode_sense(const zip_t *dev, uint8_t *buf, uint32_t pos, } static void -zip_update_request_length(zip_t *dev, int len, int block_len) +rdisk_update_request_length(rdisk_t *dev, int len, int block_len) { int bt; int min_len = 0; @@ -574,7 +576,7 @@ zip_update_request_length(zip_t *dev, int len, int block_len) } static double -zip_bus_speed(zip_t *dev) +rdisk_bus_speed(rdisk_t *dev) { double ret = -1.0; @@ -591,68 +593,68 @@ zip_bus_speed(zip_t *dev) } static void -zip_command_common(zip_t *dev) +rdisk_command_common(rdisk_t *dev) { dev->tf->status = BUSY_STAT; dev->tf->phase = 1; dev->tf->pos = 0; if (dev->packet_status == PHASE_COMPLETE) dev->callback = 0.0; - else if (dev->drv->bus_type == ZIP_BUS_SCSI) + else if (dev->drv->bus_type == RDISK_BUS_SCSI) dev->callback = -1.0; /* Speed depends on SCSI controller */ else - dev->callback = zip_bus_speed(dev) * (double) (dev->packet_len); + dev->callback = rdisk_bus_speed(dev) * (double) (dev->packet_len); - zip_set_callback(dev); + rdisk_set_callback(dev); } static void -zip_command_complete(zip_t *dev) +rdisk_command_complete(rdisk_t *dev) { dev->packet_status = PHASE_COMPLETE; - zip_command_common(dev); + rdisk_command_common(dev); } static void -zip_command_read(zip_t *dev) +rdisk_command_read(rdisk_t *dev) { dev->packet_status = PHASE_DATA_IN; - zip_command_common(dev); + rdisk_command_common(dev); } static void -zip_command_read_dma(zip_t *dev) +rdisk_command_read_dma(rdisk_t *dev) { dev->packet_status = PHASE_DATA_IN_DMA; - zip_command_common(dev); + rdisk_command_common(dev); } static void -zip_command_write(zip_t *dev) +rdisk_command_write(rdisk_t *dev) { dev->packet_status = PHASE_DATA_OUT; - zip_command_common(dev); + rdisk_command_common(dev); } static void -zip_command_write_dma(zip_t *dev) +rdisk_command_write_dma(rdisk_t *dev) { dev->packet_status = PHASE_DATA_OUT_DMA; - zip_command_common(dev); + rdisk_command_common(dev); } /* - dev = Pointer to current ZIP device; + dev = Pointer to current RDISK device; len = Total transfer length; block_len = Length of a single block (why does it matter?!); alloc_len = Allocated transfer length; direction = Transfer direction (0 = read from host, 1 = write to host). */ static void -zip_data_command_finish(zip_t *dev, int len, const int block_len, +rdisk_data_command_finish(rdisk_t *dev, int len, const int block_len, const int alloc_len, const int direction) { - zip_log(dev->log, "Finishing command (%02X): %i, %i, %i, %i, %i\n", + rdisk_log(dev->log, "Finishing command (%02X): %i, %i, %i, %i, %i\n", dev->current_cdb[0], len, block_len, alloc_len, direction, dev->tf->request_length); dev->tf->pos = 0; @@ -660,256 +662,256 @@ zip_data_command_finish(zip_t *dev, int len, const int block_len, if (alloc_len < len) len = alloc_len; } - if ((len == 0) || (zip_current_mode(dev) == 0)) { - if (dev->drv->bus_type != ZIP_BUS_SCSI) + if ((len == 0) || (rdisk_current_mode(dev) == 0)) { + if (dev->drv->bus_type != RDISK_BUS_SCSI) dev->packet_len = 0; - zip_command_complete(dev); + rdisk_command_complete(dev); } else { - if (zip_current_mode(dev) == 2) { - if (dev->drv->bus_type != ZIP_BUS_SCSI) + if (rdisk_current_mode(dev) == 2) { + if (dev->drv->bus_type != RDISK_BUS_SCSI) dev->packet_len = alloc_len; if (direction == 0) - zip_command_read_dma(dev); + rdisk_command_read_dma(dev); else - zip_command_write_dma(dev); + rdisk_command_write_dma(dev); } else { - zip_update_request_length(dev, len, block_len); - if ((dev->drv->bus_type != ZIP_BUS_SCSI) && + rdisk_update_request_length(dev, len, block_len); + if ((dev->drv->bus_type != RDISK_BUS_SCSI) && (dev->tf->request_length == 0)) - zip_command_complete(dev); + rdisk_command_complete(dev); else if (direction == 0) - zip_command_read(dev); + rdisk_command_read(dev); else - zip_command_write(dev); + rdisk_command_write(dev); } } - zip_log(dev->log, "Status: %i, cylinder %i, packet length: %i, position: %i, phase: %i\n", + rdisk_log(dev->log, "Status: %i, cylinder %i, packet length: %i, position: %i, phase: %i\n", dev->packet_status, dev->tf->request_length, dev->packet_len, dev->tf->pos, dev->tf->phase); } static void -zip_sense_clear(zip_t *dev, UNUSED(int command)) +rdisk_sense_clear(rdisk_t *dev, UNUSED(int command)) { - zip_sense_key = zip_asc = zip_ascq = 0; - zip_info = 0x00000000; + rdisk_sense_key = rdisk_asc = rdisk_ascq = 0; + rdisk_info = 0x00000000; } static void -zip_set_phase(const zip_t *dev, const uint8_t phase) +rdisk_set_phase(const rdisk_t *dev, const uint8_t phase) { const uint8_t scsi_bus = (dev->drv->scsi_device_id >> 4) & 0x0f; const uint8_t scsi_id = dev->drv->scsi_device_id & 0x0f; - if (dev->drv->bus_type == ZIP_BUS_SCSI) + if (dev->drv->bus_type == RDISK_BUS_SCSI) scsi_devices[scsi_bus][scsi_id].phase = phase; } static void -zip_cmd_error(zip_t *dev) +rdisk_cmd_error(rdisk_t *dev) { - zip_set_phase(dev, SCSI_PHASE_STATUS); - dev->tf->error = ((zip_sense_key & 0xf) << 4) | ABRT_ERR; + rdisk_set_phase(dev, SCSI_PHASE_STATUS); + dev->tf->error = ((rdisk_sense_key & 0xf) << 4) | ABRT_ERR; dev->tf->status = READY_STAT | ERR_STAT; dev->tf->phase = 3; dev->tf->pos = 0; dev->packet_status = PHASE_ERROR; - dev->callback = 50.0 * ZIP_TIME; - zip_set_callback(dev); - ui_sb_update_icon(SB_ZIP | dev->id, 0); - ui_sb_update_icon_write(SB_ZIP | dev->id, 0); - zip_log(dev->log, "[%02X] ERROR: %02X/%02X/%02X\n", dev->current_cdb[0], zip_sense_key, - zip_asc, zip_ascq); + dev->callback = 50.0 * RDISK_TIME; + rdisk_set_callback(dev); + ui_sb_update_icon(SB_RDISK | dev->id, 0); + ui_sb_update_icon_write(SB_RDISK | dev->id, 0); + rdisk_log(dev->log, "[%02X] ERROR: %02X/%02X/%02X\n", dev->current_cdb[0], rdisk_sense_key, + rdisk_asc, rdisk_ascq); } static void -zip_unit_attention(zip_t *dev) +rdisk_unit_attention(rdisk_t *dev) { - zip_set_phase(dev, SCSI_PHASE_STATUS); + rdisk_set_phase(dev, SCSI_PHASE_STATUS); dev->tf->error = (SENSE_UNIT_ATTENTION << 4) | ABRT_ERR; dev->tf->status = READY_STAT | ERR_STAT; dev->tf->phase = 3; dev->tf->pos = 0; dev->packet_status = PHASE_ERROR; - dev->callback = 50.0 * ZIP_TIME; - zip_set_callback(dev); - ui_sb_update_icon(SB_ZIP | dev->id, 0); - ui_sb_update_icon_write(SB_ZIP | dev->id, 0); - zip_log(dev->log, "UNIT ATTENTION\n", dev->id); + dev->callback = 50.0 * RDISK_TIME; + rdisk_set_callback(dev); + ui_sb_update_icon(SB_RDISK | dev->id, 0); + ui_sb_update_icon_write(SB_RDISK | dev->id, 0); + rdisk_log(dev->log, "UNIT ATTENTION\n", dev->id); } static void -zip_buf_alloc(zip_t *dev, const uint32_t len) +rdisk_buf_alloc(rdisk_t *dev, const uint32_t len) { - zip_log(dev->log, "Allocated buffer length: %i\n", len); + rdisk_log(dev->log, "Allocated buffer length: %i\n", len); if (dev->buffer == NULL) dev->buffer = (uint8_t *) malloc(len); } static void -zip_buf_free(zip_t *dev) +rdisk_buf_free(rdisk_t *dev) { if (dev->buffer != NULL) { - zip_log(dev->log, "ZIP %i: Freeing buffer...\n"); + rdisk_log(dev->log, "Removable Disk %i: Freeing buffer...\n"); free(dev->buffer); dev->buffer = NULL; } } static void -zip_bus_master_error(scsi_common_t *sc) +rdisk_bus_master_error(scsi_common_t *sc) { - zip_t *dev = (zip_t *) sc; + rdisk_t *dev = (rdisk_t *) sc; - zip_buf_free(dev); - zip_sense_key = zip_asc = zip_ascq = 0; - zip_info = (dev->sector_pos >> 24) | + rdisk_buf_free(dev); + rdisk_sense_key = rdisk_asc = rdisk_ascq = 0; + rdisk_info = (dev->sector_pos >> 24) | ((dev->sector_pos >> 16) << 8) | ((dev->sector_pos >> 8) << 16) | ( dev->sector_pos << 24); - zip_cmd_error(dev); + rdisk_cmd_error(dev); } static void -zip_not_ready(zip_t *dev) +rdisk_not_ready(rdisk_t *dev) { - zip_sense_key = SENSE_NOT_READY; - zip_asc = ASC_MEDIUM_NOT_PRESENT; - zip_ascq = 0; - zip_info = 0x00000000; - zip_cmd_error(dev); + rdisk_sense_key = SENSE_NOT_READY; + rdisk_asc = ASC_MEDIUM_NOT_PRESENT; + rdisk_ascq = 0; + rdisk_info = 0x00000000; + rdisk_cmd_error(dev); } static void -zip_write_protected(zip_t *dev) +rdisk_write_protected(rdisk_t *dev) { - zip_sense_key = SENSE_UNIT_ATTENTION; - zip_asc = ASC_WRITE_PROTECTED; - zip_ascq = 0; - zip_info = (dev->sector_pos >> 24) | + rdisk_sense_key = SENSE_UNIT_ATTENTION; + rdisk_asc = ASC_WRITE_PROTECTED; + rdisk_ascq = 0; + rdisk_info = (dev->sector_pos >> 24) | ((dev->sector_pos >> 16) << 8) | ((dev->sector_pos >> 8) << 16) | ( dev->sector_pos << 24); - zip_cmd_error(dev); + rdisk_cmd_error(dev); } static void -zip_write_error(zip_t *dev) +rdisk_write_error(rdisk_t *dev) { - zip_sense_key = SENSE_MEDIUM_ERROR; - zip_asc = ASC_WRITE_ERROR; - zip_ascq = 0; - zip_info = (dev->sector_pos >> 24) | + rdisk_sense_key = SENSE_MEDIUM_ERROR; + rdisk_asc = ASC_WRITE_ERROR; + rdisk_ascq = 0; + rdisk_info = (dev->sector_pos >> 24) | ((dev->sector_pos >> 16) << 8) | ((dev->sector_pos >> 8) << 16) | ( dev->sector_pos << 24); - zip_cmd_error(dev); + rdisk_cmd_error(dev); } static void -zip_read_error(zip_t *dev) +rdisk_read_error(rdisk_t *dev) { - zip_sense_key = SENSE_MEDIUM_ERROR; - zip_asc = ASC_UNRECOVERED_READ_ERROR; - zip_ascq = 0; - zip_info = (dev->sector_pos >> 24) | + rdisk_sense_key = SENSE_MEDIUM_ERROR; + rdisk_asc = ASC_UNRECOVERED_READ_ERROR; + rdisk_ascq = 0; + rdisk_info = (dev->sector_pos >> 24) | ((dev->sector_pos >> 16) << 8) | ((dev->sector_pos >> 8) << 16) | ( dev->sector_pos << 24); - zip_cmd_error(dev); + rdisk_cmd_error(dev); } static void -zip_invalid_lun(zip_t *dev, const uint8_t lun) +rdisk_invalid_lun(rdisk_t *dev, const uint8_t lun) { - zip_sense_key = SENSE_ILLEGAL_REQUEST; - zip_asc = ASC_INV_LUN; - zip_ascq = 0; - zip_info = lun << 24; - zip_cmd_error(dev); + rdisk_sense_key = SENSE_ILLEGAL_REQUEST; + rdisk_asc = ASC_INV_LUN; + rdisk_ascq = 0; + rdisk_info = lun << 24; + rdisk_cmd_error(dev); } static void -zip_illegal_opcode(zip_t *dev, const uint8_t opcode) +rdisk_illegal_opcode(rdisk_t *dev, const uint8_t opcode) { - zip_sense_key = SENSE_ILLEGAL_REQUEST; - zip_asc = ASC_ILLEGAL_OPCODE; - zip_ascq = 0; - zip_info = opcode << 24; - zip_cmd_error(dev); + rdisk_sense_key = SENSE_ILLEGAL_REQUEST; + rdisk_asc = ASC_ILLEGAL_OPCODE; + rdisk_ascq = 0; + rdisk_info = opcode << 24; + rdisk_cmd_error(dev); } static void -zip_lba_out_of_range(zip_t *dev) +rdisk_lba_out_of_range(rdisk_t *dev) { - zip_sense_key = SENSE_ILLEGAL_REQUEST; - zip_asc = ASC_LBA_OUT_OF_RANGE; - zip_ascq = 0; - zip_info = (dev->sector_pos >> 24) | + rdisk_sense_key = SENSE_ILLEGAL_REQUEST; + rdisk_asc = ASC_LBA_OUT_OF_RANGE; + rdisk_ascq = 0; + rdisk_info = (dev->sector_pos >> 24) | ((dev->sector_pos >> 16) << 8) | ((dev->sector_pos >> 8) << 16) | ( dev->sector_pos << 24); - zip_cmd_error(dev); + rdisk_cmd_error(dev); } static void -zip_invalid_field(zip_t *dev, const uint32_t field) +rdisk_invalid_field(rdisk_t *dev, const uint32_t field) { - zip_sense_key = SENSE_ILLEGAL_REQUEST; - zip_asc = ASC_INV_FIELD_IN_CMD_PACKET; - zip_ascq = 0; - zip_info = (field >> 24) | + rdisk_sense_key = SENSE_ILLEGAL_REQUEST; + rdisk_asc = ASC_INV_FIELD_IN_CMD_PACKET; + rdisk_ascq = 0; + rdisk_info = (field >> 24) | ((field >> 16) << 8) | ((field >> 8) << 16) | ( field << 24); - zip_cmd_error(dev); + rdisk_cmd_error(dev); dev->tf->status = 0x53; } static void -zip_invalid_field_pl(zip_t *dev, const uint32_t field) +rdisk_invalid_field_pl(rdisk_t *dev, const uint32_t field) { - zip_sense_key = SENSE_ILLEGAL_REQUEST; - zip_asc = ASC_INV_FIELD_IN_PARAMETER_LIST; - zip_ascq = 0; - zip_info = (field >> 24) | + rdisk_sense_key = SENSE_ILLEGAL_REQUEST; + rdisk_asc = ASC_INV_FIELD_IN_PARAMETER_LIST; + rdisk_ascq = 0; + rdisk_info = (field >> 24) | ((field >> 16) << 8) | ((field >> 8) << 16) | ( field << 24); - zip_cmd_error(dev); + rdisk_cmd_error(dev); dev->tf->status = 0x53; } static void -zip_data_phase_error(zip_t *dev, const uint32_t info) +rdisk_data_phase_error(rdisk_t *dev, const uint32_t info) { - zip_sense_key = SENSE_ILLEGAL_REQUEST; - zip_asc = ASC_DATA_PHASE_ERROR; - zip_ascq = 0; - zip_info = (info >> 24) | + rdisk_sense_key = SENSE_ILLEGAL_REQUEST; + rdisk_asc = ASC_DATA_PHASE_ERROR; + rdisk_ascq = 0; + rdisk_info = (info >> 24) | ((info >> 16) << 8) | ((info >> 8) << 16) | ( info << 24); - zip_cmd_error(dev); + rdisk_cmd_error(dev); } static int -zip_blocks(zip_t *dev, int32_t *len, const int out) +rdisk_blocks(rdisk_t *dev, int32_t *len, const int out) { int ret = 1; *len = 0; if (dev->sector_len > 0) { - zip_log(dev->log, "%sing %i blocks starting from %i...\n", out ? "Writ" : "Read", + rdisk_log(dev->log, "%sing %i blocks starting from %i...\n", out ? "Writ" : "Read", dev->requested_blocks, dev->sector_pos); if (dev->sector_pos >= dev->drv->medium_size) { - zip_log(dev->log, "Trying to %s beyond the end of disk\n", + rdisk_log(dev->log, "Trying to %s beyond the end of disk\n", out ? "write" : "read"); - zip_lba_out_of_range(dev); + rdisk_lba_out_of_range(dev); ret = 0; } else { *len = dev->requested_blocks << 9; @@ -918,9 +920,9 @@ zip_blocks(zip_t *dev, int32_t *len, const int out) if (fseek(dev->drv->fp, dev->drv->base + (dev->sector_pos << 9), SEEK_SET) == -1) { if (out) - zip_write_error(dev); + rdisk_write_error(dev); else - zip_read_error(dev); + rdisk_read_error(dev); ret = -1; } else { if (feof(dev->drv->fp)) @@ -929,15 +931,15 @@ zip_blocks(zip_t *dev, int32_t *len, const int out) if (out) { if (fwrite(dev->buffer + (i << 9), 1, 512, dev->drv->fp) != 512) { - zip_log(dev->log, "zip_blocks(): Error writing data\n"); - zip_write_error(dev); + rdisk_log(dev->log, "rdisk_blocks(): Error writing data\n"); + rdisk_write_error(dev); ret = -1; } else fflush(dev->drv->fp); } else if (fread(dev->buffer + (i << 9), 1, 512, dev->drv->fp) != 512) { - zip_log(dev->log, "zip_blocks(): Error reading data\n"); - zip_read_error(dev); + rdisk_log(dev->log, "rdisk_blocks(): Error reading data\n"); + rdisk_read_error(dev); ret = -1; } } @@ -949,14 +951,14 @@ zip_blocks(zip_t *dev, int32_t *len, const int out) } if (ret == 1) { - zip_log(dev->log, "%s %i bytes of blocks...\n", out ? "Written" : + rdisk_log(dev->log, "%s %i bytes of blocks...\n", out ? "Written" : "Read", *len); dev->sector_len -= dev->requested_blocks; } } } else { - zip_command_complete(dev); + rdisk_command_complete(dev); ret = 0; } @@ -964,61 +966,61 @@ zip_blocks(zip_t *dev, int32_t *len, const int out) } void -zip_insert(zip_t *dev) +rdisk_insert(rdisk_t *dev) { if ((dev != NULL) && (dev->drv != NULL)) { if (dev->drv->fp == NULL) { dev->unit_attention = 0; dev->transition = 0; - zip_log(dev->log, "Media removal\n"); + rdisk_log(dev->log, "Media removal\n"); } else if (dev->transition) { dev->unit_attention = 1; /* Turn off the medium changed status. */ dev->transition = 0; - zip_log(dev->log, "Media insert\n"); + rdisk_log(dev->log, "Media insert\n"); } else { dev->unit_attention = 0; dev->transition = 1; - zip_log(dev->log, "Media transition\n"); + rdisk_log(dev->log, "Media transition\n"); } } } static int -zip_pre_execution_check(zip_t *dev, const uint8_t *cdb) +rdisk_pre_execution_check(rdisk_t *dev, const uint8_t *cdb) { int ready; if ((cdb[0] != GPCMD_REQUEST_SENSE) && (dev->cur_lun == SCSI_LUN_USE_CDB) && (cdb[1] & 0xe0)) { - zip_log(dev->log, "Attempting to execute a unknown command targeted at SCSI LUN %i\n", + rdisk_log(dev->log, "Attempting to execute a unknown command targeted at SCSI LUN %i\n", ((dev->tf->request_length >> 5) & 7)); - zip_invalid_lun(dev, cdb[1] >> 5); + rdisk_invalid_lun(dev, cdb[1] >> 5); return 0; } - if (!(zip_command_flags[cdb[0]] & IMPLEMENTED)) { - zip_log(dev->log, "Attempting to execute unknown command %02X over %s\n", - cdb[0], (dev->drv->bus_type == ZIP_BUS_SCSI) ? + if (!(rdisk_command_flags[cdb[0]] & IMPLEMENTED)) { + rdisk_log(dev->log, "Attempting to execute unknown command %02X over %s\n", + cdb[0], (dev->drv->bus_type == RDISK_BUS_SCSI) ? "SCSI" : "ATAPI"); - zip_illegal_opcode(dev, cdb[0]); + rdisk_illegal_opcode(dev, cdb[0]); return 0; } - if ((dev->drv->bus_type < ZIP_BUS_SCSI) && - (zip_command_flags[cdb[0]] & SCSI_ONLY)) { - zip_log(dev->log, "Attempting to execute SCSI-only command %02X " + if ((dev->drv->bus_type < RDISK_BUS_SCSI) && + (rdisk_command_flags[cdb[0]] & SCSI_ONLY)) { + rdisk_log(dev->log, "Attempting to execute SCSI-only command %02X " "over ATAPI\n", cdb[0]); - zip_illegal_opcode(dev, cdb[0]); + rdisk_illegal_opcode(dev, cdb[0]); return 0; } - if ((dev->drv->bus_type == ZIP_BUS_SCSI) && - (zip_command_flags[cdb[0]] & ATAPI_ONLY)) { - zip_log(dev->log, "Attempting to execute ATAPI-only command %02X " + if ((dev->drv->bus_type == RDISK_BUS_SCSI) && + (rdisk_command_flags[cdb[0]] & ATAPI_ONLY)) { + rdisk_log(dev->log, "Attempting to execute ATAPI-only command %02X " "over SCSI\n", cdb[0]); - zip_illegal_opcode(dev, cdb[0]); + rdisk_illegal_opcode(dev, cdb[0]); return 0; } @@ -1026,9 +1028,9 @@ zip_pre_execution_check(zip_t *dev, const uint8_t *cdb) if ((cdb[0] == GPCMD_TEST_UNIT_READY) || (cdb[0] == GPCMD_REQUEST_SENSE)) ready = 0; else { - if (!(zip_command_flags[cdb[0]] & ALLOW_UA)) { - zip_log(dev->log, "(ext_medium_changed != 0): zip_insert()\n"); - zip_insert((void *) dev); + if (!(rdisk_command_flags[cdb[0]] & ALLOW_UA)) { + rdisk_log(dev->log, "(ext_medium_changed != 0): rdisk_insert()\n"); + rdisk_insert((void *) dev); } ready = (dev->drv->fp != NULL); @@ -1053,17 +1055,17 @@ zip_pre_execution_check(zip_t *dev, const uint8_t *cdb) Only increment the unit attention phase if the command can not pass through it. */ - if (!(zip_command_flags[cdb[0]] & ALLOW_UA)) { - zip_log(dev->log, "Unit attention now 2\n"); + if (!(rdisk_command_flags[cdb[0]] & ALLOW_UA)) { + rdisk_log(dev->log, "Unit attention now 2\n"); dev->unit_attention++; - zip_log(dev->log, "UNIT ATTENTION: Command %02X not allowed to pass through\n", + rdisk_log(dev->log, "UNIT ATTENTION: Command %02X not allowed to pass through\n", cdb[0]); - zip_unit_attention(dev); + rdisk_unit_attention(dev); return 0; } } else if (dev->unit_attention == 2) { if (cdb[0] != GPCMD_REQUEST_SENSE) { - zip_log(dev->log, "Unit attention now 0\n"); + rdisk_log(dev->log, "Unit attention now 0\n"); dev->unit_attention = 0; } } @@ -1073,51 +1075,51 @@ zip_pre_execution_check(zip_t *dev, const uint8_t *cdb) the UNIT ATTENTION condition if it's set. */ if (cdb[0] != GPCMD_REQUEST_SENSE) - zip_sense_clear(dev, cdb[0]); + rdisk_sense_clear(dev, cdb[0]); - if (!ready && (zip_command_flags[cdb[0]] & CHECK_READY)) { - zip_log(dev->log, "Not ready (%02X)\n", cdb[0]); - zip_not_ready(dev); + if (!ready && (rdisk_command_flags[cdb[0]] & CHECK_READY)) { + rdisk_log(dev->log, "Not ready (%02X)\n", cdb[0]); + rdisk_not_ready(dev); return 0; } - zip_log(dev->log, "Continuing with command %02X\n", cdb[0]); + rdisk_log(dev->log, "Continuing with command %02X\n", cdb[0]); return 1; } static void -zip_seek(zip_t *dev, const uint32_t pos) +rdisk_seek(rdisk_t *dev, const uint32_t pos) { dev->sector_pos = pos; } static void -zip_rezero(zip_t *dev) +rdisk_rezero(rdisk_t *dev) { dev->sector_pos = dev->sector_len = 0; - zip_seek(dev, 0); + rdisk_seek(dev, 0); } void -zip_reset(scsi_common_t *sc) +rdisk_reset(scsi_common_t *sc) { - zip_t *dev = (zip_t *) sc; + rdisk_t *dev = (rdisk_t *) sc; - zip_rezero(dev); + rdisk_rezero(dev); dev->tf->status = 0; dev->callback = 0.0; - zip_set_callback(dev); + rdisk_set_callback(dev); dev->tf->phase = 1; dev->tf->request_length = 0xEB14; dev->packet_status = PHASE_NONE; dev->unit_attention = 0; dev->cur_lun = SCSI_LUN_USE_CDB; - zip_sense_key = zip_asc = zip_ascq = dev->unit_attention = dev->transition = 0; - zip_info = 0x00000000; + rdisk_sense_key = rdisk_asc = rdisk_ascq = dev->unit_attention = dev->transition = 0; + rdisk_info = 0x00000000; } static void -zip_request_sense(zip_t *dev, uint8_t *buffer, const uint8_t alloc_length, const int desc) +rdisk_request_sense(rdisk_t *dev, uint8_t *buffer, const uint8_t alloc_length, const int desc) { /*Will return 18 bytes of 0*/ if (alloc_length != 0) { @@ -1125,9 +1127,9 @@ zip_request_sense(zip_t *dev, uint8_t *buffer, const uint8_t alloc_length, const if (!desc) memcpy(buffer, dev->sense, alloc_length); else { - buffer[1] = zip_sense_key; - buffer[2] = zip_asc; - buffer[3] = zip_ascq; + buffer[1] = rdisk_sense_key; + buffer[2] = rdisk_asc; + buffer[3] = rdisk_ascq; } } @@ -1135,13 +1137,13 @@ zip_request_sense(zip_t *dev, uint8_t *buffer, const uint8_t alloc_length, const if (!desc) buffer[7] = 10; - if (dev->unit_attention && (zip_sense_key == 0)) { + if (dev->unit_attention && (rdisk_sense_key == 0)) { buffer[desc ? 1 : 2] = SENSE_UNIT_ATTENTION; buffer[desc ? 2 : 12] = ASC_MEDIUM_MAY_HAVE_CHANGED; buffer[desc ? 3 : 13] = 0; } - zip_log(dev->log, "Reporting sense: %02X %02X %02X\n", buffer[2], + rdisk_log(dev->log, "Reporting sense: %02X %02X %02X\n", buffer[2], buffer[12], buffer[13]); if (buffer[desc ? 1 : 2] == SENSE_UNIT_ATTENTION) { @@ -1151,18 +1153,18 @@ zip_request_sense(zip_t *dev, uint8_t *buffer, const uint8_t alloc_length, const } /* Clear the sense stuff as per the spec. */ - zip_sense_clear(dev, GPCMD_REQUEST_SENSE); + rdisk_sense_clear(dev, GPCMD_REQUEST_SENSE); if (dev->transition) { - zip_log(dev->log, "ZIP_TRANSITION: zip_insert()\n"); - zip_insert((void *) dev); + rdisk_log(dev->log, "Removable Disk_TRANSITION: rdisk_insert()\n"); + rdisk_insert((void *) dev); } } static void -zip_request_sense_for_scsi(scsi_common_t *sc, uint8_t *buffer, const uint8_t alloc_length) +rdisk_request_sense_for_scsi(scsi_common_t *sc, uint8_t *buffer, const uint8_t alloc_length) { - zip_t *dev = (zip_t *) sc; + rdisk_t *dev = (rdisk_t *) sc; const int ready = (dev->drv->fp != NULL); if (!ready && dev->unit_attention) { @@ -1174,32 +1176,33 @@ zip_request_sense_for_scsi(scsi_common_t *sc, uint8_t *buffer, const uint8_t all } /* Do *NOT* advance the unit attention phase. */ - zip_request_sense(dev, buffer, alloc_length, 0); + rdisk_request_sense(dev, buffer, alloc_length, 0); } static void -zip_set_buf_len(const zip_t *dev, int32_t *BufLen, int32_t *src_len) +rdisk_set_buf_len(const rdisk_t *dev, int32_t *BufLen, int32_t *src_len) { - if (dev->drv->bus_type == ZIP_BUS_SCSI) { + if (dev->drv->bus_type == RDISK_BUS_SCSI) { if (*BufLen == -1) *BufLen = *src_len; else { *BufLen = MIN(*src_len, *BufLen); *src_len = *BufLen; } - zip_log(dev->log, "Actual transfer length: %i\n", *BufLen); + rdisk_log(dev->log, "Actual transfer length: %i\n", *BufLen); } } static void -zip_command(scsi_common_t *sc, const uint8_t *cdb) +rdisk_command(scsi_common_t *sc, const uint8_t *cdb) { - zip_t *dev = (zip_t *) sc; - const uint8_t scsi_bus = (dev->drv->scsi_device_id >> 4) & 0x0f; - const uint8_t scsi_id = dev->drv->scsi_device_id & 0x0f; - int pos = 0; - int idx = 0; - int32_t blen = 0; + rdisk_t *dev = (rdisk_t *) sc; + char device_identify[9] = { '8', '6', 'B', '_', 'R', 'D', '0', '0', 0 }; + const uint8_t scsi_bus = (dev->drv->scsi_device_id >> 4) & 0x0f; + const uint8_t scsi_id = dev->drv->scsi_device_id & 0x0f; + int pos = 0; + int idx = 0; + int32_t blen = 0; uint32_t i; unsigned preamble_len; int32_t len; @@ -1209,7 +1212,7 @@ zip_command(scsi_common_t *sc, const uint8_t *cdb) int size_idx; int32_t * BufLen; - if (dev->drv->bus_type == ZIP_BUS_SCSI) { + if (dev->drv->bus_type == RDISK_BUS_SCSI) { BufLen = &scsi_devices[scsi_bus][scsi_id].buffer_length; dev->tf->status &= ~ERR_STAT; } else { @@ -1220,15 +1223,17 @@ zip_command(scsi_common_t *sc, const uint8_t *cdb) dev->packet_len = 0; dev->request_pos = 0; + device_identify[7] = dev->id + 0x30; + memcpy(dev->current_cdb, cdb, 12); if (cdb[0] != 0) { - zip_log(dev->log, "Command 0x%02X, Sense Key %02X, Asc %02X, Ascq %02X, " + rdisk_log(dev->log, "Command 0x%02X, Sense Key %02X, Asc %02X, Ascq %02X, " "Unit attention: %i\n", - cdb[0], zip_sense_key, zip_asc, zip_ascq, dev->unit_attention); - zip_log(dev->log, "Request length: %04X\n", dev->tf->request_length); + cdb[0], rdisk_sense_key, rdisk_asc, rdisk_ascq, dev->unit_attention); + rdisk_log(dev->log, "Request length: %04X\n", dev->tf->request_length); - zip_log(dev->log, "CDB: %02X %02X %02X %02X %02X %02X %02X %02X " + rdisk_log(dev->log, "CDB: %02X %02X %02X %02X %02X %02X %02X %02X " "%02X %02X %02X %02X\n", cdb[0], cdb[1], cdb[2], cdb[3], cdb[4], cdb[5], cdb[6], cdb[7], cdb[8], cdb[9], cdb[10], cdb[11]); @@ -1236,43 +1241,43 @@ zip_command(scsi_common_t *sc, const uint8_t *cdb) dev->sector_len = 0; - zip_set_phase(dev, SCSI_PHASE_STATUS); + rdisk_set_phase(dev, SCSI_PHASE_STATUS); /* This handles the Not Ready/Unit Attention check if it has to be handled at this point. */ - if (zip_pre_execution_check(dev, cdb) == 0) + if (rdisk_pre_execution_check(dev, cdb) == 0) return; switch (cdb[0]) { case GPCMD_SEND_DIAGNOSTIC: if (!(cdb[1] & (1 << 2))) { - zip_invalid_field(dev, cdb[1]); + rdisk_invalid_field(dev, cdb[1]); return; } fallthrough; case GPCMD_SCSI_RESERVE: case GPCMD_SCSI_RELEASE: case GPCMD_TEST_UNIT_READY: - zip_set_phase(dev, SCSI_PHASE_STATUS); - zip_command_complete(dev); + rdisk_set_phase(dev, SCSI_PHASE_STATUS); + rdisk_command_complete(dev); break; case GPCMD_FORMAT_UNIT: if (dev->drv->read_only) - zip_write_protected(dev); + rdisk_write_protected(dev); else { - zip_set_phase(dev, SCSI_PHASE_STATUS); - zip_command_complete(dev); + rdisk_set_phase(dev, SCSI_PHASE_STATUS); + rdisk_command_complete(dev); } break; case GPCMD_IOMEGA_SENSE: - zip_set_phase(dev, SCSI_PHASE_DATA_IN); + rdisk_set_phase(dev, SCSI_PHASE_DATA_IN); max_len = cdb[4]; - zip_buf_alloc(dev, 256); - zip_set_buf_len(dev, BufLen, &max_len); + rdisk_buf_alloc(dev, 256); + rdisk_set_buf_len(dev, BufLen, &max_len); memset(dev->buffer, 0, 256); if (cdb[2] == 1) { /* @@ -1294,17 +1299,17 @@ zip_command(scsi_common_t *sc, const uint8_t *cdb) for (i = 0x00; i < 0x27; i++) dev->buffer[i + 0x16] = 0x00; } else { - zip_invalid_field(dev, cdb[2]); - zip_buf_free(dev); + rdisk_invalid_field(dev, cdb[2]); + rdisk_buf_free(dev); return; } - zip_data_command_finish(dev, 18, 18, cdb[4], 0); + rdisk_data_command_finish(dev, 18, 18, cdb[4], 0); break; case GPCMD_REZERO_UNIT: dev->sector_pos = dev->sector_len = 0; - zip_seek(dev, 0); - zip_set_phase(dev, SCSI_PHASE_STATUS); + rdisk_seek(dev, 0); + rdisk_set_phase(dev, SCSI_PHASE_STATUS); break; case GPCMD_REQUEST_SENSE: @@ -1313,41 +1318,41 @@ zip_command(scsi_common_t *sc, const uint8_t *cdb) standalone REQUEST SENSE should forget about the not ready, and report unit attention straight away. */ - zip_set_phase(dev, SCSI_PHASE_DATA_IN); + rdisk_set_phase(dev, SCSI_PHASE_DATA_IN); max_len = cdb[4]; if (!max_len) { - zip_set_phase(dev, SCSI_PHASE_STATUS); + rdisk_set_phase(dev, SCSI_PHASE_STATUS); dev->packet_status = PHASE_COMPLETE; - dev->callback = 20.0 * ZIP_TIME; - zip_set_callback(dev); + dev->callback = 20.0 * RDISK_TIME; + rdisk_set_callback(dev); break; } - zip_buf_alloc(dev, 256); - zip_set_buf_len(dev, BufLen, &max_len); + rdisk_buf_alloc(dev, 256); + rdisk_set_buf_len(dev, BufLen, &max_len); len = (cdb[1] & 1) ? 8 : 18; - zip_request_sense(dev, dev->buffer, max_len, cdb[1] & 1); - zip_data_command_finish(dev, len, len, cdb[4], 0); + rdisk_request_sense(dev, dev->buffer, max_len, cdb[1] & 1); + rdisk_data_command_finish(dev, len, len, cdb[4], 0); break; case GPCMD_MECHANISM_STATUS: - zip_set_phase(dev, SCSI_PHASE_DATA_IN); + rdisk_set_phase(dev, SCSI_PHASE_DATA_IN); len = (cdb[8] << 8) | cdb[9]; - zip_buf_alloc(dev, 8); - zip_set_buf_len(dev, BufLen, &len); + rdisk_buf_alloc(dev, 8); + rdisk_set_buf_len(dev, BufLen, &len); memset(dev->buffer, 0, 8); dev->buffer[5] = 1; - zip_data_command_finish(dev, 8, 8, len, 0); + rdisk_data_command_finish(dev, 8, 8, len, 0); break; case GPCMD_READ_6: case GPCMD_READ_10: case GPCMD_READ_12: - zip_set_phase(dev, SCSI_PHASE_DATA_IN); + rdisk_set_phase(dev, SCSI_PHASE_DATA_IN); alloc_length = 512; switch (cdb[0]) { @@ -1361,13 +1366,13 @@ zip_command(scsi_common_t *sc, const uint8_t *cdb) dev->sector_len = 256; dev->sector_pos = ((((uint32_t) cdb[1]) & 0x1f) << 16) | (((uint32_t) cdb[2]) << 8) | ((uint32_t) cdb[3]); - zip_log(dev->log, "Length: %i, LBA: %i\n", dev->sector_len, dev->sector_pos); + rdisk_log(dev->log, "Length: %i, LBA: %i\n", dev->sector_len, dev->sector_pos); break; case GPCMD_READ_10: dev->sector_len = (cdb[7] << 8) | cdb[8]; dev->sector_pos = (cdb[2] << 24) | (cdb[3] << 16) | (cdb[4] << 8) | cdb[5]; - zip_log(dev->log, "Length: %i, LBA: %i\n", dev->sector_len, dev->sector_pos); + rdisk_log(dev->log, "Length: %i, LBA: %i\n", dev->sector_len, dev->sector_pos); break; case GPCMD_READ_12: dev->sector_len = (((uint32_t) cdb[6]) << 24) | @@ -1383,41 +1388,41 @@ zip_command(scsi_common_t *sc, const uint8_t *cdb) } if (dev->sector_pos >= dev->drv->medium_size) - zip_lba_out_of_range(dev); + rdisk_lba_out_of_range(dev); else if (dev->sector_len) { max_len = dev->sector_len; dev->requested_blocks = max_len; dev->packet_len = max_len * alloc_length; - zip_buf_alloc(dev, dev->packet_len); + rdisk_buf_alloc(dev, dev->packet_len); - const int ret = zip_blocks(dev, &alloc_length, 0); + const int ret = rdisk_blocks(dev, &alloc_length, 0); alloc_length = dev->requested_blocks * 512; if (ret > 0) { dev->requested_blocks = max_len; dev->packet_len = alloc_length; - zip_set_buf_len(dev, BufLen, (int32_t *) &dev->packet_len); + rdisk_set_buf_len(dev, BufLen, (int32_t *) &dev->packet_len); - zip_data_command_finish(dev, alloc_length, 512, + rdisk_data_command_finish(dev, alloc_length, 512, alloc_length, 0); - ui_sb_update_icon(SB_ZIP | dev->id, + ui_sb_update_icon(SB_RDISK | dev->id, dev->packet_status != PHASE_COMPLETE); } else { - zip_set_phase(dev, SCSI_PHASE_STATUS); + rdisk_set_phase(dev, SCSI_PHASE_STATUS); dev->packet_status = (ret < 0) ? PHASE_ERROR : PHASE_COMPLETE; - dev->callback = 20.0 * ZIP_TIME; - zip_set_callback(dev); - zip_buf_free(dev); + dev->callback = 20.0 * RDISK_TIME; + rdisk_set_callback(dev); + rdisk_buf_free(dev); } } else { - zip_set_phase(dev, SCSI_PHASE_STATUS); - /* zip_log(dev->log, "All done - callback set\n"); */ + rdisk_set_phase(dev, SCSI_PHASE_STATUS); + /* rdisk_log(dev->log, "All done - callback set\n"); */ dev->packet_status = PHASE_COMPLETE; - dev->callback = 20.0 * ZIP_TIME; - zip_set_callback(dev); + dev->callback = 20.0 * RDISK_TIME; + rdisk_set_callback(dev); break; } break; @@ -1426,8 +1431,8 @@ zip_command(scsi_common_t *sc, const uint8_t *cdb) case GPCMD_VERIFY_10: case GPCMD_VERIFY_12: if (!(cdb[1] & 2)) { - zip_set_phase(dev, SCSI_PHASE_STATUS); - zip_command_complete(dev); + rdisk_set_phase(dev, SCSI_PHASE_STATUS); + rdisk_command_complete(dev); break; } fallthrough; @@ -1436,11 +1441,11 @@ zip_command(scsi_common_t *sc, const uint8_t *cdb) case GPCMD_WRITE_AND_VERIFY_10: case GPCMD_WRITE_12: case GPCMD_WRITE_AND_VERIFY_12: - zip_set_phase(dev, SCSI_PHASE_DATA_OUT); + rdisk_set_phase(dev, SCSI_PHASE_DATA_OUT); alloc_length = 512; if (dev->drv->read_only) { - zip_write_protected(dev); + rdisk_write_protected(dev); break; } @@ -1463,7 +1468,7 @@ zip_command(scsi_common_t *sc, const uint8_t *cdb) dev->sector_len = (cdb[7] << 8) | cdb[8]; dev->sector_pos = (cdb[2] << 24) | (cdb[3] << 16) | (cdb[4] << 8) | cdb[5]; - zip_log(dev->log, "Length: %i, LBA: %i\n", + rdisk_log(dev->log, "Length: %i, LBA: %i\n", dev->sector_len, dev->sector_pos); break; case GPCMD_VERIFY_12: @@ -1482,71 +1487,71 @@ zip_command(scsi_common_t *sc, const uint8_t *cdb) } if (dev->sector_pos >= dev->drv->medium_size) - zip_lba_out_of_range(dev); + rdisk_lba_out_of_range(dev); if (dev->sector_len) { max_len = dev->sector_len; dev->requested_blocks = max_len; dev->packet_len = max_len * alloc_length; - zip_buf_alloc(dev, dev->packet_len); + rdisk_buf_alloc(dev, dev->packet_len); dev->requested_blocks = max_len; dev->packet_len = max_len << 9; - zip_set_buf_len(dev, BufLen, (int32_t *) &dev->packet_len); + rdisk_set_buf_len(dev, BufLen, (int32_t *) &dev->packet_len); - zip_data_command_finish(dev, dev->packet_len, 512, + rdisk_data_command_finish(dev, dev->packet_len, 512, dev->packet_len, 1); - ui_sb_update_icon_write(SB_ZIP | dev->id, + ui_sb_update_icon_write(SB_RDISK | dev->id, dev->packet_status != PHASE_COMPLETE); } else { - zip_set_phase(dev, SCSI_PHASE_STATUS); - /* zip_log(dev->log, "All done - callback set\n"); */ + rdisk_set_phase(dev, SCSI_PHASE_STATUS); + /* rdisk_log(dev->log, "All done - callback set\n"); */ dev->packet_status = PHASE_COMPLETE; - dev->callback = 20.0 * ZIP_TIME; - zip_set_callback(dev); + dev->callback = 20.0 * RDISK_TIME; + rdisk_set_callback(dev); } break; case GPCMD_WRITE_SAME_10: - zip_set_phase(dev, SCSI_PHASE_DATA_OUT); + rdisk_set_phase(dev, SCSI_PHASE_DATA_OUT); alloc_length = 512; if ((cdb[1] & 6) == 6) - zip_invalid_field(dev, cdb[1]); + rdisk_invalid_field(dev, cdb[1]); else { if (dev->drv->read_only) - zip_write_protected(dev); + rdisk_write_protected(dev); else { dev->sector_len = (cdb[7] << 8) | cdb[8]; dev->sector_pos = (cdb[2] << 24) | (cdb[3] << 16) | (cdb[4] << 8) | cdb[5]; if (dev->sector_pos >= dev->drv->medium_size) - zip_lba_out_of_range(dev); + rdisk_lba_out_of_range(dev); else if (dev->sector_len) { - zip_buf_alloc(dev, alloc_length); - zip_set_buf_len(dev, BufLen, (int32_t *) &dev->packet_len); + rdisk_buf_alloc(dev, alloc_length); + rdisk_set_buf_len(dev, BufLen, (int32_t *) &dev->packet_len); max_len = 1; dev->requested_blocks = 1; dev->packet_len = alloc_length; - zip_set_phase(dev, SCSI_PHASE_DATA_OUT); + rdisk_set_phase(dev, SCSI_PHASE_DATA_OUT); - zip_data_command_finish(dev, 512, 512, + rdisk_data_command_finish(dev, 512, 512, alloc_length, 1); - ui_sb_update_icon_write(SB_ZIP | dev->id, + ui_sb_update_icon_write(SB_RDISK | dev->id, dev->packet_status != PHASE_COMPLETE); } else { - zip_set_phase(dev, SCSI_PHASE_STATUS); - /* zip_log(dev->log, "All done - callback set\n"); */ + rdisk_set_phase(dev, SCSI_PHASE_STATUS); + /* rdisk_log(dev->log, "All done - callback set\n"); */ dev->packet_status = PHASE_COMPLETE; - dev->callback = 20.0 * ZIP_TIME; - zip_set_callback(dev); + dev->callback = 20.0 * RDISK_TIME; + rdisk_set_callback(dev); } } } @@ -1554,19 +1559,19 @@ zip_command(scsi_common_t *sc, const uint8_t *cdb) case GPCMD_MODE_SENSE_6: case GPCMD_MODE_SENSE_10: - zip_set_phase(dev, SCSI_PHASE_DATA_IN); + rdisk_set_phase(dev, SCSI_PHASE_DATA_IN); - if (dev->drv->bus_type == ZIP_BUS_SCSI) + if (dev->drv->bus_type == RDISK_BUS_SCSI) block_desc = ((cdb[1] >> 3) & 1) ? 0 : 1; else block_desc = 0; if (cdb[0] == GPCMD_MODE_SENSE_6) { len = cdb[4]; - zip_buf_alloc(dev, 256); + rdisk_buf_alloc(dev, 256); } else { len = (cdb[8] | (cdb[7] << 8)); - zip_buf_alloc(dev, 65536); + rdisk_buf_alloc(dev, 65536); } if (zip_mode_sense_page_flags & (1LL << (uint64_t) (cdb[2] & 0x3f))) { @@ -1574,16 +1579,16 @@ zip_command(scsi_common_t *sc, const uint8_t *cdb) alloc_length = len; if (cdb[0] == GPCMD_MODE_SENSE_6) { - len = zip_mode_sense(dev, dev->buffer, 4, cdb[2], - block_desc); + len = rdisk_mode_sense(dev, dev->buffer, 4, cdb[2], + block_desc); len = MIN(len, alloc_length); dev->buffer[0] = len - 1; dev->buffer[1] = 0; if (block_desc) dev->buffer[3] = 8; } else { - len = zip_mode_sense(dev, dev->buffer, 8, cdb[2], - block_desc); + len = rdisk_mode_sense(dev, dev->buffer, 8, cdb[2], + block_desc); len = MIN(len, alloc_length); dev->buffer[0] = (len - 2) >> 8; dev->buffer[1] = (len - 2) & 255; @@ -1594,70 +1599,70 @@ zip_command(scsi_common_t *sc, const uint8_t *cdb) } } - zip_set_buf_len(dev, BufLen, &len); + rdisk_set_buf_len(dev, BufLen, &len); - zip_log(dev->log, "Reading mode page: %02X...\n", cdb[2]); + rdisk_log(dev->log, "Reading mode page: %02X...\n", cdb[2]); - zip_data_command_finish(dev, len, len, alloc_length, 0); + rdisk_data_command_finish(dev, len, len, alloc_length, 0); } else { - zip_invalid_field(dev, cdb[2]); - zip_buf_free(dev); + rdisk_invalid_field(dev, cdb[2]); + rdisk_buf_free(dev); } break; case GPCMD_MODE_SELECT_6: case GPCMD_MODE_SELECT_10: - zip_set_phase(dev, SCSI_PHASE_DATA_OUT); + rdisk_set_phase(dev, SCSI_PHASE_DATA_OUT); if (cdb[0] == GPCMD_MODE_SELECT_6) { len = cdb[4]; - zip_buf_alloc(dev, 256); + rdisk_buf_alloc(dev, 256); } else { len = (cdb[7] << 8) | cdb[8]; - zip_buf_alloc(dev, 65536); + rdisk_buf_alloc(dev, 65536); } - zip_set_buf_len(dev, BufLen, &len); + rdisk_set_buf_len(dev, BufLen, &len); dev->total_length = len; dev->do_page_save = cdb[1] & 1; - zip_data_command_finish(dev, len, len, len, 1); + rdisk_data_command_finish(dev, len, len, len, 1); return; case GPCMD_START_STOP_UNIT: - zip_set_phase(dev, SCSI_PHASE_STATUS); + rdisk_set_phase(dev, SCSI_PHASE_STATUS); switch (cdb[4] & 3) { case 0: /* Stop the disc. */ - zip_eject(dev->id); /* The Iomega Windows 9x drivers require this. */ + rdisk_eject(dev->id); /* The Iomega Windows 9x drivers require this. */ break; case 1: /* Start the disc and read the TOC. */ break; case 2: /* Eject the disc if possible. */ #if 0 - zip_eject(dev->id); + rdisk_eject(dev->id); #endif break; case 3: /* Load the disc (close tray). */ - zip_reload(dev->id); + rdisk_reload(dev->id); break; default: break; } - zip_command_complete(dev); + rdisk_command_complete(dev); break; case GPCMD_INQUIRY: - zip_set_phase(dev, SCSI_PHASE_DATA_IN); + rdisk_set_phase(dev, SCSI_PHASE_DATA_IN); max_len = cdb[3]; max_len <<= 8; max_len |= cdb[4]; - zip_buf_alloc(dev, 65536); + rdisk_buf_alloc(dev, 65536); if (cdb[1] & 1) { preamble_len = 4; @@ -1676,8 +1681,8 @@ zip_command(scsi_common_t *sc, const uint8_t *cdb) break; case 0x83: if (idx + 24 > max_len) { - zip_data_phase_error(dev, cdb[2]); - zip_buf_free(dev); + rdisk_data_phase_error(dev, cdb[2]); + rdisk_buf_free(dev); return; } @@ -1695,21 +1700,26 @@ zip_command(scsi_common_t *sc, const uint8_t *cdb) dev->buffer[idx++] = 0x00; dev->buffer[idx++] = 68; /* Vendor */ - ide_padstr8(dev->buffer + idx, 8, "IOMEGA "); + if (dev->drv->type >= RDISK_TYPE_ZIP_100) + ide_padstr8(dev->buffer + idx, 8, "IOMEGA "); + else + ide_padstr8(dev->buffer + 8, 8, EMU_NAME); /* Vendor */ idx += 8; /* Product */ - if (dev->drv->is_250) + if (dev->drv->type == RDISK_TYPE_ZIP_250) ide_padstr8(dev->buffer + idx, 40, "ZIP 250 "); - else + else if (dev->drv->type == RDISK_TYPE_ZIP_100) ide_padstr8(dev->buffer + idx, 40, "ZIP 100 "); + else + ide_padstr8(dev->buffer + 16, 40, device_identify); /* Product */ idx += 40; ide_padstr8(dev->buffer + idx, 20, "53R141"); idx += 20; break; default: - zip_log(dev->log, "INQUIRY: Invalid page: %02X\n", cdb[2]); - zip_invalid_field(dev, cdb[2]); - zip_buf_free(dev); + rdisk_log(dev->log, "INQUIRY: Invalid page: %02X\n", cdb[2]); + rdisk_invalid_field(dev, cdb[2]); + rdisk_buf_free(dev); return; } } else { @@ -1723,20 +1733,20 @@ zip_command(scsi_common_t *sc, const uint8_t *cdb) dev->buffer[0] = 0x00; /* Hard disk */ dev->buffer[1] = 0x80; /* Removable */ /* SCSI-2 compliant */ - dev->buffer[2] = (dev->drv->bus_type == ZIP_BUS_SCSI) ? 0x02 : 0x00; - dev->buffer[3] = (dev->drv->bus_type == ZIP_BUS_SCSI) ? 0x02 : 0x21; + dev->buffer[2] = (dev->drv->bus_type == RDISK_BUS_SCSI) ? 0x02 : 0x00; + dev->buffer[3] = (dev->drv->bus_type == RDISK_BUS_SCSI) ? 0x02 : 0x21; #if 0 dev->buffer[4] = 31; #endif dev->buffer[4] = 0; - if (dev->drv->bus_type == ZIP_BUS_SCSI) { + if (dev->drv->bus_type == RDISK_BUS_SCSI) { dev->buffer[6] = 1; /* 16-bit transfers supported */ dev->buffer[7] = 0x20; /* Wide bus supported */ } dev->buffer[7] |= 0x02; ide_padstr8(dev->buffer + 8, 8, "IOMEGA "); /* Vendor */ - if (dev->drv->is_250) { + if (dev->drv->type == RDISK_TYPE_ZIP_250) { /* Product */ ide_padstr8(dev->buffer + 16, 16, "ZIP 250 "); /* Revision */ @@ -1746,11 +1756,18 @@ zip_command(scsi_common_t *sc, const uint8_t *cdb) ide_padstr8(dev->buffer + 36, 8, "08/08/01"); if (max_len >= 122) ide_padstr8(dev->buffer + 96, 26, "(c) Copyright IOMEGA 2000 "); /* Copyright string */ - } else { + } else if (dev->drv->type == RDISK_TYPE_ZIP_100) { /* Product */ ide_padstr8(dev->buffer + 16, 16, "ZIP 100 "); /* Revision */ ide_padstr8(dev->buffer + 32, 4, "E.08"); + } else { + ide_padstr8(dev->buffer + 8, 8, + EMU_NAME); /* Vendor */ + ide_padstr8(dev->buffer + 16, 16, + device_identify); /* Product */ + ide_padstr8(dev->buffer + 32, 4, + EMU_VERSION_EX); /* Revision */ } idx = 36; @@ -1768,19 +1785,19 @@ atapi_out: len = idx; len = MIN(len, max_len); - zip_set_buf_len(dev, BufLen, &len); + rdisk_set_buf_len(dev, BufLen, &len); - zip_data_command_finish(dev, len, len, max_len, 0); + rdisk_data_command_finish(dev, len, len, max_len, 0); break; case GPCMD_PREVENT_REMOVAL: - zip_set_phase(dev, SCSI_PHASE_STATUS); - zip_command_complete(dev); + rdisk_set_phase(dev, SCSI_PHASE_STATUS); + rdisk_command_complete(dev); break; case GPCMD_SEEK_6: case GPCMD_SEEK_10: - zip_set_phase(dev, SCSI_PHASE_STATUS); + rdisk_set_phase(dev, SCSI_PHASE_STATUS); switch (cdb[0]) { case GPCMD_SEEK_6: @@ -1793,14 +1810,14 @@ atapi_out: default: break; } - zip_seek(dev, pos); - zip_command_complete(dev); + rdisk_seek(dev, pos); + rdisk_command_complete(dev); break; case GPCMD_READ_CDROM_CAPACITY: - zip_set_phase(dev, SCSI_PHASE_DATA_IN); + rdisk_set_phase(dev, SCSI_PHASE_DATA_IN); - zip_buf_alloc(dev, 8); + rdisk_buf_alloc(dev, 8); /* IMPORTANT: What's returned is the last LBA block. */ max_len = dev->drv->medium_size - 1; @@ -1812,21 +1829,21 @@ atapi_out: dev->buffer[6] = 2; /* 512 = 0x0200 */ len = 8; - zip_set_buf_len(dev, BufLen, &len); + rdisk_set_buf_len(dev, BufLen, &len); - zip_data_command_finish(dev, len, len, len, 0); + rdisk_data_command_finish(dev, len, len, len, 0); break; case GPCMD_IOMEGA_EJECT: - zip_set_phase(dev, SCSI_PHASE_STATUS); - zip_eject(dev->id); - zip_command_complete(dev); + rdisk_set_phase(dev, SCSI_PHASE_STATUS); + rdisk_eject(dev->id); + rdisk_command_complete(dev); break; case GPCMD_READ_FORMAT_CAPACITIES: len = (cdb[7] << 8) | cdb[8]; - zip_buf_alloc(dev, len); + rdisk_buf_alloc(dev, len); memset(dev->buffer, 0, len); pos = 0; @@ -1841,7 +1858,18 @@ atapi_out: dev->buffer[pos++] = 8; /* Current/Maximum capacity header */ - if (dev->drv->is_250) { + if (dev->drv->type == RDISK_TYPE_ZIP_100) { + /* ZIP 100 only supports ZIP 100 media as well, so we always return + the ZIP 100 size. */ + dev->buffer[pos++] = (ZIP_SECTORS >> 24) & 0xff; + dev->buffer[pos++] = (ZIP_SECTORS >> 16) & 0xff; + dev->buffer[pos++] = (ZIP_SECTORS >> 8) & 0xff; + dev->buffer[pos++] = ZIP_SECTORS & 0xff; + if (dev->drv->fp != NULL) + dev->buffer[pos++] = 2; + else + dev->buffer[pos++] = 3; + } else { /* ZIP 250 also supports ZIP 100 media, so if the medium is inserted, we return the inserted medium's size, otherwise, the ZIP 250 size. */ if (dev->drv->fp != NULL) { @@ -1857,17 +1885,6 @@ atapi_out: dev->buffer[pos++] = ZIP_250_SECTORS & 0xff; dev->buffer[pos++] = 3; /* Maximum medium capacity */ } - } else { - /* ZIP 100 only supports ZIP 100 media as well, so we always return - the ZIP 100 size. */ - dev->buffer[pos++] = (ZIP_SECTORS >> 24) & 0xff; - dev->buffer[pos++] = (ZIP_SECTORS >> 16) & 0xff; - dev->buffer[pos++] = (ZIP_SECTORS >> 8) & 0xff; - dev->buffer[pos++] = ZIP_SECTORS & 0xff; - if (dev->drv->fp != NULL) - dev->buffer[pos++] = 2; - else - dev->buffer[pos++] = 3; } dev->buffer[pos++] = 512 >> 16; @@ -1886,39 +1903,39 @@ atapi_out: dev->buffer[pos++] = 512 & 0xff; } - zip_set_buf_len(dev, BufLen, &len); + rdisk_set_buf_len(dev, BufLen, &len); - zip_data_command_finish(dev, len, len, len, 0); + rdisk_data_command_finish(dev, len, len, len, 0); break; default: - zip_illegal_opcode(dev, cdb[0]); + rdisk_illegal_opcode(dev, cdb[0]); break; } #if 0 - zip_log(dev->log, "Phase: %02X, request length: %i\n", + rdisk_log(dev->log, "Phase: %02X, request length: %i\n", dev->tf->phase, dev->tf->request_length); #endif if ((dev->packet_status == PHASE_COMPLETE) || (dev->packet_status == PHASE_ERROR)) - zip_buf_free(dev); + rdisk_buf_free(dev); } static void -zip_command_stop(scsi_common_t *sc) +rdisk_command_stop(scsi_common_t *sc) { - zip_t *dev = (zip_t *) sc; + rdisk_t *dev = (rdisk_t *) sc; - zip_command_complete(dev); - zip_buf_free(dev); + rdisk_command_complete(dev); + rdisk_buf_free(dev); } /* The command second phase function, needed for Mode Select. */ static uint8_t -zip_phase_data_out(scsi_common_t *sc) +rdisk_phase_data_out(scsi_common_t *sc) { - zip_t *dev = (zip_t *) sc; + rdisk_t *dev = (rdisk_t *) sc; int len = 0; uint8_t error = 0; uint32_t last_to_write; @@ -1940,7 +1957,7 @@ zip_phase_data_out(scsi_common_t *sc) case GPCMD_WRITE_12: case GPCMD_WRITE_AND_VERIFY_12: if (dev->requested_blocks > 0) - zip_blocks(dev, &len, 1); + rdisk_blocks(dev, &len, 1); break; case GPCMD_WRITE_SAME_10: if (!dev->current_cdb[7] && !dev->current_cdb[8]) { @@ -1955,7 +1972,7 @@ zip_phase_data_out(scsi_common_t *sc) dev->buffer[2] = (i >> 8) & 0xff; dev->buffer[3] = i & 0xff; } else if (dev->current_cdb[1] & 4) { - /* CHS are 96, 1, 2048 (ZIP 100) and 239, 1, 2048 (ZIP 250) */ + /* CHS are 96, 1, 2048 (RDISK 100) and 239, 1, 2048 (RDISK 250) */ const uint32_t s = (i % 2048); const uint32_t h = ((i - s) / 2048) % 1; const uint32_t c = ((i - s) / 2048) / 1; @@ -1970,9 +1987,9 @@ zip_phase_data_out(scsi_common_t *sc) } if (fseek(dev->drv->fp, dev->drv->base + (i << 9), SEEK_SET) == -1) - log_fatal(dev->log, "zip_phase_data_out(): Error seeking\n"); + log_fatal(dev->log, "rdisk_phase_data_out(): Error seeking\n"); if (fwrite(dev->buffer, 1, 512, dev->drv->fp) != 512) - log_fatal(dev->log, "zip_phase_data_out(): Error writing data\n"); + log_fatal(dev->log, "rdisk_phase_data_out(): Error writing data\n"); } fflush(dev->drv->fp); @@ -1989,7 +2006,7 @@ zip_phase_data_out(scsi_common_t *sc) param_list_len = dev->current_cdb[4]; } - if (dev->drv->bus_type == ZIP_BUS_SCSI) { + if (dev->drv->bus_type == RDISK_BUS_SCSI) { if (dev->current_cdb[0] == GPCMD_MODE_SELECT_6) { block_desc_len = dev->buffer[2]; block_desc_len <<= 8; @@ -2006,7 +2023,7 @@ zip_phase_data_out(scsi_common_t *sc) while (1) { if (pos >= param_list_len) { - zip_log(dev->log, "Buffer has only block descriptor\n"); + rdisk_log(dev->log, "Buffer has only block descriptor\n"); break; } @@ -2026,26 +2043,26 @@ zip_phase_data_out(scsi_common_t *sc) dev->ms_pages_saved.pages[page][i + 2] = val; else { error |= 1; - zip_invalid_field_pl(dev, val); + rdisk_invalid_field_pl(dev, val); } } } pos += page_len; - if (dev->drv->bus_type == ZIP_BUS_SCSI) + if (dev->drv->bus_type == RDISK_BUS_SCSI) val = zip_mode_sense_pages_default_scsi.pages[page][0] & 0x80; else val = zip_mode_sense_pages_default.pages[page][0] & 0x80; if (dev->do_page_save && val) - zip_mode_sense_save(dev); + rdisk_mode_sense_save(dev); if (pos >= dev->total_length) break; } if (error) { - zip_buf_free(dev); + rdisk_buf_free(dev); return 0; } break; @@ -2054,20 +2071,20 @@ zip_phase_data_out(scsi_common_t *sc) break; } - zip_command_stop((scsi_common_t *) dev); + rdisk_command_stop((scsi_common_t *) dev); return 1; } /* Peform a master init on the entire module. */ void -zip_global_init(void) +rdisk_global_init(void) { /* Clear the global data. */ - memset(zip_drives, 0x00, sizeof(zip_drives)); + memset(rdisk_drives, 0x00, sizeof(rdisk_drives)); } static int -zip_get_max(UNUSED(const ide_t *ide), const int ide_has_dma, const int type) +rdisk_get_max(UNUSED(const ide_t *ide), const int ide_has_dma, const int type) { int ret; @@ -2091,7 +2108,7 @@ zip_get_max(UNUSED(const ide_t *ide), const int ide_has_dma, const int type) } static int -zip_get_timings(UNUSED(const ide_t *ide), const int ide_has_dma, const int type) +rdisk_get_timings(UNUSED(const ide_t *ide), const int ide_has_dma, const int type) { int ret; @@ -2114,14 +2131,14 @@ zip_get_timings(UNUSED(const ide_t *ide), const int ide_has_dma, const int type) } static void -zip_100_identify(const ide_t *ide) +rdisk_zip_100_identify(const ide_t *ide) { ide_padstr((char *) (ide->buffer + 23), "E.08", 8); /* Firmware */ ide_padstr((char *) (ide->buffer + 27), "IOMEGA ZIP 100 ATAPI", 40); /* Model */ } static void -zip_250_identify(const ide_t *ide, const int ide_has_dma) +rdisk_zip_250_identify(const ide_t *ide, const int ide_has_dma) { /* Firmware */ ide_padstr((char *) (ide->buffer + 23), "42.S", 8); @@ -2136,14 +2153,31 @@ zip_250_identify(const ide_t *ide, const int ide_has_dma) } static void -zip_identify(const ide_t *ide, const int ide_has_dma) +rdisk_generic_identify(const ide_t *ide, const int ide_has_dma, const rdisk_t *rdisk) { - const zip_t *zip = (zip_t *) ide->sc; + char model[40]; + + memset(model, 0, 40); + snprintf(model, 40, "%s %s%02i", EMU_NAME, "86B_RD", rdisk->id); + ide_padstr((char *) (ide->buffer + 23), EMU_VERSION_EX, 8); /* Firmware */ + ide_padstr((char *) (ide->buffer + 27), model, 40); /* Model */ + + if (ide_has_dma) { + ide->buffer[80] = 0x70; /* Supported ATA versions : ATA/ATAPI-4 ATA/ATAPI-6 */ + /* Maximum ATA revision supported : ATA/ATAPI-6 T13 1410D revision 3a */ + ide->buffer[81] = 0x19; + } +} + +static void +rdisk_identify(const ide_t *ide, const int ide_has_dma) +{ + const rdisk_t *rdisk = (rdisk_t *) ide->sc; /* ATAPI device, direct-access device, removable media, interrupt DRQ: - Using (2 << 5) below makes the ASUS P/I-P54TP4XE misdentify the ZIP drive + Using (2 << 5) below makes the ASUS P/I-P54TP4XE misdentify the RDISK drive as a LS-120. */ ide->buffer[0] = 0x8000 | (0 << 8) | 0x80 | (1 << 5); @@ -2152,50 +2186,52 @@ zip_identify(const ide_t *ide, const int ide_has_dma) /* Interpret zero byte count limit as maximum length */ ide->buffer[126] = 0xfffe; - if (zip_drives[zip->id].is_250) - zip_250_identify(ide, ide_has_dma); + if (rdisk_drives[rdisk->id].type == RDISK_TYPE_ZIP_250) + rdisk_zip_250_identify(ide, ide_has_dma); + else if (rdisk_drives[rdisk->id].type == RDISK_TYPE_ZIP_100) + rdisk_zip_100_identify(ide); else - zip_100_identify(ide); + rdisk_generic_identify(ide, ide_has_dma, rdisk); } static void -zip_drive_reset(const int c) +rdisk_drive_reset(const int c) { - const uint8_t scsi_bus = (zip_drives[c].scsi_device_id >> 4) & 0x0f; - const uint8_t scsi_id = zip_drives[c].scsi_device_id & 0x0f; + const uint8_t scsi_bus = (rdisk_drives[c].scsi_device_id >> 4) & 0x0f; + const uint8_t scsi_id = rdisk_drives[c].scsi_device_id & 0x0f; - if (zip_drives[c].priv == NULL) { - zip_drives[c].priv = (zip_t *) calloc(1, sizeof(zip_t)); - zip_t *dev = (zip_t *) zip_drives[c].priv; + if (rdisk_drives[c].priv == NULL) { + rdisk_drives[c].priv = (rdisk_t *) calloc(1, sizeof(rdisk_t)); + rdisk_t *dev = (rdisk_t *) rdisk_drives[c].priv; char n[1024] = { 0 }; - sprintf(n, "ZIP %i", c + 1); + sprintf(n, "Removable Disk %i", c + 1); dev->log = log_open(n); } - zip_t *dev = (zip_t *) zip_drives[c].priv; + rdisk_t *dev = (rdisk_t *) rdisk_drives[c].priv; dev->id = c; dev->cur_lun = SCSI_LUN_USE_CDB; - if (zip_drives[c].bus_type == ZIP_BUS_SCSI) { + if (rdisk_drives[c].bus_type == RDISK_BUS_SCSI) { if (dev->tf == NULL) dev->tf = (ide_tf_t *) calloc(1, sizeof(ide_tf_t)); - /* SCSI ZIP, attach to the SCSI bus. */ + /* SCSI RDISK, attach to the SCSI bus. */ scsi_device_t *sd = &scsi_devices[scsi_bus][scsi_id]; sd->sc = (scsi_common_t *) dev; - sd->command = zip_command; - sd->request_sense = zip_request_sense_for_scsi; - sd->reset = zip_reset; - sd->phase_data_out = zip_phase_data_out; - sd->command_stop = zip_command_stop; + sd->command = rdisk_command; + sd->request_sense = rdisk_request_sense_for_scsi; + sd->reset = rdisk_reset; + sd->phase_data_out = rdisk_phase_data_out; + sd->command_stop = rdisk_command_stop; sd->type = SCSI_REMOVABLE_DISK; - } else if (zip_drives[c].bus_type == ZIP_BUS_ATAPI) { + } else if (rdisk_drives[c].bus_type == RDISK_BUS_ATAPI) { /* ATAPI CD-ROM, attach to the IDE bus. */ - ide_t *id = ide_get_drive(zip_drives[c].ide_channel); + ide_t *id = ide_get_drive(rdisk_drives[c].ide_channel); /* If the IDE channel is initialized, we attach to it, otherwise, we do nothing - it's going to be a drive that's not attached to anything. */ @@ -2203,15 +2239,15 @@ zip_drive_reset(const int c) id->sc = (scsi_common_t *) dev; dev->tf = id->tf; IDE_ATAPI_IS_EARLY = 0; - id->get_max = zip_get_max; - id->get_timings = zip_get_timings; - id->identify = zip_identify; + id->get_max = rdisk_get_max; + id->get_timings = rdisk_get_timings; + id->identify = rdisk_identify; id->stop = NULL; - id->packet_command = zip_command; - id->device_reset = zip_reset; - id->phase_data_out = zip_phase_data_out; - id->command_stop = zip_command_stop; - id->bus_master_error = zip_bus_master_error; + id->packet_command = rdisk_command; + id->device_reset = rdisk_reset; + id->phase_data_out = rdisk_phase_data_out; + id->command_stop = rdisk_command_stop; + id->bus_master_error = rdisk_bus_master_error; id->interrupt_drq = 1; ide_atapi_attach(id); @@ -2220,85 +2256,85 @@ zip_drive_reset(const int c) } void -zip_hard_reset(void) +rdisk_hard_reset(void) { - for (uint8_t c = 0; c < ZIP_NUM; c++) { - if ((zip_drives[c].bus_type == ZIP_BUS_ATAPI) || (zip_drives[c].bus_type == ZIP_BUS_SCSI)) { + for (uint8_t c = 0; c < RDISK_NUM; c++) { + if ((rdisk_drives[c].bus_type == RDISK_BUS_ATAPI) || (rdisk_drives[c].bus_type == RDISK_BUS_SCSI)) { - if (zip_drives[c].bus_type == ZIP_BUS_SCSI) { - const uint8_t scsi_bus = (zip_drives[c].scsi_device_id >> 4) & 0x0f; - const uint8_t scsi_id = zip_drives[c].scsi_device_id & 0x0f; + if (rdisk_drives[c].bus_type == RDISK_BUS_SCSI) { + const uint8_t scsi_bus = (rdisk_drives[c].scsi_device_id >> 4) & 0x0f; + const uint8_t scsi_id = rdisk_drives[c].scsi_device_id & 0x0f; - /* Make sure to ignore any SCSI ZIP drive that has an out of range SCSI bus. */ + /* Make sure to ignore any SCSI RDISK drive that has an out of range SCSI bus. */ if (scsi_bus >= SCSI_BUS_MAX) continue; - /* Make sure to ignore any SCSI ZIP drive that has an out of range ID. */ + /* Make sure to ignore any SCSI RDISK drive that has an out of range ID. */ if (scsi_id >= SCSI_ID_MAX) continue; } - /* Make sure to ignore any ATAPI ZIP drive that has an out of range IDE channel. */ - if ((zip_drives[c].bus_type == ZIP_BUS_ATAPI) && (zip_drives[c].ide_channel > 7)) + /* Make sure to ignore any ATAPI RDISK drive that has an out of range IDE channel. */ + if ((rdisk_drives[c].bus_type == RDISK_BUS_ATAPI) && (rdisk_drives[c].ide_channel > 7)) continue; - zip_drive_reset(c); + rdisk_drive_reset(c); - zip_t *dev = (zip_t *) zip_drives[c].priv; + rdisk_t *dev = (rdisk_t *) rdisk_drives[c].priv; - zip_log(dev->log, "ZIP hard_reset drive=%d\n", c); + rdisk_log(dev->log, "Removable Disk hard_reset drive=%d\n", c); if (dev->tf == NULL) continue; dev->id = c; - dev->drv = &zip_drives[c]; + dev->drv = &rdisk_drives[c]; - zip_init(dev); + rdisk_init(dev); - if (strlen(zip_drives[c].image_path)) - zip_load(dev, zip_drives[c].image_path, 0); + if (strlen(rdisk_drives[c].image_path)) + rdisk_load(dev, rdisk_drives[c].image_path, 0); - zip_mode_sense_load(dev); + rdisk_mode_sense_load(dev); - if (zip_drives[c].bus_type == ZIP_BUS_SCSI) - zip_log(dev->log, "SCSI ZIP drive %i attached to SCSI ID %i\n", - c, zip_drives[c].scsi_device_id); - else if (zip_drives[c].bus_type == ZIP_BUS_ATAPI) - zip_log(dev->log, "ATAPI ZIP drive %i attached to IDE channel %i\n", - c, zip_drives[c].ide_channel); + if (rdisk_drives[c].bus_type == RDISK_BUS_SCSI) + rdisk_log(dev->log, "SCSI RDISK drive %i attached to SCSI ID %i\n", + c, rdisk_drives[c].scsi_device_id); + else if (rdisk_drives[c].bus_type == RDISK_BUS_ATAPI) + rdisk_log(dev->log, "ATAPI RDISK drive %i attached to IDE channel %i\n", + c, rdisk_drives[c].ide_channel); } } } void -zip_close(void) +rdisk_close(void) { - for (uint8_t c = 0; c < ZIP_NUM; c++) { - if (zip_drives[c].bus_type == ZIP_BUS_SCSI) { - const uint8_t scsi_bus = (zip_drives[c].scsi_device_id >> 4) & 0x0f; - const uint8_t scsi_id = zip_drives[c].scsi_device_id & 0x0f; + for (uint8_t c = 0; c < RDISK_NUM; c++) { + if (rdisk_drives[c].bus_type == RDISK_BUS_SCSI) { + const uint8_t scsi_bus = (rdisk_drives[c].scsi_device_id >> 4) & 0x0f; + const uint8_t scsi_id = rdisk_drives[c].scsi_device_id & 0x0f; memset(&scsi_devices[scsi_bus][scsi_id], 0x00, sizeof(scsi_device_t)); } - zip_t *dev = (zip_t *) zip_drives[c].priv; + rdisk_t *dev = (rdisk_t *) rdisk_drives[c].priv; if (dev) { - zip_disk_unload(dev); + rdisk_disk_unload(dev); if (dev->tf) free(dev->tf); if (dev->log != NULL) { - zip_log(dev->log, "Log closed\n"); + rdisk_log(dev->log, "Log closed\n"); log_close(dev->log); dev->log = NULL; } free(dev); - zip_drives[c].priv = NULL; + rdisk_drives[c].priv = NULL; } } } diff --git a/src/floppy/fdc.c b/src/floppy/fdc.c index 523ae6948..6f23eea9d 100644 --- a/src/floppy/fdc.c +++ b/src/floppy/fdc.c @@ -335,14 +335,17 @@ fdc_int(fdc_t *fdc, int set_fintr) { int ienable = 0; - if (!(fdc->flags & FDC_FLAG_PCJR)) + if (fdc->flags & FDC_FLAG_PS2_MCA) + ienable = 1; + else if (!(fdc->flags & FDC_FLAG_PCJR)) ienable = !!(fdc->dor & 8); - if (ienable) + if (ienable) { picint(1 << fdc->irq); - if (set_fintr) - fdc->fintr = 1; + if (set_fintr) + fdc->fintr = 1; + } fdc_log("fdc_int(%i): fdc->fintr = %i\n", set_fintr, fdc->fintr); } @@ -762,9 +765,17 @@ fdc_write(uint16_t addr, uint8_t val, void *priv) fdc->st0 &= ~0x07; fdc->st0 |= (fdd_get_head(0) ? 4 : 0); } else { - if (!(val & 8) && (fdc->dor & 8)) { - fdc->tc = 1; - fdc_int(fdc, 1); + /* + Writing this bit to logic "1" will enable the DRQ, + nDACK, TC and FINTR outputs. This bit being a + logic "0" will disable the nDACK and TC inputs, and + hold the DRQ and FINTR outputs in a high + impedance state. + */ + if (!(val & 8) && (fdc->dor & 8) && !(fdc->flags & FDC_FLAG_PS2_MCA)) { + fdc->tc = 1; + fdc->fintr = 0; + picintc(1 << fdc->irq); } if (!(val & 4)) { fdd_stop(real_drive(fdc, val & 3)); diff --git a/src/floppy/fdc_magitronic.c b/src/floppy/fdc_magitronic.c index 17e556e0f..a1ee922da 100644 --- a/src/floppy/fdc_magitronic.c +++ b/src/floppy/fdc_magitronic.c @@ -110,7 +110,7 @@ static const device_config_t b215_config[] = { // clang-format off { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0xca000, diff --git a/src/floppy/fdc_monster.c b/src/floppy/fdc_monster.c index 04536520f..38ad9e2ed 100644 --- a/src/floppy/fdc_monster.c +++ b/src/floppy/fdc_monster.c @@ -162,7 +162,7 @@ static const device_config_t monster_fdc_config[] = { #endif { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0xc8000, diff --git a/src/floppy/fdc_pii15xb.c b/src/floppy/fdc_pii15xb.c index 4e6a8367c..4c8c589e4 100644 --- a/src/floppy/fdc_pii15xb.c +++ b/src/floppy/fdc_pii15xb.c @@ -123,7 +123,7 @@ static const device_config_t pii_config[] = { // clang-format off { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0xce000, diff --git a/src/floppy/fdd.c b/src/floppy/fdd.c index dd87c19c0..8bc946388 100644 --- a/src/floppy/fdd.c +++ b/src/floppy/fdd.c @@ -539,7 +539,7 @@ fdd_hole(int drive) static __inline uint64_t fdd_byteperiod(int drive) { - if (!fdd_get_turbo(drive) && drives[drive].byteperiod) + if (drives[drive].byteperiod) return drives[drive].byteperiod(drive); else return 32ULL * TIMER_USEC; diff --git a/src/floppy/fdd_86f.c b/src/floppy/fdd_86f.c index 24fde57b1..f210bf4fd 100644 --- a/src/floppy/fdd_86f.c +++ b/src/floppy/fdd_86f.c @@ -758,36 +758,43 @@ d86f_get_encoding(int drive) uint64_t d86f_byteperiod(int drive) { - double dusec = (double) TIMER_USEC; - double p = 2.0; + d86f_t *dev = d86f[drive]; + uint64_t ret = 32ULL * TIMER_USEC; - switch (d86f_track_flags(drive) & 0x0f) { - case 0x02: /* 125 kbps, FM */ - p = 4.0; - break; - case 0x01: /* 150 kbps, FM */ - p = 20.0 / 6.0; - break; - case 0x0a: /* 250 kbps, MFM */ - case 0x00: /* 250 kbps, FM */ - default: - p = 2.0; - break; - case 0x09: /* 300 kbps, MFM */ - p = 10.0 / 6.0; - break; - case 0x08: /* 500 kbps, MFM */ - p = 1.0; - break; - case 0x0b: /* 1000 kbps, MFM */ - p = 0.5; - break; - case 0x0d: /* 2000 kbps, MFM */ - p = 0.25; - break; + if (!fdd_get_turbo(drive) || (dev->version != 0x0063) || (dev->state == STATE_SECTOR_NOT_FOUND)) { + double dusec = (double) TIMER_USEC; + double p = 2.0; + + switch (d86f_track_flags(drive) & 0x0f) { + case 0x02: /* 125 kbps, FM */ + p = 4.0; + break; + case 0x01: /* 150 kbps, FM */ + p = 20.0 / 6.0; + break; + case 0x0a: /* 250 kbps, MFM */ + case 0x00: /* 250 kbps, FM */ + default: + p = 2.0; + break; + case 0x09: /* 300 kbps, MFM */ + p = 10.0 / 6.0; + break; + case 0x08: /* 500 kbps, MFM */ + p = 1.0; + break; + case 0x0b: /* 1000 kbps, MFM */ + p = 0.5; + break; + case 0x0d: /* 2000 kbps, MFM */ + p = 0.25; + break; + } + + ret = (uint64_t) (p * dusec); } - return (uint64_t) (p * dusec); + return ret; } int @@ -2463,16 +2470,17 @@ d86f_poll(int drive) dev->state = STATE_SECTOR_NOT_FOUND; } - if (fdd_get_turbo(drive) && (dev->version == 0x0063)) { - d86f_turbo_poll(drive, side); - return; - } - if ((dev->state != STATE_IDLE) && (dev->state != STATE_SECTOR_NOT_FOUND) && ((dev->state & 0xF8) != 0xE8)) { if (!d86f_can_read_address(drive)) dev->state = STATE_SECTOR_NOT_FOUND; } + /* Do normal poll if DENSEL is wrong, because Windows 95 is very strict about timings there. */ + if (fdd_get_turbo(drive) && (dev->version == 0x0063) && (dev->state != STATE_SECTOR_NOT_FOUND)) { + d86f_turbo_poll(drive, side); + return; + } + if ((dev->state != STATE_02_SPIN_TO_INDEX) && (dev->state != STATE_0D_SPIN_TO_INDEX)) d86f_get_bit(drive, side ^ 1); @@ -2577,12 +2585,6 @@ d86f_poll(int drive) d86f_advance_bit(drive, side); - if (d86f_wrong_densel(drive) && (dev->state != STATE_IDLE)) { - dev->state = STATE_IDLE; - fdc_noidam(d86f_fdc); - return; - } - if ((dev->index_count == 2) && (dev->state != STATE_IDLE)) { switch (dev->state) { case STATE_0A_FIND_ID: @@ -3277,7 +3279,12 @@ d86f_readsector(int drive, int sector, int track, int side, int rate, int sector if (!ret) return; - if (sector == SECTOR_FIRST) + if (d86f_wrong_densel(drive)) { + dev->state = STATE_SECTOR_NOT_FOUND; + + if (fdd_get_turbo(drive)) + dev->track_pos = 0; + } else if (sector == SECTOR_FIRST) dev->state = STATE_02_SPIN_TO_INDEX; else if (sector == SECTOR_NEXT) dev->state = STATE_02_FIND_ID; @@ -3302,7 +3309,13 @@ d86f_writesector(int drive, int sector, int track, int side, int rate, int secto if (!ret) return; - dev->state = fdc_is_deleted(d86f_fdc) ? STATE_09_FIND_ID : STATE_05_FIND_ID; + if (d86f_wrong_densel(drive)) { + dev->state = STATE_SECTOR_NOT_FOUND; + + if (fdd_get_turbo(drive)) + dev->track_pos = 0; + } else + dev->state = fdc_is_deleted(d86f_fdc) ? STATE_09_FIND_ID : STATE_05_FIND_ID; } void @@ -3315,7 +3328,13 @@ d86f_comparesector(int drive, int sector, int track, int side, int rate, int sec if (!ret) return; - dev->state = STATE_11_FIND_ID; + if (d86f_wrong_densel(drive)) { + dev->state = STATE_SECTOR_NOT_FOUND; + + if (fdd_get_turbo(drive)) + dev->track_pos = 0; + } else + dev->state = STATE_11_FIND_ID; } void @@ -3336,7 +3355,13 @@ d86f_readaddress(int drive, UNUSED(int side), UNUSED(int rate)) dev->id_found = 0; dev->dma_over = 0; - dev->state = STATE_0A_FIND_ID; + if (d86f_wrong_densel(drive)) { + dev->state = STATE_SECTOR_NOT_FOUND; + + if (fdd_get_turbo(drive)) + dev->track_pos = 0; + } else + dev->state = STATE_0A_FIND_ID; } void @@ -3438,7 +3463,13 @@ d86f_common_format(int drive, int side, UNUSED(int rate), uint8_t fill, int prox dev->index_count = dev->error_condition = dev->satisfying_bytes = dev->sector_count = 0; dev->dma_over = 0; - dev->state = STATE_0D_SPIN_TO_INDEX; + if (d86f_wrong_densel(drive) && !proxy) { + dev->state = STATE_SECTOR_NOT_FOUND; + + if (fdd_get_turbo(drive)) + dev->track_pos = 0; + } else + dev->state = STATE_0D_SPIN_TO_INDEX; } void diff --git a/src/include/86box/cdrom.h b/src/include/86box/cdrom.h index ebfc2722e..f98b60983 100644 --- a/src/include/86box/cdrom.h +++ b/src/include/86box/cdrom.h @@ -29,8 +29,9 @@ #define CD_STATUS_STOPPED 6 #define CD_STATUS_PLAYING_COMPLETED 7 #define CD_STATUS_HOLD 8 +#define CD_STATUS_DVD_REJECTED 16 #define CD_STATUS_HAS_AUDIO 0xc -#define CD_STATUS_MASK 0xf +#define CD_STATUS_MASK 0x1f /* Medium changed flag. */ #define CD_STATUS_TRANSITION 0x40 @@ -93,13 +94,19 @@ extern "C" { #endif enum { - CDROM_BUS_DISABLED = 0, - CDROM_BUS_ATAPI = 5, - CDROM_BUS_SCSI = 6, - CDROM_BUS_MITSUMI = 7, - CDROM_BUS_USB = 8 + CDROM_BUS_DISABLED = 0, + CDROM_BUS_PHILIPS = 1, + CDROM_BUS_SONY = 2, + CDROM_BUS_HITACHI = 3, + CDROM_BUS_MKE = 4, + CDROM_BUS_MITSUMI = 5, + CDROM_BUS_LPT = 6, + CDROM_BUS_ATAPI = 8, + CDROM_BUS_SCSI = 9, + CDROM_BUS_USB = 10 }; +#define BUS_TYPE_MKE CDROM_BUS_MKE #define BUS_TYPE_IDE CDROM_BUS_ATAPI #define BUS_TYPE_SCSI CDROM_BUS_SCSI #define BUS_TYPE_BOTH -2 @@ -118,107 +125,112 @@ static const struct cdrom_drive_types_s { const int speed; const int inquiry_len; const int caddy; + const int is_dvd; const int transfer_max[4]; } cdrom_drive_types[] = { - { EMU_NAME, "86B_CD", CDV, "86cd", BUS_TYPE_BOTH, 2, -1, 36, 0, { 4, 2, 2, 5 } }, + { EMU_NAME, "86B_CD", CDV, "86cd", BUS_TYPE_BOTH, 2, -1, 36, 0, 0, { 4, 2, 2, 5 } }, /* SCSI-1 / early ATAPI generic - second on purpose so the later variant is the default. */ - { EMU_NAME, "86B_CD", "1.00", "86cd100", BUS_TYPE_BOTH, 1, -1, 36, 1, { 0, -1, -1, -1 } }, + { EMU_NAME, "86B_CD", "1.00", "86cd100", BUS_TYPE_BOTH, 1, -1, 36, 1, 0, { 0, -1, -1, -1 } }, /* No difference from 86BOX CD-ROM, other than name - but enough people have requested such a name to warrant it. */ - { EMU_NAME, "86B_DVD", "4.30", "86dvd", BUS_TYPE_BOTH, 2, -1, 36, 0, { 4, 2, 2, 5 } }, - { "ASUS", "CD-S500/A", "1.41", "asus_500", BUS_TYPE_IDE, 0, 50, 36, 0, { 4, 2, 2, 2 } }, - { "ASUS", "CD-S520/A4", "1.32", "asus_520", BUS_TYPE_IDE, 0, 52, 36, 0, { 4, 2, 2, 2 } }, - { "AZT", "CDA46802I", "1.15", "azt_cda", BUS_TYPE_IDE, 0, 4, 36, 0, { 3, 0, 0, 0 } }, - { "BTC", "CD-ROM BCD36XH", "U1.0", "btc_36xh", BUS_TYPE_IDE, 0, 36, 36, 0, { 4, 2, 2, -1 } }, - { "GOLDSTAR", "CRD-8160B", "3.14", "goldstar", BUS_TYPE_IDE, 0, 16, 36, 0, { 4, 2, 2, -1 } }, + { EMU_NAME, "86B_DVD", "5.00", "86dvd", BUS_TYPE_BOTH, 2, -1, 36, 0, 1, { 4, 2, 2, 5 } }, + { "ASUS", "CD-S500/A", "1.41", "asus_500", BUS_TYPE_IDE, 0, 50, 36, 0, 0, { 4, 2, 2, 2 } }, + { "ASUS", "CD-S520/A4", "1.32", "asus_520", BUS_TYPE_IDE, 0, 52, 36, 0, 0, { 4, 2, 2, 2 } }, + { "AZT", "CDA46802I", "1.15", "azt_cda", BUS_TYPE_IDE, 0, 4, 36, 0, 0, { 3, 0, 0, 0 } }, + { "BTC", "CD-ROM BCD36XH", "U1.0", "btc_36xh", BUS_TYPE_IDE, 0, 36, 36, 0, 0, { 4, 2, 2, -1 } }, + { "GOLDSTAR", "CRD-8160B", "3.14", "goldstar", BUS_TYPE_IDE, 0, 16, 36, 0, 0, { 4, 2, 2, -1 } }, /* TODO: Find an IDENTIFY and/or INQUIRY dump. */ - { "GOLDSTAR", "GCD-R560B", "1.00", "goldstar", BUS_TYPE_IDE, 0, 6, 36, 0, { 4, 2, 2, -1 } }, - { "HITACHI", "CDR-8130", "0020", "hitachi_r8130", BUS_TYPE_IDE, 0, 16, 36, 0, { 4, 2, 2, -1 } }, - { "HITACHI", "GD-7500", "A1 ", "hitachi_7500", BUS_TYPE_IDE, 0, 40, 36, 0, { 4, 2, 2, 2 } }, /* DVD. */ - { "HL-DT-ST", "CD-ROM GCR-8526B", "1.01", "hldtst_8526b", BUS_TYPE_IDE, 0, 52, 36, 0, { 4, 2, 2, 2 } }, - { "HL-DT-ST", "DVDRAM GSA-4160", "A302", "hldtst_4160", BUS_TYPE_IDE, 0, 40, 36, 0, { 4, 2, 2, 2 } }, - { "KENWOOD", "CD-ROM UCR-421", "208E", "kenwood_421", BUS_TYPE_IDE, 0, 72, 36, 0, { 4, 2, 2, 4 } }, + { "GOLDSTAR", "GCD-R560B", "1.00", "goldstar", BUS_TYPE_IDE, 0, 6, 36, 0, 0, { 4, 2, 2, -1 } }, + { "HITACHI", "CDR-8130", "0020", "hitachi_r8130", BUS_TYPE_IDE, 0, 16, 36, 0, 0, { 4, 2, 2, -1 } }, + { "HITACHI", "GD-7500", "A1 ", "hitachi_7500", BUS_TYPE_IDE, 0, 40, 36, 0, 0, { 4, 2, 2, 2 } }, /* DVD. */ + { "HL-DT-ST", "CD-ROM GCR-8526B", "1.01", "hldtst_8526b", BUS_TYPE_IDE, 0, 52, 36, 0, 0, { 4, 2, 2, 2 } }, + { "HL-DT-ST", "DVDRAM GSA-4160", "A302", "hldtst_4160", BUS_TYPE_IDE, 0, 40, 36, 0, 0, { 4, 2, 2, 2 } }, + { "KENWOOD", "CD-ROM UCR-421", "208E", "kenwood_421", BUS_TYPE_IDE, 0, 72, 36, 0, 0, { 4, 2, 2, 4 } }, /* This is a laptop/notebook drive, as is also evident from the name: CRN = Notebook, CRD = Desktop. */ - { "LG", "CD-ROM CRN-8245B", "1.30", "lg_8245b", BUS_TYPE_IDE, 0, 24, 36, 0, { 4, 2, 2, -1 } }, - { "LG", "CD-ROM CRD-8322B", "1.06", "lg_8322b", BUS_TYPE_IDE, 0, 32, 36, 0, { 4, 2, 2, -1 } }, + { "LG", "CD-ROM CRN-8245B", "1.30", "lg_8245b", BUS_TYPE_IDE, 0, 24, 36, 0, 0, { 4, 2, 2, -1 } }, + { "LG", "CD-ROM CRD-8322B", "1.06", "lg_8322b", BUS_TYPE_IDE, 0, 32, 36, 0, 0, { 4, 2, 2, -1 } }, /* Nothing on Google, deduced 48x from the name. */ - { "LITE-ON", "LTN48125S", "1S07", "liteon_48125s", BUS_TYPE_IDE, 0, 48, 36, 0, { 4, 2, 2, 2 } }, + { "LITE-ON", "LTN48125S", "1S07", "liteon_48125s", BUS_TYPE_IDE, 0, 48, 36, 0, 0, { 4, 2, 2, 2 } }, /* Confirmed to be 52x, was the basis for deducing the other one's speed. */ - { "LITE-ON", "LTN526D", "YSR5", "liteon_526d", BUS_TYPE_IDE, 0, 52, 36, 0, { 4, 2, 2, 2 } }, - { "MATSHITA", "CD-ROM CR-583", "1.07", "matshita_583", BUS_TYPE_IDE, 0, 8, 36, 0, { 4, 2, 2, -1 } }, - { "MATSHITA", "CD-ROM CR-585", "Z18P", "matshita_585", BUS_TYPE_IDE, 0, 24, 36, 0, { 4, 2, 2, -1 } }, - { "MATSHITA", "CD-ROM CR-587", "7S13", "matshita_587", BUS_TYPE_IDE, 0, 24, 36, 0, { 4, 2, 2, -1 } }, - { "MATSHITA", "CD-ROM CR-588", "LS15", "matshita_588", BUS_TYPE_IDE, 0, 32, 36, 0, { 4, 2, 2, -1 } }, - { "MATSHITA", "CR-571", "1.0e", "matshita_571", BUS_TYPE_IDE, 0, 2, 36, 0, { 0, -1, -1, -1 } }, - { "MATSHITA", "CR-572", "1.0j", "matshita_572", BUS_TYPE_IDE, 0, 4, 36, 0, { 0, -1, -1, -1 } }, - { "MITSUMI", "CRMC-FX4820T", "D02A", "mitsumi_4820t", BUS_TYPE_IDE, 0, 48, 36, 0, { 4, 2, 2, 2 } }, + { "LITE-ON", "LTN526D", "YSR5", "liteon_526d", BUS_TYPE_IDE, 0, 52, 36, 0, 0, { 4, 2, 2, 2 } }, + { "MATSHITA", "CD-ROM CR-583", "1.07", "matshita_583", BUS_TYPE_IDE, 0, 8, 36, 0, 0, { 4, 2, 2, -1 } }, + { "MATSHITA", "CD-ROM CR-585", "Z18P", "matshita_585", BUS_TYPE_IDE, 0, 24, 36, 0, 0, { 4, 2, 2, -1 } }, + { "MATSHITA", "CD-ROM CR-587", "7S13", "matshita_587", BUS_TYPE_IDE, 0, 24, 36, 0, 0, { 4, 2, 2, -1 } }, + { "MATSHITA", "CD-ROM CR-588", "LS15", "matshita_588", BUS_TYPE_IDE, 0, 32, 36, 0, 0, { 4, 2, 2, -1 } }, + { "MATSHITA", "CR-571", "1.0e", "matshita_571", BUS_TYPE_IDE, 0, 2, 36, 0, 0, { 0, -1, -1, -1 } }, + { "MATSHITA", "CR-572", "1.0j", "matshita_572", BUS_TYPE_IDE, 0, 4, 36, 0, 0, { 0, -1, -1, -1 } }, + { "MITSUMI", "CRMC-FX4820T", "D02A", "mitsumi_4820t", BUS_TYPE_IDE, 0, 48, 36, 0, 0, { 4, 2, 2, 2 } }, /* TODO: Find an IDENTIFY and/or INQUIRY dump. */ - { "MITSUMI", "CRMC-FX810T4", "????", "mitsumi_810t4", BUS_TYPE_IDE, 0, 8, 36, 0, { 4, 2, 2, -1 } }, - { "NEC", "CD-ROM DRIVE:260", "1.00", "nec_260_early", BUS_TYPE_IDE, 1, 2, 36, 1, { 0, -1, -1, -1 } }, - { "NEC", "CD-ROM DRIVE:260", "1.01", "nec_260", BUS_TYPE_IDE, 1, 4, 36, 1, { 0, -1, -1, -1 } }, - { "NEC", "CD-ROM DRIVE:273", "4.20", "nec_273", BUS_TYPE_IDE, 0, 4, 36, 0, { 0, -1, -1, -1 } }, - { "NEC", "CD-ROM DRIVE:280", "1.05", "nec_280_early", BUS_TYPE_IDE, 0, 6, 36, 1, { 4, 2, 2, -1 } }, - { "NEC", "CD-ROM DRIVE:280", "3.08", "nec_280", BUS_TYPE_IDE, 0, 8, 36, 1, { 4, 2, 2, -1 } }, - { "NEC", "CDR-1300A", "1.05", "nec_1300a", BUS_TYPE_IDE, 0, 6, 36, 0, { 4, 2, 2, -1 } }, - { "NEC", "CDR-1900A", "1.00", "nec_1900a", BUS_TYPE_IDE, 0, 32, 36, 0, { 4, 2, 2, -1 } }, - { "PHILIPS", "CD-ROM PCA403CD", "U31P", "philips_403", BUS_TYPE_IDE, 0, 40, 36, 0, { 4, 2, 2, -1 } }, - { "SONY", "CD-ROM CDU76", "1.0i", "sony_76", BUS_TYPE_IDE, 0, 4, 36, 0, { 2, -1, -1, -1 } }, - { "SONY", "CD-ROM CDU311", "3.0h", "sony_311", BUS_TYPE_IDE, 0, 8, 36, 0, { 3, 2, 1, -1 } }, - { "SONY", "CD-ROM CDU5225", "NYS4", "sony_5225", BUS_TYPE_IDE, 0, 52, 36, 0, { 4, 2, 2, 4 } }, - { "TEAC", "CD-516E", "1.0G", "teac_516e", BUS_TYPE_IDE, 0, 16, 36, 0, { 3, 2, 2, -1 } }, - { "TEAC", "CD-524EA", "3.0D", "teac_524ea", BUS_TYPE_IDE, 0, 24, 36, 0, { 3, 2, 2, -1 } }, - { "TEAC", "CD-532E", "2.0A", "teac_532e", BUS_TYPE_IDE, 0, 32, 36, 0, { 3, 2, 2, -1 } }, - { "TOSHIBA", "CD-ROM XM-5302TA", "0305", "toshiba_5302ta", BUS_TYPE_IDE, 0, 4, 96, 0, { 0, -1, -1, -1 } }, - { "TOSHIBA", "CD-ROM XM-5702B", "TA70", "toshiba_5702b", BUS_TYPE_IDE, 0, 12, 96, 0, { 3, 2, 1, -1 } }, - { "TOSHIBA", "CD-ROM XM-6202B", "1512", "toshiba_6202b", BUS_TYPE_IDE, 0, 32, 96, 0, { 4, 2, 2, -1 } }, - { "TOSHIBA", "CD-ROM XM-6402B", "1008", "toshiba_6402b", BUS_TYPE_IDE, 0, 32, 96, 0, { 4, 2, 2, 2 } }, - { "TOSHIBA", "CD-ROM XM-6702B", "1007", "toshiba_6720b", BUS_TYPE_IDE, 0, 48, 96, 0, { 4, 2, 2, 2 } }, - { "TOSHIBA", "DVD-ROM SD-M1802", "1051", "toshiba_m1802", BUS_TYPE_IDE, 0, 48, 96, 0, { 4, 2, 2, 2 } }, - { "CHINON", "CD-ROM CDS-431", "H42 ", "chinon_431", BUS_TYPE_SCSI, 1, 1, 36, 1, { -1, -1, -1, -1 } }, - { "CHINON", "CD-ROM CDX-435", "M62 ", "chinon_435", BUS_TYPE_SCSI, 1, 2, 36, 1, { -1, -1, -1, -1 } }, - { "DEC", "RRD45 (C) DEC", "0436", "dec_45", BUS_TYPE_SCSI, 1, 4, 36, 0, { -1, -1, -1, -1 } }, - { "MATSHITA", "CD-ROM CR-501", "1.0b", "matshita_501", BUS_TYPE_SCSI, 1, 1, 36, 1, { -1, -1, -1, -1 } }, - { "NEC", "CD-ROM DRIVE:25", "1.0a", "nec_25", BUS_TYPE_SCSI, 1, 2, 36, 0, { -1, -1, -1, -1 } }, - { "NEC", "CD-ROM DRIVE:38", "1.00", "nec_38", BUS_TYPE_SCSI, 2, 1, 36, 0, { -1, -1, -1, -1 } }, + { "MITSUMI", "CRMC-FX810T4", "????", "mitsumi_810t4", BUS_TYPE_IDE, 0, 8, 36, 0, 0, { 4, 2, 2, -1 } }, + { "NEC", "CD-ROM DRIVE:260", "1.00", "nec_260_early", BUS_TYPE_IDE, 1, 2, 36, 1, 0, { 0, -1, -1, -1 } }, + { "NEC", "CD-ROM DRIVE:260", "1.01", "nec_260", BUS_TYPE_IDE, 1, 4, 36, 1, 0, { 0, -1, -1, -1 } }, + { "NEC", "CD-ROM DRIVE:273", "4.20", "nec_273", BUS_TYPE_IDE, 0, 4, 36, 0, 0, { 0, -1, -1, -1 } }, + { "NEC", "CD-ROM DRIVE:280", "1.05", "nec_280_early", BUS_TYPE_IDE, 0, 6, 36, 1, 0, { 4, 2, 2, -1 } }, + { "NEC", "CD-ROM DRIVE:280", "3.08", "nec_280", BUS_TYPE_IDE, 0, 8, 36, 1, 0, { 4, 2, 2, -1 } }, + { "NEC", "CDR-1300A", "1.05", "nec_1300a", BUS_TYPE_IDE, 0, 6, 36, 0, 0, { 4, 2, 2, -1 } }, + { "NEC", "CDR-1900A", "1.00", "nec_1900a", BUS_TYPE_IDE, 0, 32, 36, 0, 0, { 4, 2, 2, -1 } }, + { "PHILIPS", "CD-ROM PCA403CD", "U31P", "philips_403", BUS_TYPE_IDE, 0, 40, 36, 0, 0, { 4, 2, 2, -1 } }, + { "SONY", "CD-ROM CDU76", "1.0i", "sony_76", BUS_TYPE_IDE, 0, 4, 36, 0, 0, { 2, -1, -1, -1 } }, + { "SONY", "CD-ROM CDU311", "3.0h", "sony_311", BUS_TYPE_IDE, 0, 8, 36, 0, 0, { 3, 2, 1, -1 } }, + { "SONY", "CD-ROM CDU5225", "NYS4", "sony_5225", BUS_TYPE_IDE, 0, 52, 36, 0, 0, { 4, 2, 2, 4 } }, + { "TEAC", "CD-516E", "1.0G", "teac_516e", BUS_TYPE_IDE, 0, 16, 36, 0, 0, { 3, 2, 2, -1 } }, + { "TEAC", "CD-524EA", "3.0D", "teac_524ea", BUS_TYPE_IDE, 0, 24, 36, 0, 0, { 3, 2, 2, -1 } }, + { "TEAC", "CD-532E", "2.0A", "teac_532e", BUS_TYPE_IDE, 0, 32, 36, 0, 0, { 3, 2, 2, -1 } }, + { "TOSHIBA", "CD-ROM XM-5302TA", "0305", "toshiba_5302ta", BUS_TYPE_IDE, 0, 4, 96, 0, 0, { 0, -1, -1, -1 } }, + { "TOSHIBA", "CD-ROM XM-5702B", "TA70", "toshiba_5702b", BUS_TYPE_IDE, 0, 12, 96, 0, 0, { 3, 2, 1, -1 } }, + { "TOSHIBA", "CD-ROM XM-6202B", "1512", "toshiba_6202b", BUS_TYPE_IDE, 0, 32, 96, 0, 0, { 4, 2, 2, -1 } }, + { "TOSHIBA", "CD-ROM XM-6402B", "1008", "toshiba_6402b", BUS_TYPE_IDE, 0, 32, 96, 0, 0, { 4, 2, 2, 2 } }, + { "TOSHIBA", "CD-ROM XM-6702B", "1007", "toshiba_6720b", BUS_TYPE_IDE, 0, 48, 96, 0, 0, { 4, 2, 2, 2 } }, + { "TOSHIBA", "DVD-ROM SD-M1802", "1051", "toshiba_m1802", BUS_TYPE_IDE, 0, 48, 96, 0, 1, { 4, 2, 2, 2 } }, + { "CHINON", "CD-ROM CDS-431", "H42 ", "chinon_431", BUS_TYPE_SCSI, 1, 1, 36, 1, 0, { -1, -1, -1, -1 } }, + { "CHINON", "CD-ROM CDX-435", "M62 ", "chinon_435", BUS_TYPE_SCSI, 1, 2, 36, 1, 0, { -1, -1, -1, -1 } }, + { "DEC", "RRD45 (C) DEC", "0436", "dec_45", BUS_TYPE_SCSI, 1, 4, 36, 0, 0, { -1, -1, -1, -1 } }, + { "MATSHITA", "CD-ROM CR-501", "1.0b", "matshita_501", BUS_TYPE_SCSI, 1, 1, 36, 1, 0, { -1, -1, -1, -1 } }, + { "NEC", "CD-ROM DRIVE:25", "1.0a", "nec_25", BUS_TYPE_SCSI, 1, 2, 36, 0, 0, { -1, -1, -1, -1 } }, + { "NEC", "CD-ROM DRIVE:38", "1.00", "nec_38", BUS_TYPE_SCSI, 2, 1, 36, 0, 0, { -1, -1, -1, -1 } }, /* The speed of the following two is guesswork based on the CDR-74. */ - { "NEC", "CD-ROM DRIVE:75", "1.03", "nec_75", BUS_TYPE_SCSI, 1, 1, 36, 1, { -1, -1, -1, -1 } }, - { "NEC", "CD-ROM DRIVE:77", "1.06", "nec_77", BUS_TYPE_SCSI, 1, 1, 36, 1, { -1, -1, -1, -1 } }, - { "NEC", "CD-ROM DRIVE:211", "1.00", "nec_211", BUS_TYPE_SCSI, 2, 3, 36, 0, { -1, -1, -1, -1 } }, + { "NEC", "CD-ROM DRIVE:75", "1.03", "nec_75", BUS_TYPE_SCSI, 1, 1, 36, 1, 0, { -1, -1, -1, -1 } }, + { "NEC", "CD-ROM DRIVE:77", "1.06", "nec_77", BUS_TYPE_SCSI, 1, 1, 36, 1, 0, { -1, -1, -1, -1 } }, + { "NEC", "CD-ROM DRIVE:211", "1.00", "nec_211", BUS_TYPE_SCSI, 2, 3, 36, 0, 0, { -1, -1, -1, -1 } }, /* The speed of the following two is guesswork based on the CDR-400. */ - { "NEC", "CD-ROM DRIVE:464", "1.05", "nec_464", BUS_TYPE_SCSI, 2, 3, 36, 0, { -1, -1, -1, -1 } }, + { "NEC", "CD-ROM DRIVE:464", "1.05", "nec_464", BUS_TYPE_SCSI, 2, 3, 36, 0, 0, { -1, -1, -1, -1 } }, /* The speed of the following two is guesswork based on the name. */ - { "ShinaKen", "CD-ROM DM-3x1S", "1.04", "shinaken_3x1s", BUS_TYPE_SCSI, 1, 3, 36, 0, { -1, -1, -1, -1 } }, - { "SONY", "CD-ROM CDU-541", "1.0i", "sony_541", BUS_TYPE_SCSI, 1, 1, 36, 1, { -1, -1, -1, -1 } }, - { "SONY", "CD-ROM CDU-561", "1.8k", "sony_561", BUS_TYPE_SCSI, 2, 2, 36, 1, { -1, -1, -1, -1 } }, - { "SONY", "CD-ROM CDU-76S", "1.00", "sony_76s", BUS_TYPE_SCSI, 2, 4, 36, 0, { -1, -1, -1, -1 } }, - { "PHILIPS", "CDD2600", "1.07", "philips_2600", BUS_TYPE_SCSI, 2, 6, 36, 0, { -1, -1, -1, -1 } }, + { "ShinaKen", "CD-ROM DM-3x1S", "1.04", "shinaken_3x1s", BUS_TYPE_SCSI, 1, 3, 36, 0, 0, { -1, -1, -1, -1 } }, + { "SONY", "CD-ROM CDU-541", "1.0i", "sony_541", BUS_TYPE_SCSI, 1, 1, 36, 1, 0, { -1, -1, -1, -1 } }, + { "SONY", "CD-ROM CDU-561", "1.8k", "sony_561", BUS_TYPE_SCSI, 2, 2, 36, 1, 0, { -1, -1, -1, -1 } }, + { "SONY", "CD-ROM CDU-76S", "1.00", "sony_76s", BUS_TYPE_SCSI, 2, 4, 36, 0, 0, { -1, -1, -1, -1 } }, + { "PHILIPS", "CDD2600", "1.07", "philips_2600", BUS_TYPE_SCSI, 2, 6, 36, 0, 0, { -1, -1, -1, -1 } }, /* NOTE: The real thing is a CD changer drive! */ - { "PIONEER", "CD-ROM DRM-604X", "2403", "pioneer_604x", BUS_TYPE_SCSI, 2, 4, 47, 0, { -1, -1, -1, -1 } }, - { "PLEXTOR", "CD-ROM PX-32TS", "1.03", "plextor_32ts", BUS_TYPE_SCSI, 2, 32, 36, 0, { -1, -1, -1, -1 } }, + { "PIONEER", "CD-ROM DRM-604X", "2403", "pioneer_604x", BUS_TYPE_SCSI, 2, 4, 47, 0, 0, { -1, -1, -1, -1 } }, + { "PLEXTOR", "CD-ROM PX-32TS", "1.03", "plextor_32ts", BUS_TYPE_SCSI, 2, 32, 36, 0, 0, { -1, -1, -1, -1 } }, /* The speed of the following two is guesswork based on the R55S. */ - { "TEAC", "CD 50", "1.00", "teac_50", BUS_TYPE_SCSI, 2, 4, 36, 1, { -1, -1, -1, -1 } }, - { "TEAC", "CD-ROM R55S", "1.0R", "teac_55s", BUS_TYPE_SCSI, 2, 4, 36, 0, { -1, -1, -1, -1 } }, + { "TEAC", "CD 50", "1.00", "teac_50", BUS_TYPE_SCSI, 2, 4, 36, 1, 0, { -1, -1, -1, -1 } }, + { "TEAC", "CD-ROM R55S", "1.0R", "teac_55s", BUS_TYPE_SCSI, 2, 4, 36, 0, 0, { -1, -1, -1, -1 } }, /* Texel is Plextor according to Plextor's own EU website. */ - { "TEXEL", "CD-ROM DM-3024", "1.00", "texel_3024", BUS_TYPE_SCSI, 2, 2, 36, 1, { -1, -1, -1, -1 } }, + { "TEXEL", "CD-ROM DM-3024", "1.00", "texel_3024", BUS_TYPE_SCSI, 2, 2, 36, 1, 0, { -1, -1, -1, -1 } }, /* Unusual 2.23x according to Google, I'm rounding it upwards to 3x. Assumed caddy based on the DM-3024. */ - { "TEXEL", "CD-ROM DM-3028", "1.06", "texel_3028", BUS_TYPE_SCSI, 2, 3, 36, 1, { -1, -1, -1, -1 } }, /* Caddy. */ + { "TEXEL", "CD-ROM DM-3028", "1.06", "texel_3028", BUS_TYPE_SCSI, 2, 3, 36, 1, 0, { -1, -1, -1, -1 } }, /* Caddy. */ /* The characteristics are a complete guesswork because I can't find this one on Google. Also, INQUIRY length is always 96 on these Toshiba drives. */ - { "TOSHIBA", "CD-ROM DRIVE:XM", "3433", "toshiba_xm", BUS_TYPE_SCSI, 2, 2, 96, 0, { -1, -1, -1, -1 } }, /* Tray. */ - { "TOSHIBA", "CD-ROM XM-3201B", "3232", "toshiba_3201b", BUS_TYPE_SCSI, 1, 1, 96, 1, { -1, -1, -1, -1 } }, /* Caddy. */ - { "TOSHIBA", "CD-ROM XM-3301TA", "0272", "toshiba_3301ta", BUS_TYPE_SCSI, 2, 2, 96, 0, { -1, -1, -1, -1 } }, /* Tray. */ - { "TOSHIBA", "CD-ROM XM-5701TA", "3136", "toshiba_5701a", BUS_TYPE_SCSI, 2, 12, 96, 0, { -1, -1, -1, -1 } }, /* Tray. */ - { "TOSHIBA", "DVD-ROM SD-M1401", "1008", "toshiba_m1401", BUS_TYPE_SCSI, 2, 40, 96, 0, { -1, -1, -1, -1 } }, /* Tray. */ - { "", "", "", "", BUS_TYPE_NONE, 0, -1, 0, 0, { -1, -1, -1, -1 } } + { "TOSHIBA", "CD-ROM DRIVE:XM", "3433", "toshiba_xm", BUS_TYPE_SCSI, 2, 2, 96, 0, 0, { -1, -1, -1, -1 } }, /* Tray. */ + { "TOSHIBA", "CD-ROM XM-3201B", "3232", "toshiba_3201b", BUS_TYPE_SCSI, 1, 1, 96, 1, 0, { -1, -1, -1, -1 } }, /* Caddy. */ + { "TOSHIBA", "CD-ROM XM-3301TA", "0272", "toshiba_3301ta", BUS_TYPE_SCSI, 2, 2, 96, 0, 0, { -1, -1, -1, -1 } }, /* Tray. */ + { "TOSHIBA", "CD-ROM XM-5701TA", "3136", "toshiba_5701a", BUS_TYPE_SCSI, 2, 12, 96, 0, 0, { -1, -1, -1, -1 } }, /* Tray. */ + { "TOSHIBA", "DVD-ROM SD-M1401", "1008", "toshiba_m1401", BUS_TYPE_SCSI, 2, 40, 96, 0, 1, { -1, -1, -1, -1 } }, /* Tray. */ + { "MATSHITA", "CR-562", "0.75", "cr562", BUS_TYPE_MKE , 0, 2, 0, 0, 0, { -1, -1, -1, -1 } }, + { "MATSHITA", "CR-562", "0.80", "cr562_080", BUS_TYPE_MKE , 0, 2, 0, 0, 0, { -1, -1, -1, -1 } }, + { "MATSHITA", "CR-563", "0.75", "cr563", BUS_TYPE_MKE , 0, 2, 0, 0, 0, { -1, -1, -1, -1 } }, + { "MATSHITA", "CR-563", "0.80", "cr563_080", BUS_TYPE_MKE , 0, 2, 0, 0, 0, { -1, -1, -1, -1 } }, + { "", "", "", "", BUS_TYPE_NONE, 0, -1, 0, 0, 0, { -1, -1, -1, -1 } } }; /* To shut up the GCC compilers. */ @@ -285,7 +297,7 @@ typedef struct cdrom { union { uint8_t res; uint8_t res0; /* Reserved for other ID's. */ - uint8_t res1; + uint8_t mke_channel; uint8_t ide_channel; uint8_t scsi_device_id; }; @@ -383,6 +395,7 @@ extern void cdrom_get_model(const int type, char *name, const int id) extern char *cdrom_get_revision(const int type); extern int cdrom_get_scsi_std(const int type); extern int cdrom_is_early(const int type); +extern int cdrom_is_dvd(const int type); extern int cdrom_is_generic(const int type); extern int cdrom_is_caddy(const int type); extern int cdrom_get_speed(const int type); @@ -390,6 +403,7 @@ extern int cdrom_get_inquiry_len(const int type); extern int cdrom_has_dma(const int type); extern int cdrom_get_transfer_max(const int type, const int mode); extern int cdrom_get_type_count(void); +extern void cdrom_generate_name_mke(const int type, char *name); extern void cdrom_get_identify_model(const int type, char *name, const int id); extern void cdrom_get_name(const int type, char *name); extern char *cdrom_get_internal_name(const int type); @@ -459,7 +473,7 @@ extern void cdrom_reload(const uint8_t id); extern void cdrom_compute_ecc_block(cdrom_t *dev, uint8_t *parity, const uint8_t *data, uint32_t major_count, uint32_t minor_count, - uint32_t major_mult, uint32_t minor_inc); + uint32_t major_mult, uint32_t minor_inc, int m2f1); extern unsigned long cdrom_crc32(unsigned long crc, const unsigned char *buf, size_t len); diff --git a/src/include/86box/cdrom_mitsumi.h b/src/include/86box/cdrom_mitsumi.h index 0b8a3a250..01c549c0b 100644 --- a/src/include/86box/cdrom_mitsumi.h +++ b/src/include/86box/cdrom_mitsumi.h @@ -8,11 +8,11 @@ * * Mitsumi CD-ROM emulation for the ISA bus. * - * - * * Authors: Miran Grca, + * Jasmine Iwanek, * - * Copyright 2022 Miran Grca. + * Copyright 2022 Miran Grca. + * Copyright 2024-2025 Jasmine Iwanek. */ #ifndef CDROM_MITSUMI_H #define CDROM_MITSUMI_H diff --git a/src/include/86box/cdrom_mke.h b/src/include/86box/cdrom_mke.h new file mode 100644 index 000000000..659e084e3 --- /dev/null +++ b/src/include/86box/cdrom_mke.h @@ -0,0 +1,24 @@ +/* + * 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. + * + * Panasonic/MKE CD-ROM emulation for the ISA bus. + * + * Authors: Miran Grca, + * Cacodemon345 + * + * Copyright 2022-2025 Miran Grca. + * Copyright 2025 Cacodemon345. + */ + +#ifndef CDROM_MKE_H +#define CDROM_MKE_H + +extern const device_t mke_cdrom_device; +extern const device_t mke_cdrom_noncreative_device; + +#endif /*CDROM_MKE_H*/ diff --git a/src/include/86box/config.h b/src/include/86box/config.h index 34447266b..b2391527a 100644 --- a/src/include/86box/config.h +++ b/src/include/86box/config.h @@ -133,7 +133,7 @@ typedef struct config_t { /* Other removable devices category */ storage_cfg_t cdrom[CDROM_NUM]; /* CD-ROM drives */ - storage_cfg_t rdisk[ZIP_NUM]; /* Removable disk drives */ + storage_cfg_t rdisk[RDISK_NUM]; /* Removable disk drives */ } config_t; #endif diff --git a/src/include/86box/hdc.h b/src/include/86box/hdc.h index 33cb4b16c..c308078a5 100644 --- a/src/include/86box/hdc.h +++ b/src/include/86box/hdc.h @@ -27,7 +27,7 @@ #define HDC_NONE 0 #define HDC_INTERNAL 1 -#define HDC_MAX 2 +#define HDC_MAX 4 extern int hdc_current[HDC_MAX]; @@ -79,6 +79,9 @@ extern const device_t ide_cmd646_device; /* CMD PCI-646 * extern const device_t ide_cmd646_legacy_only_device; /* CMD PCI-646 (Legacy Mode Only) */ extern const device_t ide_cmd646_single_channel_device; /* CMD PCI-646 (Only primary channel) */ extern const device_t ide_cmd646_ter_qua_device; /* CMD PCI-646 (Tertiary and quaternary channels) */ +extern const device_t ide_cmd648_ter_qua_device; /* CMD PCI-648 (Tertiary and quaternary channels) */ +extern const device_t ide_cmd648_ter_qua_onboard_device; /* CMD PCI-648 (Tertiary and quaternary channels, on-board) */ +extern const device_t ide_cmd649_ter_qua_device; /* CMD PCI-649 (Tertiary and quaternary channels) */ extern const device_t ide_opti611_vlb_device; /* OPTi 82c611/611A VLB */ extern const device_t ide_opti611_vlb_sec_device; /* OPTi 82c611/611A VLB (Secondary channel) */ @@ -118,7 +121,7 @@ extern void hdc_init(void); extern void hdc_reset(void); extern const char *hdc_get_internal_name(int hdc); -extern int hdc_get_from_internal_name(char *s); +extern int hdc_get_from_internal_name(const char *s); extern int hdc_has_config(int hdc); extern const device_t *hdc_get_device(int hdc); extern int hdc_get_flags(int hdc); diff --git a/src/include/86box/hdc_ide.h b/src/include/86box/hdc_ide.h index 41fb7703e..3fd589f9c 100644 --- a/src/include/86box/hdc_ide.h +++ b/src/include/86box/hdc_ide.h @@ -178,9 +178,6 @@ enum { TIMINGS_PIO_FC = 2 }; -extern int ide_ter_enabled; -extern int ide_qua_enabled; - #ifdef SCSI_DEVICE_H extern ide_t *ide_get_drive(int ch); extern void ide_irq(ide_t *ide, int set, int log); @@ -230,6 +227,8 @@ extern void ide_padstr8(uint8_t *buf, int buf_size, const char *src); extern uint8_t ide_read_ali_75(void); extern uint8_t ide_read_ali_76(void); +extern void ide_hard_reset(void); + /* Legacy #define's. */ #define ide_irq_raise(ide) ide_irq(ide, 1, 1) #define ide_irq_lower(ide) ide_irq(ide, 0, 1) diff --git a/src/include/86box/hdc_ide_sff8038i.h b/src/include/86box/hdc_ide_sff8038i.h index 79075b8b2..901cdb325 100644 --- a/src/include/86box/hdc_ide_sff8038i.h +++ b/src/include/86box/hdc_ide_sff8038i.h @@ -56,6 +56,11 @@ typedef struct sff8038i_t int irq_level; int irq_pin; int pci_irq_line; + + uint8_t (*ven_write)(uint16_t port, uint8_t val, void *priv); + uint8_t (*ven_read)(uint16_t port, uint8_t val, void *priv); + + void *priv; } sff8038i_t; extern const device_t sff8038i_device; @@ -78,4 +83,7 @@ extern void sff_set_irq_pin(sff8038i_t *dev, int irq_pin); extern void sff_set_irq_level(sff8038i_t *dev, int irq_level); extern void sff_set_mirq(sff8038i_t *dev, uint8_t mirq); +extern void sff_set_ven_handlers(sff8038i_t *dev, uint8_t (*ven_write)(uint16_t port, uint8_t val, void *priv), + uint8_t (*ven_read)(uint16_t port, uint8_t val, void *priv), void *priv); + #endif /*EMU_HDC_IDE_SFF8038I_H*/ diff --git a/src/include/86box/hdd.h b/src/include/86box/hdd.h index 53514740d..597059e4f 100644 --- a/src/include/86box/hdd.h +++ b/src/include/86box/hdd.h @@ -67,14 +67,15 @@ enum { }; #else enum { - HDD_BUS_DISABLED = 0, - HDD_BUS_MFM = 1, - HDD_BUS_XTA = 2, - HDD_BUS_ESDI = 3, - HDD_BUS_IDE = 4, - HDD_BUS_ATAPI = 5, - HDD_BUS_SCSI = 6, - HDD_BUS_USB = 7 + HDD_BUS_DISABLED = 0, + HDD_BUS_MFM = 1, + HDD_BUS_XTA = 2, + HDD_BUS_ESDI = 3, + HDD_BUS_LPT = 6, + HDD_BUS_IDE = 7, + HDD_BUS_ATAPI = 8, + HDD_BUS_SCSI = 9, + HDD_BUS_USB = 10 }; #endif diff --git a/src/include/86box/keyboard.h b/src/include/86box/keyboard.h index 62938fae4..86cea515e 100644 --- a/src/include/86box/keyboard.h +++ b/src/include/86box/keyboard.h @@ -22,6 +22,21 @@ #ifndef EMU_KEYBOARD_H #define EMU_KEYBOARD_H +#define FLAG_AT 0x00 /* dev is AT */ +#define FLAG_PS2_KBD 0x10 /* dev is AT or PS/2 */ +#define FLAG_AX 0x08 /* dev is AX */ +#define FLAG_TYPE_MASK 0x07 /* mask for type */ + +enum { + KBD_83_KEY = 0, + KBD_84_KEY, + KBD_101_KEY, + KBD_102_KEY, + KBD_JIS, + KBD_KSC, + KBD_ABNT2 +}; + enum { DEV_KBD = 0, DEV_AUX = 1 @@ -38,6 +53,15 @@ enum { DEV_STATE_MAIN_WANT_EXECUTE_BAT = 7 }; +enum { + KEYBOARD_TYPE_INTERNAL = 0, + KEYBOARD_TYPE_PC_XT, + KEYBOARD_TYPE_AT, + KEYBOARD_TYPE_AX, + KEYBOARD_TYPE_PS2, + KEYBOARD_TYPE_PS55 +}; + /* Used by the AT / PS/2 keyboard controller, common device, keyboard, and mouse. */ typedef struct kbc_at_port_t { uint8_t wantcmd; @@ -194,6 +218,8 @@ typedef struct scancode { extern "C" { #endif +extern int keyboard_type; + extern uint8_t keyboard_mode; extern int keyboard_scan; @@ -216,51 +242,56 @@ extern int mouse_scan; extern kbc_at_port_t *kbc_at_ports[2]; #ifdef EMU_DEVICE_H -extern const device_t keyboard_pc_device; -extern const device_t keyboard_pc82_device; -extern const device_t keyboard_pravetz_device; -extern const device_t keyboard_xt_device; -extern const device_t keyboard_xt86_device; -extern const device_t keyboard_xt_compaq_device; -extern const device_t keyboard_xt_t1x00_device; -extern const device_t keyboard_tandy_device; -extern const device_t keyboard_xt_lxt3_device; -extern const device_t keyboard_xt_olivetti_device; -extern const device_t keyboard_xt_zenith_device; -extern const device_t keyboard_xt_hyundai_device; -extern const device_t keyboard_xt_fe2010_device; -extern const device_t keyboard_xtclone_device; -extern const device_t keyboard_at_device; -extern const device_t keyboard_at_ami_device; -extern const device_t keyboard_at_compaq_device; -extern const device_t keyboard_at_phoenix_device; -extern const device_t keyboard_at_ncr_device; -extern const device_t keyboard_at_olivetti_device; -extern const device_t keyboard_at_siemens_device; -extern const device_t keyboard_at_tg_ami_device; -extern const device_t keyboard_at_toshiba_device; -extern const device_t keyboard_ps2_device; -extern const device_t keyboard_ps2_ps1_device; -extern const device_t keyboard_ps2_ps1_pci_device; -extern const device_t keyboard_ps2_xi8088_device; -extern const device_t keyboard_ps2_ami_device; -extern const device_t keyboard_ps2_compaq_device; -extern const device_t keyboard_ps2_holtek_device; -extern const device_t keyboard_ps2_mca_1_device; -extern const device_t keyboard_ps2_mca_2_device; -extern const device_t keyboard_ps2_olivetti_device; -extern const device_t keyboard_ps2_phoenix_device; -extern const device_t keyboard_ps2_quadtel_device; -extern const device_t keyboard_ps2_tg_ami_device; -extern const device_t keyboard_ps2_tg_ami_green_device; -extern const device_t keyboard_ps2_pci_device; -extern const device_t keyboard_ps2_ami_pci_device; -extern const device_t keyboard_ps2_intel_ami_pci_device; -extern const device_t keyboard_ps2_acer_pci_device; -extern const device_t keyboard_ps2_ali_pci_device; -extern const device_t keyboard_ps2_phoenix_pci_device; -extern const device_t keyboard_ps2_tg_ami_pci_device; +extern const device_t kbc_pc_device; +extern const device_t kbc_pc82_device; +extern const device_t kbc_pravetz_device; +extern const device_t kbc_xt_device; +extern const device_t kbc_xt86_device; +extern const device_t kbc_xt_compaq_device; +extern const device_t kbc_xt_t1x00_device; +extern const device_t kbc_tandy_device; +extern const device_t kbc_xt_lxt3_device; +extern const device_t kbc_xt_olivetti_device; +extern const device_t kbc_xt_zenith_device; +extern const device_t kbc_xt_hyundai_device; +extern const device_t kbc_xt_fe2010_device; +extern const device_t kbc_xtclone_device; +extern const device_t kbc_at_device; +extern const device_t kbc_at_ami_device; +extern const device_t kbc_at_compaq_device; +extern const device_t kbc_at_phoenix_device; +extern const device_t kbc_at_ncr_device; +extern const device_t kbc_at_olivetti_device; +extern const device_t kbc_at_siemens_device; +extern const device_t kbc_at_tg_ami_device; +extern const device_t kbc_at_toshiba_device; +extern const device_t kbc_ps2_device; +extern const device_t kbc_ps2_ps1_device; +extern const device_t kbc_ps2_ps1_pci_device; +extern const device_t kbc_ps2_xi8088_device; +extern const device_t kbc_ps2_ami_device; +extern const device_t kbc_ps2_compaq_device; +extern const device_t kbc_ps2_holtek_device; +extern const device_t kbc_ps2_mca_1_device; +extern const device_t kbc_ps2_mca_2_device; +extern const device_t kbc_ps2_olivetti_device; +extern const device_t kbc_ps2_phoenix_device; +extern const device_t kbc_ps2_quadtel_device; +extern const device_t kbc_ps2_tg_ami_device; +extern const device_t kbc_ps2_tg_ami_green_device; +extern const device_t kbc_ps2_pci_device; +extern const device_t kbc_ps2_ami_pci_device; +extern const device_t kbc_ps2_intel_ami_pci_device; +extern const device_t kbc_ps2_acer_pci_device; +extern const device_t kbc_ps2_ali_pci_device; +extern const device_t kbc_ps2_phoenix_pci_device; +extern const device_t kbc_ps2_tg_ami_pci_device; +extern const device_t keyboard_pc_xt_device; +extern const device_t keyboard_at_device; +extern const device_t keyboard_ax_device; +extern const device_t keyboard_ps2_device; +extern const device_t keyboard_ps55_device; extern const device_t keyboard_at_generic_device; #endif /*EMU_DEVICE_H*/ @@ -303,6 +334,18 @@ extern atkbc_dev_t *kbc_at_dev_init(uint8_t inst); passed on incorrectly. */ extern uint16_t convert_scan_code(uint16_t scan_code); +extern const char * keyboard_get_name(int mouse); +extern const char * keyboard_get_internal_name(int mouse); +extern int keyboard_get_from_internal_name(char *s); +extern int keyboard_has_config(int mouse); +#ifdef EMU_DEVICE_H +extern const device_t *keyboard_get_device(int mouse); +#endif +extern int keyboard_get_ndev(void); +extern void keyboard_add_device(void); + +extern const scancode scancode_set1[512]; + #ifdef __cplusplus } #endif diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 1ae79366a..9e14f0656 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -85,23 +85,24 @@ #define MACHINE_SOFTFLOAT_ONLY 0x00000001 /* sys requires SoftFloat FPU */ #define MACHINE_VIDEO 0x00000002 /* sys has int video */ #define MACHINE_VIDEO_8514A 0x00000004 /* sys has int video */ -#define MACHINE_VIDEO_XGA 0x00000008 /* sys has int video */ -#define MACHINE_VIDEO_ONLY 0x00000010 /* sys has fixed video */ -#define MACHINE_MOUSE 0x00000020 /* sys has int mouse */ -#define MACHINE_FDC 0x00000040 /* sys has int FDC */ -#define MACHINE_LPT_PRI 0x00000080 /* sys has int pri LPT */ -#define MACHINE_LPT_SEC 0x00000100 /* sys has int sec LPT */ -#define MACHINE_LPT_TER 0x00000200 /* sys has int ter LPT */ -#define MACHINE_PS2_KBC 0x00000400 /* sys has a PS/2 keyboard controller */ +#define MACHINE_VIDEO_ONLY 0x00000008 /* sys has fixed video */ +#define MACHINE_KEYBOARD 0x00000010 /* sys has int keyboard */ +#define MACHINE_AX 0x00000020 /* sys adheres to Japanese AX standard */ +#define MACHINE_KEYBOARD_JIS 0x00000020 /* sys has int keyboard which is Japanese (AX or PS/55) */ +#define MACHINE_MOUSE 0x00000040 /* sys has int mouse */ +#define MACHINE_FDC 0x00000080 /* sys has int FDC */ +#define MACHINE_LPT_PRI 0x00000100 /* sys has int pri LPT */ +#define MACHINE_LPT_SEC 0x00000200 /* sys has int sec LPT */ +#define MACHINE_LPT_TER 0x00000400 /* sys has int ter LPT */ +#define MACHINE_PS2_KBC 0x00000800 /* sys has a PS/2 keyboard controller */ /* this is separate from having PS/2 ports */ -#define MACHINE_UART_PRI 0x00000800 /* sys has int pri UART */ -#define MACHINE_UART_SEC 0x00001000 /* sys has int sec UART */ -#define MACHINE_UART_TER 0x00002000 /* sys has int ter UART */ -#define MACHINE_UART_QUA 0x00004000 /* sys has int qua UART */ -#define MACHINE_GAMEPORT 0x00008000 /* sys has int game port */ -#define MACHINE_SOUND 0x00010000 /* sys has int sound */ -#define MACHINE_NIC 0x00020000 /* sys has int NIC */ -#define MACHINE_AX 0x00040000 /* sys adheres to Japanese AX standard */ +#define MACHINE_UART_PRI 0x00010800 /* sys has int pri UART */ +#define MACHINE_UART_SEC 0x00002000 /* sys has int sec UART */ +#define MACHINE_UART_TER 0x00004000 /* sys has int ter UART */ +#define MACHINE_UART_QUA 0x00008000 /* sys has int qua UART */ +#define MACHINE_GAMEPORT 0x00010000 /* sys has int game port */ +#define MACHINE_SOUND 0x00020000 /* sys has int sound */ +#define MACHINE_NIC 0x00040000 /* sys has int NIC */ /* Feature flags for advanced devices. */ #define MACHINE_APM 0x00080000 /* sys has APM */ #define MACHINE_ACPI 0x00100000 /* sys has ACPI */ @@ -338,6 +339,7 @@ typedef struct _machine_ { uint32_t gpio_acpi; #ifdef EMU_DEVICE_H const device_t *device; + const device_t *kbd_device; const device_t *fdc_device; const device_t *sio_device; const device_t *vid_device; @@ -345,6 +347,7 @@ typedef struct _machine_ { const device_t *net_device; #else void *device; + void *kbd_device; void *fdc_device; void *sio_device; void *vid_device; @@ -789,6 +792,7 @@ extern int machine_at_ms5146_init(const machine_t *); extern int machine_at_cb52xsi_init(const machine_t *); extern int machine_at_m560_init(const machine_t *); +extern int machine_at_m5ata_init(const machine_t *); extern int machine_at_ms5164_init(const machine_t *); extern int machine_at_sp97xv_init(const machine_t *); diff --git a/src/include/86box/machine_status.h b/src/include/86box/machine_status.h index 66805e653..c5640ac08 100644 --- a/src/include/86box/machine_status.h +++ b/src/include/86box/machine_status.h @@ -20,7 +20,7 @@ typedef struct dev_status_empty_t { typedef struct machine_status_t { dev_status_empty_active_t fdd[FDD_NUM]; dev_status_empty_active_t cdrom[CDROM_NUM]; - dev_status_empty_active_t zip[ZIP_NUM]; + dev_status_empty_active_t rdisk[RDISK_NUM]; dev_status_empty_active_t mo[MO_NUM]; dev_status_empty_active_t cassette; dev_status_active_t hdd[HDD_BUS_USB]; diff --git a/src/include/86box/mo.h b/src/include/86box/mo.h index fc297ffbb..6d308adb8 100644 --- a/src/include/86box/mo.h +++ b/src/include/86box/mo.h @@ -84,10 +84,11 @@ static const mo_drive_type_t mo_drive_types[KNOWN_MO_DRIVE_TYPES] = { }; enum { - MO_BUS_DISABLED = 0, - MO_BUS_ATAPI = 5, - MO_BUS_SCSI = 6, - MO_BUS_USB = 7 + MO_BUS_DISABLED = 0, + MO_BUS_LPT = 6, + MO_BUS_ATAPI = 8, + MO_BUS_SCSI = 9, + MO_BUS_USB = 10 }; typedef struct mo_drive_t { diff --git a/src/include/86box/mouse.h b/src/include/86box/mouse.h index b46a6d5c5..d3e33ad32 100644 --- a/src/include/86box/mouse.h +++ b/src/include/86box/mouse.h @@ -26,7 +26,7 @@ #endif #define MOUSE_TYPE_NONE 0 /* no mouse configured */ -#define MOUSE_TYPE_INTERNAL 1 /* achine has internal mouse */ +#define MOUSE_TYPE_INTERNAL 1 /* machine has internal mouse */ #define MOUSE_TYPE_LOGIBUS 2 /* Logitech/ATI Bus Mouse */ #define MOUSE_TYPE_INPORT 3 /* Microsoft InPort Mouse */ #if 0 diff --git a/src/include/86box/plat.h b/src/include/86box/plat.h index e6a366f4c..fa7faddff 100644 --- a/src/include/86box/plat.h +++ b/src/include/86box/plat.h @@ -185,9 +185,9 @@ extern void floppy_mount(uint8_t id, char *fn, uint8_t wp); extern void floppy_eject(uint8_t id); extern void cdrom_mount(uint8_t id, char *fn); extern void plat_cdrom_ui_update(uint8_t id, uint8_t reload); -extern void zip_eject(uint8_t id); -extern void zip_mount(uint8_t id, char *fn, uint8_t wp); -extern void zip_reload(uint8_t id); +extern void rdisk_eject(uint8_t id); +extern void rdisk_mount(uint8_t id, char *fn, uint8_t wp); +extern void rdisk_reload(uint8_t id); extern void mo_eject(uint8_t id); extern void mo_mount(uint8_t id, char *fn, uint8_t wp); extern void mo_reload(uint8_t id); diff --git a/src/include/86box/zip.h b/src/include/86box/rdisk.h similarity index 52% rename from src/include/86box/zip.h rename to src/include/86box/rdisk.h index 969ce27f5..df48ba703 100644 --- a/src/include/86box/zip.h +++ b/src/include/86box/rdisk.h @@ -16,29 +16,62 @@ * Copyright 2018-2025 Miran Grca. */ -#ifndef EMU_ZIP_H -#define EMU_ZIP_H +#ifndef EMU_RDISK_H +#define EMU_RDISK_H -#define ZIP_NUM 4 +#define RDISK_NUM 4 -#define BUF_SIZE 32768 +#define BUF_SIZE 32768 -#define ZIP_TIME 10.0 +#define RDISK_TIME 10.0 -#define ZIP_SECTORS (96 * 2048) +#define ZIP_SECTORS (96 * 2048) -#define ZIP_250_SECTORS (489532) +#define ZIP_250_SECTORS (489532) -#define ZIP_IMAGE_HISTORY 10 +#define RDISK_IMAGE_HISTORY 10 enum { - ZIP_BUS_DISABLED = 0, - ZIP_BUS_ATAPI = 5, - ZIP_BUS_SCSI = 6, - ZIP_BUS_USB = 7 + RDISK_TYPE_GENERIC = 0, + RDISK_TYPE_ZIP_100, + RDISK_TYPE_ZIP_250 }; -typedef struct zip_drive_t { +typedef struct rdisk_type_t { + uint32_t sectors; + uint16_t bytes_per_sector; +} rdisk_type_t; + +#define KNOWN_RDISK_TYPES 2 +static const rdisk_type_t rdisk_types[KNOWN_RDISK_TYPES] = { + { ZIP_SECTORS, 512 }, + { ZIP_250_SECTORS, 512 }, +}; + +typedef struct rdisk_drive_type_t { + const char *vendor; + const char *model; + const char *revision; + int8_t supported_media[KNOWN_RDISK_TYPES]; +} rdisk_drive_type_t; + +#define KNOWN_RDISK_DRIVE_TYPES 3 +static const rdisk_drive_type_t rdisk_drive_types[KNOWN_RDISK_DRIVE_TYPES] = { + { "86BOX", "REMOVABLE DISK", "5.00", { 1, 1 }}, + { "IOMEGA", "ZIP 100", "E.08", { 1, 0 }}, + { "IOMEGA", "ZIP 250", "42.S", { 1, 1 }} +}; + +enum { + RDISK_BUS_DISABLED = 0, + RDISK_BUS_LPT = 6, + RDISK_BUS_IDE = 7, + RDISK_BUS_ATAPI = 8, + RDISK_BUS_SCSI = 9, + RDISK_BUS_USB = 10 +}; + +typedef struct rdisk_drive_t { uint8_t id; union { @@ -64,17 +97,17 @@ typedef struct zip_drive_t { char image_path[1024]; char prev_image_path[1024]; - char *image_history[ZIP_IMAGE_HISTORY]; + char *image_history[RDISK_IMAGE_HISTORY]; - uint32_t is_250; + uint32_t type; uint32_t medium_size; uint32_t base; -} zip_drive_t; +} rdisk_drive_t; -typedef struct zip_t { +typedef struct rdisk_t { mode_sense_pages_t ms_pages_saved; - zip_drive_t *drv; + rdisk_drive_t *drv; #ifdef EMU_IDE_H ide_tf_t *tf; #else @@ -113,37 +146,37 @@ typedef struct zip_t { double callback; uint8_t (*ven_cmd)(void *sc, uint8_t *cdb, int32_t *BufLen); -} zip_t; +} rdisk_t; -extern zip_t *zip[ZIP_NUM]; -extern zip_drive_t zip_drives[ZIP_NUM]; -extern uint8_t atapi_zip_drives[8]; -extern uint8_t scsi_zip_drives[16]; +extern rdisk_t *rdisk[RDISK_NUM]; +extern rdisk_drive_t rdisk_drives[RDISK_NUM]; +extern uint8_t atapi_rdisk_drives[8]; +extern uint8_t scsi_rdisk_drives[16]; -#define zip_sense_error dev->sense[0] -#define zip_sense_key dev->sense[2] -#define zip_info *(uint32_t *) &(dev->sense[3]) -#define zip_asc dev->sense[12] -#define zip_ascq dev->sense[13] +#define rdisk_sense_error dev->sense[0] +#define rdisk_sense_key dev->sense[2] +#define rdisk_info *(uint32_t *) &(dev->sense[3]) +#define rdisk_asc dev->sense[12] +#define rdisk_ascq dev->sense[13] #ifdef __cplusplus extern "C" { #endif -extern void zip_disk_close(const zip_t *dev); -extern void zip_disk_reload(const zip_t *dev); -extern void zip_insert(zip_t *dev); +extern void rdisk_disk_close(const rdisk_t *dev); +extern void rdisk_disk_reload(const rdisk_t *dev); +extern void rdisk_insert(rdisk_t *dev); -extern void zip_global_init(void); -extern void zip_hard_reset(void); +extern void rdisk_global_init(void); +extern void rdisk_hard_reset(void); -extern void zip_reset(scsi_common_t *sc); -extern int zip_is_empty(const uint8_t id); -extern void zip_load(const zip_t *dev, const char *fn, const int skip_insert); -extern void zip_close(void); +extern void rdisk_reset(scsi_common_t *sc); +extern int rdisk_is_empty(const uint8_t id); +extern void rdisk_load(const rdisk_t *dev, const char *fn, const int skip_insert); +extern void rdisk_close(void); #ifdef __cplusplus } #endif -#endif /*EMU_ZIP_H*/ +#endif /*EMU_RDISK_H*/ diff --git a/src/include/86box/sound.h b/src/include/86box/sound.h index 985abe777..5f91ec9d0 100644 --- a/src/include/86box/sound.h +++ b/src/include/86box/sound.h @@ -12,9 +12,11 @@ * * Authors: Sarah Walker, * Miran Grca, + * Jasmine Iwanek, * * Copyright 2008-2018 Sarah Walker. - * Copyright 2016-2018 Miran Grca. + * Copyright 2016-2025 Miran Grca. + * Copyright 2024-2025 Jasmine Iwanek. */ #ifndef EMU_SOUND_H @@ -132,6 +134,12 @@ extern const device_t cmi8738_device; extern const device_t cmi8738_onboard_device; extern const device_t cmi8738_6ch_onboard_device; +/* Covox ISA */ +extern const device_t voicemasterkey_device; +extern const device_t soundmasterplus_device; +extern const device_t isadacr0_device; +extern const device_t isadacr1_device; + /* Creative Labs Game Blaster */ extern const device_t cms_device; @@ -214,6 +222,9 @@ extern const device_t pasplus_device; extern const device_t pas16_device; extern const device_t pas16d_device; +/* Rainbow Arts PC-Soundman */ +extern const device_t soundman_device; + /* Tandy PSSJ */ extern const device_t pssj_device; extern const device_t pssj_isa_device; diff --git a/src/include/86box/ui.h b/src/include/86box/ui.h index f4efd6ec1..63243a666 100644 --- a/src/include/86box/ui.h +++ b/src/include/86box/ui.h @@ -49,7 +49,7 @@ extern int ui_msgbox_header(int flags, void *header, void *message); #define SB_CARTRIDGE 0x10 #define SB_FLOPPY 0x20 #define SB_CDROM 0x30 -#define SB_ZIP 0x40 +#define SB_RDISK 0x40 #define SB_MO 0x50 #define SB_HDD 0x60 #define SB_NETWORK 0x70 diff --git a/src/include/86box/vid_svga.h b/src/include/86box/vid_svga.h index 14f3c933a..5492da18a 100644 --- a/src/include/86box/vid_svga.h +++ b/src/include/86box/vid_svga.h @@ -138,7 +138,6 @@ typedef struct svga_t { int ps_bit_bug; int ati_4color; int vblankend; - int panning_blank; int render_line_offset; int start_retrace_latch; diff --git a/src/machine/m_at.c b/src/machine/m_at.c index d2c4b99a2..09cd9d5cd 100644 --- a/src/machine/m_at.c +++ b/src/machine/m_at.c @@ -95,7 +95,7 @@ machine_at_init(const machine_t *model) { machine_at_common_init(model); - device_add(&keyboard_at_device); + device_add(&kbc_at_device); } static void @@ -103,7 +103,7 @@ machine_at_ibm_common_init(const machine_t *model) { machine_at_common_init_ex(model, 1); - device_add(&keyboard_at_device); + device_add(&kbc_at_device); mem_remap_top(384); @@ -116,7 +116,7 @@ machine_at_ps2_init(const machine_t *model) { machine_at_common_init(model); - device_add(&keyboard_ps2_device); + device_add(&kbc_ps2_device); } void @@ -398,7 +398,7 @@ machine_at_siemens_init(const machine_t *model) machine_at_common_init_ex(model, 1); - device_add(&keyboard_at_siemens_device); + device_add(&kbc_at_siemens_device); mem_remap_top(384); @@ -408,19 +408,3 @@ machine_at_siemens_init(const machine_t *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_ibm_common_init(model); - - return ret; -} diff --git a/src/machine/m_at_286_386sx.c b/src/machine/m_at_286_386sx.c index 8a1cadbb7..8f2c9215f 100644 --- a/src/machine/m_at_286_386sx.c +++ b/src/machine/m_at_286_386sx.c @@ -58,7 +58,7 @@ machine_at_mr286_init(const machine_t *model) return ret; machine_at_common_ide_init(model); - device_add(&keyboard_at_device); + device_add(&kbc_at_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -69,7 +69,7 @@ machine_at_mr286_init(const machine_t *model) static void machine_at_headland_common_init(const machine_t *model, int type) { - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if ((type != 2) && (fdc_current[0] == FDC_INTERNAL)) device_add(&fdc_at_device); @@ -136,7 +136,7 @@ machine_at_quadt286_init(const machine_t *model) return ret; machine_at_common_init(model); - device_add(&keyboard_at_device); + device_add(&kbc_at_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -159,7 +159,7 @@ machine_at_quadt386sx_init(const machine_t *model) return ret; machine_at_common_init(model); - device_add(&keyboard_at_device); + device_add(&kbc_at_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -226,7 +226,7 @@ machine_at_pbl300sx_init(const machine_t *model) machine_at_common_init(model); device_add(&acc2036_device); - device_add(&keyboard_ps2_phoenix_device); + device_add(&kbc_ps2_phoenix_device); device_add(&um82c862f_ide_device); if (gfxcard[0] == VID_INTERNAL) @@ -274,7 +274,7 @@ machine_at_neat_ami_init(const machine_t *model) if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); return ret; } @@ -301,7 +301,7 @@ machine_at_ataripc4_init(const machine_t *model) if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); return ret; } @@ -318,7 +318,7 @@ machine_at_px286_init(const machine_t *model) return ret; machine_at_common_init(model); - device_add(&keyboard_at_device); + device_add(&kbc_at_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -338,7 +338,7 @@ machine_at_ctat_common_init(const machine_t *model) if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); - device_add(&keyboard_at_phoenix_device); + device_add(&kbc_at_phoenix_device); } int @@ -391,6 +391,23 @@ machine_at_tuliptc7_init(const machine_t *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) { @@ -398,14 +415,14 @@ machine_at_scat_init(const machine_t *model, int is_v4, int is_ami) if (machines[machine].bus_flags & MACHINE_BUS_PS2) { if (is_ami) - device_add(&keyboard_ps2_ami_device); + device_add(&kbc_ps2_ami_device); else - device_add(&keyboard_ps2_device); + device_add(&kbc_ps2_device); } else { if (is_ami) - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); else - device_add(&keyboard_at_device); + device_add(&kbc_at_device); } if (is_v4) @@ -419,7 +436,7 @@ machine_at_scatsx_init(const machine_t *model) { machine_at_common_init(model); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -543,12 +560,12 @@ machine_at_super286c_init(const machine_t *model) machine_at_common_init(model); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); - device_add(&neat_device); + device_add(&cs8220_device); return ret; } @@ -585,8 +602,7 @@ machine_at_spc4200p_init(const machine_t *model) machine_at_scat_init(model, 0, 1); - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&f82c710_device); device_add(&ide_isa_device); @@ -607,8 +623,7 @@ machine_at_spc4216p_init(const machine_t *model) machine_at_scat_init(model, 1, 1); - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&f82c710_device); return ret; } @@ -630,8 +645,7 @@ machine_at_spc4620p_init(const machine_t *model) machine_at_scat_init(model, 1, 1); - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&f82c710_device); device_add(&ide_isa_device); @@ -667,8 +681,7 @@ machine_at_deskmaster286_init(const machine_t *model) machine_at_scat_init(model, 0, 1); - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&f82c710_device); device_add(&ide_isa_device); @@ -690,7 +703,7 @@ machine_at_shuttle386sx_init(const machine_t *model) machine_at_common_init(model); device_add(&intel_82335_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -714,7 +727,7 @@ machine_at_adi386sx_init(const machine_t *model) device_add(&amstrad_megapc_nvr_device); /* NVR that is initialized to all 0x00's. */ device_add(&intel_82335_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -739,7 +752,7 @@ machine_at_wd76c10_init(const machine_t *model) if (gfxcard[0] == VID_INTERNAL) device_add(¶dise_wd90c11_megapc_device); - device_add(&keyboard_ps2_quadtel_device); + device_add(&kbc_ps2_quadtel_device); device_add(&wd76c10_device); @@ -760,7 +773,7 @@ machine_at_cmdsl386sx16_init(const machine_t *model) machine_at_common_init(model); - device_add(&keyboard_ps2_device); + device_add(&kbc_ps2_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -788,7 +801,7 @@ machine_at_if386sx_init(const machine_t *model) machine_at_common_init_ex(model, 2); device_add(&amstrad_megapc_nvr_device); /* NVR that is initialized to all 0x00's. */ - device_add(&keyboard_at_phoenix_device); + device_add(&kbc_at_phoenix_device); device_add(&neat_sx_device); @@ -812,9 +825,9 @@ machine_at_scamp_common_init(const machine_t *model, int is_ps2) machine_at_common_ide_init(model); if (is_ps2) - device_add(&keyboard_ps2_ami_device); + device_add(&kbc_ps2_ami_device); else - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -1011,7 +1024,7 @@ machine_at_arb1374_init(const machine_t *model) device_add(&ali1217_device); device_add(&w83787f_ide_en_device); - device_add(&keyboard_ps2_ami_device); + device_add(&kbc_ps2_ami_device); return ret; } @@ -1032,7 +1045,7 @@ machine_at_sbc350a_init(const machine_t *model) device_add(&ali1217_device); device_add(&ide_isa_device); device_add(&fdc37c665_ide_pri_device); - device_add(&keyboard_ps2_ami_device); + device_add(&kbc_ps2_ami_device); return ret; } @@ -1056,7 +1069,7 @@ machine_at_flytech386_init(const machine_t *model) if (gfxcard[0] == VID_INTERNAL) device_add(&tvga8900d_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); return ret; } @@ -1076,7 +1089,7 @@ machine_at_325ax_init(const machine_t *model) device_add(&ali1217_device); device_add(&fdc_at_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); return ret; } @@ -1096,7 +1109,7 @@ machine_at_mr1217_init(const machine_t *model) device_add(&ali1217_device); device_add(&fdc_at_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); return ret; } @@ -1116,7 +1129,7 @@ machine_at_pja511m_init(const machine_t *model) device_add_inst(&fdc37c669_device, 1); device_add_inst(&fdc37c669_device, 2); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&ali6117d_device); device_add(&sst_flash_29ee010_device); @@ -1137,7 +1150,7 @@ machine_at_prox1332_init(const machine_t *model) machine_at_common_init(model); device_add(&fdc37c669_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&ali6117d_device); device_add(&sst_flash_29ee010_device); @@ -1161,7 +1174,7 @@ machine_at_pc8_init(const machine_t *model) return ret; machine_at_common_init(model); - device_add(&keyboard_at_ncr_device); + device_add(&kbc_at_ncr_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -1194,7 +1207,7 @@ machine_at_3302_init(const machine_t *model) if (gfxcard[0] == VID_INTERNAL) device_add(machine_get_vid_device(machine)); - device_add(&keyboard_at_ncr_device); + device_add(&kbc_at_ncr_device); return ret; } @@ -1217,7 +1230,7 @@ machine_at_pc916sx_init(const machine_t *model) machine_at_common_init(model); - device_add(&keyboard_at_ncr_device); + device_add(&kbc_at_ncr_device); mem_remap_top(384); if (fdc_current[0] == FDC_INTERNAL) @@ -1246,7 +1259,7 @@ machine_at_m290_init(const machine_t *model) if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); - device_add(&keyboard_at_olivetti_device); + device_add(&kbc_at_olivetti_device); return ret; } diff --git a/src/machine/m_at_386dx_486.c b/src/machine/m_at_386dx_486.c index 731b1e2bd..0fcce36b3 100644 --- a/src/machine/m_at_386dx_486.c +++ b/src/machine/m_at_386dx_486.c @@ -64,7 +64,7 @@ machine_at_acc386_init(const machine_t *model) machine_at_common_init(model); device_add(&acc2168_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -85,7 +85,7 @@ machine_at_asus3863364k_init(const machine_t *model) machine_at_common_init(model); device_add(&rabbit_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -106,7 +106,7 @@ machine_at_asus386_init(const machine_t *model) machine_at_common_init(model); device_add(&rabbit_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -126,7 +126,8 @@ machine_at_tandy4000_init(const machine_t *model) return ret; machine_at_common_init(model); - device_add(&keyboard_at_device); + device_add(&cs8230_device); + device_add(&kbc_at_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -147,7 +148,7 @@ machine_at_dtk461_init(const machine_t *model) machine_at_common_init(model); device_add(&sl82c461_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -160,7 +161,7 @@ machine_at_sis401_common_init(const machine_t *model) { machine_at_common_init(model); device_add(&sis_85c401_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -211,7 +212,7 @@ machine_at_av4_init(const machine_t *model) machine_at_common_init(model); device_add(&sis_85c460_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -235,7 +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(&keyboard_ps2_device); + device_add(&kbc_ps2_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -261,7 +262,7 @@ machine_at_ecs386_init(const machine_t *model) if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); return ret; } @@ -284,7 +285,7 @@ machine_at_spc6000a_init(const machine_t *model) if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); return ret; } @@ -302,7 +303,7 @@ machine_at_ecs386v_init(const machine_t *model) machine_at_common_init(model); device_add(&ali1429_device); - device_add(&keyboard_ps2_intel_ami_pci_device); + device_add(&kbc_ps2_intel_ami_pci_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -324,7 +325,7 @@ machine_at_rycleopardlx_init(const machine_t *model) machine_at_common_init(model); device_add(&opti283_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -346,7 +347,7 @@ machine_at_486vchd_init(const machine_t *model) machine_at_common_init(model); device_add(&via_vt82c49x_device); - device_add(&keyboard_at_device); + device_add(&kbc_at_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -367,7 +368,7 @@ machine_at_cs4031_init(const machine_t *model) machine_at_common_init(model); device_add(&cs4031_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -388,7 +389,7 @@ machine_at_pb410a_init(const machine_t *model) machine_at_ibm_common_ide_init(model); - device_add(&keyboard_ps2_device); + device_add(&kbc_ps2_device); device_add(&acc3221_device); device_add(&acc2168_device); @@ -533,7 +534,7 @@ machine_at_acera1g_init(const machine_t *model) if (gfxcard[0] == VID_INTERNAL) device_add(&gd5428_onboard_device); - device_add(&keyboard_ps2_acer_pci_device); + device_add(&kbc_ps2_acer_pci_device); device_add_params(&pc87310_device, (void *) (PC87310_ALI)); device_add(&ide_ali5213_device); @@ -555,7 +556,7 @@ machine_at_acerv10_init(const machine_t *model) machine_at_common_init(model); device_add(&sis_85c461_device); - device_add(&keyboard_ps2_acer_pci_device); + device_add(&kbc_ps2_acer_pci_device); device_add(&ide_isa_device); if (fdc_current[0] == FDC_INTERNAL) @@ -582,7 +583,7 @@ machine_at_decpclpv_init(const machine_t *model) if (gfxcard[0] == VID_INTERNAL) device_add(machine_get_vid_device(machine)); - device_add(&keyboard_ps2_phoenix_pci_device); + device_add(&kbc_ps2_phoenix_pci_device); device_add(&ide_isa_2ch_device); device_add(&fdc37c663_ide_device); @@ -613,7 +614,7 @@ machine_at_dell466np_init(const machine_t *model) mem_mapping_set_addr(&bios_mapping, 0x0c0000, 0x40000); mem_mapping_set_exec(&bios_mapping, rom); - device_add(&keyboard_ps2_phoenix_pci_device); + device_add(&kbc_ps2_phoenix_pci_device); device_add(&ide_isa_device); device_add(&fdc37c661_ide_device); @@ -631,7 +632,7 @@ machine_at_ali1429_common_init(const machine_t *model, int is_green) else device_add(&ali1429_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -684,7 +685,7 @@ machine_at_opti495_init(const machine_t *model) device_add(&opti495slc_device); - device_add(&keyboard_at_device); + device_add(&kbc_at_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -699,7 +700,7 @@ machine_at_opti495_ami_common_init(const machine_t *model) device_add(&opti495sx_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -757,7 +758,7 @@ machine_at_c747_init(const machine_t *model) No idea what KBC it actually has but this produces the desired behavior: command A9 does absolutely nothing. */ - device_add(&keyboard_at_siemens_device); + device_add(&kbc_at_siemens_device); device_add(&um82c862f_ide_device); return ret; @@ -777,7 +778,7 @@ machine_at_exp4349_init(const machine_t *model) machine_at_common_init(model); device_add(&ali1429g_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -795,7 +796,7 @@ machine_at_403tg_common_init(const machine_t *model, int nvr_hack) device_add(&opti895_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -919,7 +920,7 @@ machine_at_pb450_init(const machine_t *model) device_add(&opti895_device); device_add(&opti602_device); device_add(&opti822_device); - device_add(&keyboard_ps2_phoenix_device); + device_add(&kbc_ps2_phoenix_device); device_add(&fdc37c665_ide_device); device_add(&ide_opti611_vlb_sec_device); device_add(&intel_flash_bxt_device); @@ -950,7 +951,7 @@ machine_at_pc330_6573_common_init(const machine_t *model) device_add(&opti602_device); device_add(&opti802g_device); device_add(&opti822_device); - device_add(&keyboard_ps2_ami_device); + device_add(&kbc_ps2_ami_device); device_add(&fdc37c665_ide_device); device_add(&ide_opti611_vlb_device); device_add(&intel_flash_bxt_device); @@ -1003,7 +1004,7 @@ machine_at_mvi486_init(const machine_t *model) device_add(&opti498_device); - device_add(&keyboard_at_device); + device_add(&kbc_at_device); device_add(&pc87311_ide_device); return ret; @@ -1032,7 +1033,7 @@ machine_at_ami471_init(const machine_t *model) return ret; machine_at_sis_85c471_common_init(model); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); return ret; } @@ -1054,7 +1055,7 @@ machine_at_advantage40xxd_init(const machine_t *model) if (gfxcard[0] == VID_INTERNAL) device_add(machine_get_vid_device(machine)); - device_add(&keyboard_ps2_phoenix_device); + device_add(&kbc_ps2_phoenix_device); device_add(&um82c863f_ide_device); device_add(&intel_flash_bxt_device); @@ -1074,7 +1075,7 @@ machine_at_vli486sv2g_init(const machine_t *model) return ret; machine_at_sis_85c471_common_init(model); - device_add(&keyboard_ps2_ami_device); + device_add(&kbc_ps2_ami_device); return ret; } @@ -1091,7 +1092,7 @@ machine_at_dtk486_init(const machine_t *model) return ret; machine_at_sis_85c471_common_init(model); - device_add(&keyboard_at_device); + device_add(&kbc_at_device); return ret; } @@ -1109,7 +1110,7 @@ machine_at_px471_init(const machine_t *model) machine_at_sis_85c471_common_init(model); device_add(&ide_vlb_device); - device_add(&keyboard_at_device); + device_add(&kbc_at_device); return ret; } @@ -1126,7 +1127,7 @@ machine_at_win471_init(const machine_t *model) return ret; machine_at_sis_85c471_common_init(model); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); return ret; } @@ -1151,7 +1152,7 @@ machine_at_pci400ca_init(const machine_t *model) pci_register_slot(0x04, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); device_add(&sio_device); device_add(&intel_flash_bxt_ami_device); @@ -1176,7 +1177,7 @@ machine_at_vi15g_init(const machine_t *model) return ret; machine_at_sis_85c471_common_init(model); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); return ret; } @@ -1199,7 +1200,7 @@ machine_at_greenb_init(const machine_t *model) device_add(&contaq_82c597_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); return ret; } @@ -1222,7 +1223,7 @@ machine_at_4gpv5_init(const machine_t *model) device_add(&contaq_82c596a_device); - device_add(&keyboard_at_device); + device_add(&kbc_at_device); return ret; } @@ -1262,7 +1263,7 @@ machine_at_r418_init(const machine_t *model) pci_register_slot(0x07, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&fdc37c665_device); - device_add(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); return ret; } @@ -1288,7 +1289,7 @@ machine_at_m4li_init(const machine_t *model) pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&fdc37c665_device); - device_add(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); return ret; } @@ -1314,7 +1315,7 @@ machine_at_ls486e_init(const machine_t *model) pci_register_slot(0x06, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&fdc37c665_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); return ret; } @@ -1340,7 +1341,7 @@ machine_at_4dps_init(const machine_t *model) pci_register_slot(0x07, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&w83787f_device); - device_add(&keyboard_ps2_ami_device); + device_add(&kbc_ps2_ami_device); device_add(&intel_flash_bxt_device); @@ -1367,7 +1368,7 @@ machine_at_ms4144_init(const machine_t *model) pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&w83787f_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); device_add(&sst_flash_29ee010_device); @@ -1396,7 +1397,7 @@ machine_at_acerp3_init(const machine_t *model) pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&fdc37c665_ide_device); - device_add(&keyboard_ps2_acer_pci_device); + device_add(&kbc_ps2_acer_pci_device); device_add(&ide_cmd640_pci_legacy_only_device); if (gfxcard[0] == VID_INTERNAL) @@ -1427,7 +1428,7 @@ machine_at_486sp3c_init(const machine_t *model) pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&fdc37c665_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&intel_flash_bxt_device); @@ -1455,7 +1456,7 @@ machine_at_4saw2_init(const machine_t *model) pci_register_slot(0x11, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&w83787f_device); - device_add(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&intel_flash_bxt_device); @@ -1485,7 +1486,7 @@ machine_at_alfredo_init(const machine_t *model) pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 1, 3, 4); pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 3, 2, 4); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_phoenix_device); + device_add(&kbc_ps2_phoenix_device); device_add(&sio_device); device_add(&fdc37c663_device); device_add(&intel_flash_bxt_ami_device); @@ -1514,7 +1515,7 @@ machine_at_ninja_init(const machine_t *model) pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 1, 2); pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 1, 2, 1); pci_register_slot(0x0B, PCI_CARD_NORMAL, 2, 1, 2, 1); - device_add(&keyboard_ps2_phoenix_device); + device_add(&kbc_ps2_phoenix_device); device_add(&intel_flash_bxt_ami_device); device_add(&i420ex_device); @@ -1544,7 +1545,7 @@ machine_at_bat4ip3e_init(const machine_t *model) pci_register_slot(0x0a, PCI_CARD_NORMAL, 1, 2, 1, 2); device_add(&phoenix_486_jumper_pci_device); - device_add(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&i420ex_device); device_add(&ide_cmd640_pci_device); device_add(&fdc37c665_device); @@ -1571,7 +1572,7 @@ machine_at_486pi_init(const machine_t *model) pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 1, 2, 1); pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 1, 2); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&fdc37c665_device); device_add(&i420ex_device); @@ -1596,7 +1597,7 @@ machine_at_sb486p_init(const machine_t *model) pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 1, 2); pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 1, 2, 1); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&i82091aa_device); device_add(&i420ex_device); @@ -1625,7 +1626,7 @@ machine_at_486sp3_init(const machine_t *model) pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 05 = Slot 3 */ pci_register_slot(0x06, PCI_CARD_NORMAL, 4, 1, 2, 3); /* 06 = Slot 4 */ pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_at_ami_device); /* Uses the AMIKEY KBC */ + device_add(&kbc_at_ami_device); /* Uses the AMIKEY KBC */ device_add(&sio_device); device_add(&fdc37c663_ide_device); device_add(&sst_flash_29ee010_device); @@ -1654,7 +1655,7 @@ machine_at_amis76_init(const machine_t *model) pci_register_slot(0x0E, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&sio_device); device_add(&fdc37c665_device); device_add(&intel_flash_bxt_ami_device); @@ -1686,7 +1687,7 @@ machine_at_pci400cb_init(const machine_t *model) pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 0E = Slot 2 */ pci_register_slot(0x0D, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 0D = Slot 3 */ pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 0C = Slot 4 */ - device_add(&keyboard_ps2_ami_pci_device); /* Assume AMI Megakey 1993 standalone ('P') + device_add(&kbc_ps2_ami_pci_device); /* Assume AMI Megakey 1993 standalone ('P') because of the Tekram machine below. */ device_add(&ims8848_device); @@ -1716,7 +1717,7 @@ machine_at_g486ip_init(const machine_t *model) pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 03 = Slot 1 */ pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 04 = Slot 2 */ pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 05 = Slot 3 */ - device_add(&keyboard_ps2_ami_pci_device); /* AMI Megakey 1993 stanalone ('P') */ + device_add(&kbc_ps2_ami_pci_device); /* AMI Megakey 1993 stanalone ('P') */ device_add(&ims8848_device); @@ -1747,7 +1748,7 @@ machine_at_486sp3g_init(const machine_t *model) pci_register_slot(0x05, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 05 = Slot 2 */ pci_register_slot(0x04, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 04 = Slot 3 */ pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_ami_pci_device); /* Uses the AMIKEY KBC */ + device_add(&kbc_ps2_ami_pci_device); /* Uses the AMIKEY KBC */ device_add(&sio_zb_device); device_add(&pc87332_398_ide_device); device_add(&sst_flash_29ee010_device); @@ -1825,7 +1826,7 @@ machine_at_sb486pv_init(const machine_t *model) if (gfxcard[0] == VID_INTERNAL) device_add(machine_get_vid_device(machine)); - device_add(&keyboard_ps2_ami_pci_device); + 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); @@ -1859,7 +1860,7 @@ machine_at_486ap4_init(const machine_t *model) pci_register_slot(0x0a, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 0a = Slot 2 */ pci_register_slot(0x0b, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 0b = Slot 3 */ pci_register_slot(0x0c, PCI_CARD_NORMAL, 4, 1, 2, 3); /* 0c = Slot 4 */ - device_add(&keyboard_ps2_ami_pci_device); /* Uses the AMIKEY KBC */ + device_add(&kbc_ps2_ami_pci_device); /* Uses the AMIKEY KBC */ if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -1892,7 +1893,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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&sst_flash_29ee010_device); return ret; @@ -1921,7 +1922,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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&sst_flash_29ee010_device); return ret; @@ -1948,7 +1949,7 @@ machine_at_abpb4_init(const machine_t *model) device_add(&ali1489_device); device_add(&w83787f_device); - device_add(&keyboard_at_device); + device_add(&kbc_at_device); #if 0 device_add(&intel_flash_bxt_device); #endif @@ -1978,7 +1979,7 @@ machine_at_win486pci_init(const machine_t *model) device_add(&ali1489_device); device_add(&prime3b_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); return ret; } @@ -2005,7 +2006,7 @@ machine_at_ms4145_init(const machine_t *model) device_add(&ali1489_device); device_add(&w83787f_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); device_add(&sst_flash_29ee010_device); return ret; @@ -2037,7 +2038,7 @@ machine_at_sbc490_init(const machine_t *model) device_add(&ali1489_device); device_add(&fdc37c665_device); - device_add(&keyboard_ps2_ami_device); + device_add(&kbc_ps2_ami_device); device_add(&sst_flash_29ee010_device); return ret; @@ -2062,7 +2063,7 @@ machine_at_tf486_init(const machine_t *model) device_add(&ali1489_device); device_add(&w83977ef_device); - device_add(&keyboard_at_device); + device_add(&kbc_at_device); device_add(&sst_flash_29ee010_device); return ret; @@ -2085,7 +2086,7 @@ machine_at_arb1476_init(const machine_t *model) device_add(&ali1489_device); device_add(&fdc37c669_device); - device_add(&keyboard_ps2_device); + device_add(&kbc_ps2_device); device_add(&sst_flash_29ee010_device); return ret; @@ -2109,7 +2110,7 @@ machine_at_itoxstar_init(const machine_t *model) 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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&stpc_client_device); device_add(&sst_flash_29ee020_device); device_add(&w83781d_device); /* fans: Chassis, CPU, unused; temperatures: Chassis, CPU, unused */ @@ -2140,7 +2141,7 @@ machine_at_arb1423c_init(const machine_t *model) 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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&stpc_consumer2_device); device_add(&winbond_flash_w29c020_device); @@ -2167,7 +2168,7 @@ machine_at_arb1479_init(const machine_t *model) 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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&stpc_consumer2_device); device_add(&winbond_flash_w29c020_device); @@ -2191,7 +2192,7 @@ machine_at_iach488_init(const machine_t *model) 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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&stpc_consumer2_device); device_add(&sst_flash_29ee020_device); @@ -2219,7 +2220,7 @@ machine_at_pcm9340_init(const machine_t *model) 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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&stpc_elite_device); device_add(&sst_flash_29ee020_device); @@ -2247,7 +2248,7 @@ machine_at_pcm5330_init(const machine_t *model) pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&stpc_serial_device); device_add(&w83977f_370_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&stpc_atlas_device); device_add(&sst_flash_29ee020_device); @@ -2280,7 +2281,7 @@ machine_at_ecs486_init(const machine_t *model) device_add(&ide_cmd640_pci_legacy_only_device); device_add(&fdc37c665_device); device_add(&intel_flash_bxt_device); - device_add(&keyboard_ps2_ami_device); + device_add(&kbc_ps2_ami_device); return ret; } @@ -2362,9 +2363,9 @@ machine_at_hot433a_init(const machine_t *model) device_add(&um8669f_device); device_add(&winbond_flash_w29c010_device); if (is_award) - device_add(&keyboard_ps2_ami_device); + device_add(&kbc_ps2_ami_device); else - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); pic_toggle_latch(is_award); @@ -2395,7 +2396,7 @@ machine_at_84xxuuda_init(const machine_t *model) device_add(&umc_8886bf_device); device_add(&um8663bf_device); device_add(&winbond_flash_w29c010_device); - device_add(&keyboard_ps2_ami_device); + device_add(&kbc_ps2_ami_device); return ret; } @@ -2426,7 +2427,7 @@ machine_at_pl4600c_init(const machine_t *model) device_add(&umc_8886af_device); device_add(&um8663af_device); device_add(&sst_flash_29ee010_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); if (gfxcard[0] == VID_INTERNAL) device_add(&gd5430_onboard_pci_device); @@ -2465,7 +2466,7 @@ machine_at_atc1415_init(const machine_t *model) device_add(&umc_hb4_device); device_add(&umc_8886bf_device); device_add(&intel_flash_bxt_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -2497,7 +2498,7 @@ machine_at_actionpc2600_init(const machine_t *model) device_add(&umc_8886bf_device); device_add(&fdc37c665_device); device_add(&intel_flash_bxt_device); - device_add(&keyboard_ps2_tg_ami_device); + device_add(&kbc_ps2_tg_ami_device); if (gfxcard[0] == VID_INTERNAL) device_add(machine_get_vid_device(machine)); @@ -2530,7 +2531,7 @@ machine_at_actiontower8400_init(const machine_t *model) device_add(&fdc37c665_device); 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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); if (gfxcard[0] == VID_INTERNAL) device_add(machine_get_vid_device(machine)); @@ -2561,7 +2562,7 @@ machine_at_m919_init(const machine_t *model) device_add(&umc_8886af_device); /* AF is correct - the BIOS does IDE writes to ports 108h and 109h. */ device_add(&um8663bf_device); device_add(&sst_flash_29ee010_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); return ret; } @@ -2590,7 +2591,7 @@ machine_at_spc7700plw_init(const machine_t *model) device_add(&umc_8886af_device); device_add(&fdc37c665_device); device_add(&intel_flash_bxt_device); - device_add(&keyboard_ps2_ami_device); + device_add(&kbc_ps2_ami_device); return ret; } @@ -2624,7 +2625,7 @@ machine_at_ms4134_init(const machine_t *model) device_add(&ali1435_device); device_add(&sst_flash_29ee010_device); - device_add(&keyboard_ps2_ami_device); + device_add(&kbc_ps2_ami_device); return ret; } @@ -2657,7 +2658,7 @@ machine_at_tg486gp_init(const machine_t *model) device_add(&ali1435_device); device_add(&sst_flash_29ee010_device); - device_add(&keyboard_ps2_tg_ami_device); + device_add(&kbc_ps2_tg_ami_device); return ret; } @@ -2678,7 +2679,7 @@ machine_at_tg486g_init(const machine_t *model) device_add(&sis_85c471_device); device_add(&ide_isa_device); device_add(&fdc37c651_ide_device); - device_add(&keyboard_ps2_tg_ami_pci_device); + device_add(&kbc_ps2_tg_ami_pci_device); if (gfxcard[0] != VID_INTERNAL) { for (uint16_t i = 0; i < 32768; i++) @@ -2705,7 +2706,7 @@ machine_at_dvent4xx_init(const machine_t *model) device_add(&sis_85c471_device); device_add(&ide_cmd640_vlb_pri_device); device_add(&fdc37c665_ide_device); - device_add(&keyboard_ps2_phoenix_device); + device_add(&kbc_ps2_phoenix_device); if (gfxcard[0] == VID_INTERNAL) device_add(machine_get_vid_device(machine)); @@ -2727,7 +2728,7 @@ machine_at_ecsal486_init(const machine_t *model) machine_at_common_init(model); device_add(&ali1429g_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -2750,7 +2751,7 @@ machine_at_ap4100aa_init(const machine_t *model) device_add(&ami_1994_nvr_device); device_add(&ali1429g_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&ide_vlb_device); device_add(&um8663bf_device); @@ -2770,7 +2771,7 @@ machine_at_atc1762_init(const machine_t *model) machine_at_common_init(model); device_add(&ali1429g_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -2792,7 +2793,7 @@ machine_at_dataexpert386wb_init(const machine_t *model) machine_at_common_init(model); device_add(&opti391_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -2816,7 +2817,7 @@ machine_at_isa486c_init(const machine_t *model) device_add(&isa486c_device); device_add(&port_92_key_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -2840,7 +2841,7 @@ machine_at_genoa486_init(const machine_t *model) device_add(&compaq_genoa_device); device_add(&port_92_key_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -2861,7 +2862,7 @@ machine_at_ga486l_init(const machine_t *model) machine_at_common_init(model); device_add(&opti381_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -2887,7 +2888,7 @@ machine_at_cobalt_init(const machine_t *model) device_add(&ide_isa_sec_device); device_add(&fdc37c665_device); - device_add(&keyboard_ps2_ami_device); + device_add(&kbc_ps2_ami_device); if (gfxcard[0] == VID_INTERNAL) device_add(machine_get_vid_device(machine)); @@ -2912,7 +2913,7 @@ machine_at_cougar_init(const machine_t *model) device_add(&opti499_device); device_add(&fdc37c665_ide_pri_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); diff --git a/src/machine/m_at_compaq.c b/src/machine/m_at_compaq.c index 2fbfed0ff..d918dbfc6 100644 --- a/src/machine/m_at_compaq.c +++ b/src/machine/m_at_compaq.c @@ -133,7 +133,7 @@ machine_at_compaq_init(const machine_t *model, int type) switch (type) { case COMPAQ_PORTABLEII: machine_at_common_init(model); - device_add(&keyboard_at_compaq_device); + device_add(&kbc_at_compaq_device); break; case COMPAQ_PORTABLEIII: @@ -143,7 +143,7 @@ machine_at_compaq_init(const machine_t *model, int type) device_add(&compaq_plasma_device); machine_at_common_init(model); - device_add(&keyboard_at_compaq_device); + device_add(&kbc_at_compaq_device); break; case COMPAQ_PORTABLEIII386: @@ -153,14 +153,14 @@ machine_at_compaq_init(const machine_t *model, int type) device_add(&compaq_plasma_device); device_add(&compaq_386_device); machine_at_common_init(model); - device_add(&keyboard_at_compaq_device); + device_add(&kbc_at_compaq_device); break; case COMPAQ_DESKPRO386: case COMPAQ_DESKPRO386_05_1988: device_add(&compaq_386_device); machine_at_common_init(model); - device_add(&keyboard_at_compaq_device); + device_add(&kbc_at_compaq_device); break; default: diff --git a/src/machine/m_at_grid.c b/src/machine/m_at_grid.c index 03b7288b9..448749589 100644 --- a/src/machine/m_at_grid.c +++ b/src/machine/m_at_grid.c @@ -342,7 +342,7 @@ int machine_at_grid1520_init(const machine_t *model) { machine_at_common_ide_init(model); mem_remap_top(384); - device_add(&keyboard_at_device); + device_add(&kbc_at_device); // for now just select CGA with amber monitor //device_add(&cga_device); diff --git a/src/machine/m_at_misc.c b/src/machine/m_at_misc.c index d4264f07e..b6d16246c 100644 --- a/src/machine/m_at_misc.c +++ b/src/machine/m_at_misc.c @@ -66,7 +66,7 @@ machine_at_vpc2007_init(const machine_t *model) device_add(&i440bx_no_agp_device); device_add(&piix4e_device); device_add(&w83977f_370_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); 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 2ac805bee..4a5f4cb17 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -109,7 +109,7 @@ machine_at_kn97_init(const machine_t *model) pci_register_slot(0x0D, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&i440fx_device); device_add(&piix3_device); - device_add(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&w83877f_device); device_add(&intel_flash_bxt_device); device_add(&lm78_device); /* fans: Chassis, CPU, Power; temperature: MB */ @@ -142,7 +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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83977tf_device); device_add(&sst_flash_29ee010_device); spd_register(SPD_TYPE_SDRAM, 0xF, 256); @@ -244,7 +244,7 @@ machine_at_ma30d_init(const machine_t *model) device_add(&i440lx_device); device_add(&piix4e_device); device_add(&nec_mate_unk_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&fdc37c67x_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); @@ -273,7 +273,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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83977tf_device); device_add(&sst_flash_29ee010_device); spd_register(SPD_TYPE_SDRAM, 0x03, 256); @@ -309,7 +309,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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83977ef_device); #if 0 device_add(ics9xxx_get(ICS9150_08)); /* setting proper speeds requires some interaction with the AS97127F ASIC */ @@ -346,7 +346,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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83977tf_device); device_add(&winbond_flash_w29c020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); @@ -379,7 +379,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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83977ef_device); device_add(ics9xxx_get(ICS9250_08)); device_add(&sst_flash_39sf020_device); @@ -416,7 +416,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(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&w83977ef_device); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); @@ -447,7 +447,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(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&w83977f_device); device_add(&sst_flash_29ee010_device); spd_register(SPD_TYPE_SDRAM, 0xF, 256); @@ -479,7 +479,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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83977tf_device); device_add(&sst_flash_29ee020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); @@ -511,7 +511,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(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&w83977ef_device); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); @@ -542,7 +542,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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83977tf_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0xF, 256); @@ -582,7 +582,7 @@ machine_at_p6sba_init(const machine_t *model) device_add(&i440bx_device); device_add(&piix4e_device); device_add(&w83977tf_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); 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? */ @@ -655,7 +655,7 @@ machine_at_ficka6130_init(const machine_t *model) device_add(&via_apro_device); device_add(&via_vt82c596a_device); device_add(&w83877tf_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&sst_flash_29ee020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); @@ -688,7 +688,7 @@ machine_at_p3v133_init(const machine_t *model) device_add(&via_apro133_device); device_add(&via_vt82c596b_device); device_add(&w83977ef_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(ics9xxx_get(ICS9248_39)); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 512); @@ -725,7 +725,7 @@ machine_at_p3v4x_init(const machine_t *model) device_add(&via_apro133a_device); device_add(&via_vt82c596b_device); device_add(&w83977ef_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(ics9xxx_get(ICS9250_18)); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0xF, 512); @@ -758,7 +758,7 @@ machine_at_gt694va_init(const machine_t *model) device_add(&via_apro133a_device); device_add(&via_vt82c596b_device); device_add(&w83977ef_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); 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 */ @@ -796,10 +796,10 @@ machine_at_vei8_init(const machine_t *model) pci_register_slot(0x10, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); - device_add(&i440bx_device); + device_add(&i440zx_device); device_add(&piix4e_device); device_add(&fdc37m60x_370_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(ics9xxx_get(ICS9250_08)); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x3, 512); @@ -828,7 +828,7 @@ machine_at_ms6168_common_init(const machine_t *model) if (gfxcard[0] == VID_INTERNAL) device_add(&voodoo_3_2000_agp_onboard_8m_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x3, 256); @@ -924,7 +924,7 @@ machine_at_p6f99_init(const machine_t *model) pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x02, PCI_CARD_AGPBRIDGE, 0, 0, 0, 0); device_add(&sis_5600_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&it8661f_device); device_add(&winbond_flash_w29c020_device); @@ -957,7 +957,7 @@ machine_at_m747_init(const machine_t *model) pci_register_slot(0x0D, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x02, PCI_CARD_AGPBRIDGE, 0, 0, 0, 0); device_add(&sis_5600_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&it8661f_device); device_add(&winbond_flash_w29c020_device); diff --git a/src/machine/m_at_slot2.c b/src/machine/m_at_slot2.c index 7bf412823..b9c556206 100644 --- a/src/machine/m_at_slot2.c +++ b/src/machine/m_at_slot2.c @@ -65,7 +65,7 @@ machine_at_6gxu_init(const machine_t *model) device_add(&i440gx_device); device_add(&piix4e_device); - device_add(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&w83977ef_device); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0xF, 512); @@ -102,7 +102,7 @@ machine_at_s2dge_init(const machine_t *model) device_add(&i440gx_device); device_add(&piix4e_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83977tf_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0xF, 512); diff --git a/src/machine/m_at_socket370.c b/src/machine/m_at_socket370.c index ff299ee50..fe87564e7 100644 --- a/src/machine/m_at_socket370.c +++ b/src/machine/m_at_socket370.c @@ -64,7 +64,7 @@ machine_at_s370slm_init(const machine_t *model) device_add(&i440lx_device); device_add(&piix4e_device); device_add(&w83977tf_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); 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 */ @@ -99,7 +99,7 @@ machine_at_prosignias31x_bx_init(const machine_t *model) device_add(&i440bx_device); device_add(&piix4e_device); device_add(&w83977ef_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&winbond_flash_w29c020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); device_add(&gl520sm_2d_device); /* fans: CPU, Chassis; temperature: System */ @@ -139,7 +139,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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83977ef_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); @@ -177,7 +177,7 @@ machine_at_p6bap_init(const machine_t *model) device_add(&via_apro133a_device); /* Rebranded as ET82C693A */ device_add(&via_vt82c596b_device); /* Rebranded as ET82C696B */ device_add(&w83977ef_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); @@ -212,7 +212,7 @@ machine_at_p6bat_init(const machine_t *model) device_add(&via_apro133_device); device_add(&via_vt82c596b_device); device_add(&w83977ef_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); @@ -248,8 +248,9 @@ 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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83977ef_device); + device_add(&ide_cmd648_ter_qua_onboard_device); device_add(ics9xxx_get(ICS9250_08)); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0xF, 256); @@ -282,7 +283,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(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&w83977ef_device); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0xF, 256); @@ -314,7 +315,7 @@ machine_at_m773_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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&it8671f_device); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x3, 256); @@ -355,7 +356,7 @@ machine_at_ambx133_init(const machine_t *model) device_add(&i440bx_device); device_add(&piix4e_device); device_add(&w83977ef_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); device_add(&gl518sm_2d_device); /* fans: CPUFAN1, CPUFAN2; temperature: CPU */ @@ -392,7 +393,7 @@ machine_at_awo671r_init(const machine_t *model) device_add(&piix4e_device); device_add_inst(&w83977ef_device, 1); device_add_inst(&w83977ef_device, 2); - device_add(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&sst_flash_39sf020_device); if (gfxcard[0] == VID_INTERNAL) device_add(machine_get_vid_device(machine)); @@ -426,7 +427,7 @@ machine_at_63a1_init(const machine_t *model) device_add(&i440zx_device); device_add(&piix4e_device); device_add(&w83977tf_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x3, 256); @@ -457,7 +458,7 @@ machine_at_apas3_init(const machine_t *model) device_add(&via_apro_device); device_add(&via_vt82c586b_device); device_add(&fdc37c669_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); @@ -491,7 +492,7 @@ machine_at_cuv4xls_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&via_apro133a_device); device_add(&via_vt82c686b_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(ics9xxx_get(ICS9250_18)); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0xF, 1024); @@ -527,7 +528,7 @@ machine_at_6via90ap_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&via_apro133a_device); device_add(&via_vt82c686b_device); /* fans: CPU1, CPU2; temperatures: CPU, System, unused */ - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(ics9xxx_get(ICS9250_18)); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 1024); @@ -562,7 +563,7 @@ machine_at_7sbb_init(const machine_t *model) pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x02, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&sis_5600_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&it8661f_device); device_add(&sst_flash_29ee020_device); /* assumed */ diff --git a/src/machine/m_at_socket4.c b/src/machine/m_at_socket4.c index c101fb95a..402489d89 100644 --- a/src/machine/m_at_socket4.c +++ b/src/machine/m_at_socket4.c @@ -68,7 +68,7 @@ machine_at_v12p_init(const machine_t *model) pci_register_slot(0x04, PCI_CARD_NORMAL, 4, 0, 0, 0); pci_register_slot(0x05, PCI_CARD_NORMAL, 0, 0, 0, 0); device_add(&i430lx_device); - device_add(&keyboard_ps2_acer_pci_device); + device_add(&kbc_ps2_acer_pci_device); device_add(&sio_zb_device); device_add_params(&pc87310_device, (void *) (PC87310_ALI)); device_add(&amd_am28f010_flash_device); @@ -127,7 +127,7 @@ machine_at_premiere_common_init(const machine_t *model, int pci_switch) pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 1, 3, 4); pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 3, 2, 4); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_phoenix_device); + 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); @@ -152,7 +152,7 @@ machine_at_sp4_common_init(const machine_t *model) pci_register_slot(0x09, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&sis_85c50x_device); device_add(&ide_cmd640_pci_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&fdc37c665_device); device_add(&intel_flash_bxt_device); } @@ -178,7 +178,7 @@ machine_at_excaliburpci_init(const machine_t *model) 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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&ide_cmd640_pci_legacy_only_device); device_add(&i430lx_device); @@ -208,7 +208,7 @@ machine_at_p5mp3_init(const machine_t *model) pci_register_slot(0x03, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 03 = Slot 3 */ pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&fdc_at_device); - device_add(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&sio_zb_device); device_add(&catalyst_flash_device); @@ -243,7 +243,7 @@ machine_at_dellxp60_init(const machine_t *model) pci_register_slot(0x06, PCI_CARD_NORMAL, 2, 1, 3, 4); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430lx_device); - device_add(&keyboard_ps2_phoenix_device); + device_add(&kbc_ps2_phoenix_device); device_add(&sio_zb_device); device_add(&fdc37c665_device); device_add(&intel_flash_bxt_ami_device); @@ -274,7 +274,7 @@ machine_at_opti560l_init(const machine_t *model) pci_register_slot(0x08, PCI_CARD_NORMAL, 2, 1, 3, 4); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430lx_device); - device_add(&keyboard_ps2_phoenix_device); + device_add(&kbc_ps2_phoenix_device); device_add(&sio_zb_device); device_add(&i82091aa_device); device_add(&intel_flash_bxt_ami_device); @@ -306,7 +306,7 @@ machine_at_ambradp60_init(const machine_t *model) pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 1, 3, 4); pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 3, 2, 4); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_phoenix_device); + device_add(&kbc_ps2_phoenix_device); device_add(&sio_zb_device); device_add(&fdc37c665_ide_pri_device); device_add(&intel_flash_bxt_ami_device); @@ -339,7 +339,7 @@ machine_at_valuepointp60_init(const machine_t *model) pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 1, 3, 4); pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 3, 2, 4); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_ps1_pci_device); + device_add(&kbc_ps2_ps1_pci_device); device_add(&sio_device); device_add(&fdc37c665_ide_device); device_add(&intel_flash_bxt_ami_device); @@ -388,7 +388,7 @@ machine_at_award_common_init(const machine_t *model) if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); device_add(&sio_zb_device); device_add(&intel_flash_bxt_device); } @@ -439,7 +439,7 @@ machine_at_pb520r_init(const machine_t *model) if (gfxcard[0] == VID_INTERNAL) device_add(&gd5434_onboard_pci_device); - device_add(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&sio_zb_device); device_add(&i82091aa_ide_device); device_add(&intel_flash_bxt_ami_device); @@ -469,7 +469,7 @@ machine_at_m5pi_init(const machine_t *model) pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430lx_device); device_add(&sio_zb_device); - device_add(&keyboard_ps2_phoenix_device); + device_add(&kbc_ps2_phoenix_device); device_add(&ide_w83769f_pci_single_channel_device); device_add(&fdc37c665_ide_sec_device); device_add(&intel_flash_bxt_ami_device); @@ -500,7 +500,7 @@ machine_at_globalyst330_p5_init(const machine_t *model) device_add(&opti5x7_pci_device); device_add(&opti822_device); device_add(&sst_flash_29ee010_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -524,7 +524,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(&keyboard_ps2_intel_ami_pci_device); + device_add(&kbc_ps2_intel_ami_pci_device); return ret; } @@ -553,7 +553,7 @@ machine_at_p5vl_init(const machine_t *model) device_add(&opti5x7_pci_device); device_add(&opti822_device); device_add(&sst_flash_29ee010_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -584,7 +584,7 @@ machine_at_excaliburpci2_init(const machine_t *model) 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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&ide_cmd640_pci_legacy_only_device); device_add(&sis_85c50x_device); diff --git a/src/machine/m_at_socket5.c b/src/machine/m_at_socket5.c index a4bb77a55..4abfada33 100644 --- a/src/machine/m_at_socket5.c +++ b/src/machine/m_at_socket5.c @@ -106,7 +106,7 @@ machine_at_d842_init(const machine_t *model) pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 3, 2, 4); /* Slot 01 */ pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 1, 3, 4); /* Slot 02 */ - device_add(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&i430nx_device); device_add(&sio_zb_device); device_add(&fdc37c665_device); @@ -201,7 +201,7 @@ machine_at_p54np4_init(const machine_t *model) pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430nx_device); device_add(&sio_zb_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&fdc37c665_ide_pri_device); device_add(&intel_flash_bxt_device); @@ -246,7 +246,7 @@ machine_at_tek932_init(const machine_t *model) pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0D, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 3, 2, 4); - device_add(&keyboard_ps2_intel_ami_pci_device); + device_add(&kbc_ps2_intel_ami_pci_device); device_add(&i430nx_device); device_add(&sio_zb_device); device_add(&ide_vlb_device); @@ -278,7 +278,7 @@ machine_at_acerv30_init(const machine_t *model) pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&i430fx_device); device_add(&piix_device); - device_add(&keyboard_ps2_acer_pci_device); + device_add(&kbc_ps2_acer_pci_device); device_add(&fdc37c665_device); device_add(&sst_flash_29ee010_device); @@ -307,7 +307,7 @@ machine_at_apollo_init(const machine_t *model) pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&i430fx_device); device_add(&piix_device); device_add(&pc87332_398_device); @@ -343,7 +343,7 @@ machine_at_optiplexgxl_init(const machine_t *model) if (sound_card_current[0] == SOUND_INTERNAL) machine_snd = device_add(machine_get_snd_device(machine)); - device_add(&keyboard_ps2_phoenix_pci_device); + device_add(&kbc_ps2_phoenix_pci_device); device_add(&i430fx_device); device_add(&piix_device); device_add(&pc87332_device); @@ -407,7 +407,7 @@ machine_at_zappa_init(const machine_t *model) pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_intel_ami_pci_device); + device_add(&kbc_ps2_intel_ami_pci_device); device_add(&i430fx_device); device_add(&piix_device); device_add(&pc87306_device); @@ -435,7 +435,7 @@ machine_at_powermatev_init(const machine_t *model) pci_register_slot(0x08, PCI_CARD_NORMAL, 0, 0, 0, 0); pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&i430fx_device); device_add(&piix_device); device_add(&fdc37c665_device); @@ -464,7 +464,7 @@ machine_at_hawk_init(const machine_t *model) pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_tg_ami_pci_device); + device_add(&kbc_ps2_tg_ami_pci_device); device_add(&i430fx_device); device_add(&piix_device); device_add(&fdc37c665_device); @@ -495,7 +495,7 @@ machine_at_pt2000_init(const machine_t *model) pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); /* Should be VIA, but we do not emulate that yet. */ - device_add(&keyboard_ps2_holtek_device); + device_add(&kbc_ps2_holtek_device); device_add(&i430fx_device); device_add(&piix_device); device_add(&pc87332_398_device); @@ -518,7 +518,7 @@ machine_at_pat54pv_init(const machine_t *model) machine_at_common_init(model); device_add(&opti5x7_device); - device_add(&keyboard_ps2_intel_ami_pci_device); + device_add(&kbc_ps2_intel_ami_pci_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -548,7 +548,7 @@ machine_at_hot543_init(const machine_t *model) device_add(&opti5x7_pci_device); device_add(&opti822_device); device_add(&sst_flash_29ee010_device); - device_add(&keyboard_at_device); + device_add(&kbc_at_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -578,7 +578,7 @@ machine_at_ncselp90_init(const machine_t *model) device_add(&opti5x7_pci_device); device_add(&opti822_device); device_add(&sst_flash_29ee010_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&ide_opti611_vlb_device); device_add(&fdc37c665_ide_sec_device); device_add(&ide_vlb_2ch_device); @@ -626,7 +626,7 @@ machine_at_sq588_init(const machine_t *model) pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&sis_85c50x_device); device_add(&ide_cmd640_pci_single_channel_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&fdc37c665_ide_device); device_add(&sst_flash_29ee010_device); @@ -655,7 +655,7 @@ machine_at_p54sps_init(const machine_t *model) pci_register_slot(0x09, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&sis_85c50x_device); device_add(&ide_pci_2ch_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); device_add(&w83787f_device); device_add(&sst_flash_29ee010_device); @@ -686,7 +686,7 @@ machine_at_ms5109_init(const machine_t *model) pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&sis_550x_85c503_device); device_add(&ide_w83769f_pci_device); - device_add(&keyboard_ps2_ami_device); + device_add(&kbc_ps2_ami_device); device_add(&w83787f_device); device_add(&sst_flash_29ee010_device); @@ -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(&keyboard_ps2_tg_ami_device); + device_add(&kbc_ps2_tg_ami_device); device_add(&fdc37c665_device); device_add(&intel_flash_bxt_ami_device); @@ -752,7 +752,7 @@ machine_at_hot539_init(const machine_t *model) device_add(&umc_8890_device); device_add(&umc_8886af_device); device_add(&sst_flash_29ee010_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&um8663af_device); return ret; diff --git a/src/machine/m_at_socket7.c b/src/machine/m_at_socket7.c index 46c7b7623..976cde607 100644 --- a/src/machine/m_at_socket7.c +++ b/src/machine/m_at_socket7.c @@ -111,7 +111,7 @@ machine_at_ap5vm_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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&fdc37c665_device); device_add(&ncr53c810_onboard_pci_device); device_add(&intel_flash_bxt_device); @@ -141,7 +141,7 @@ machine_at_p55t2p4_init(const machine_t *model) pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430hx_device); device_add(&piix3_device); - device_add(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&w83877f_device); device_add(&intel_flash_bxt_device); @@ -244,7 +244,7 @@ machine_at_tc430hx_init(const machine_t *model) device_add(&i430hx_device); device_add(&piix3_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&pc87306_device); device_add(&intel_flash_bxt_ami_device); @@ -283,7 +283,7 @@ machine_at_infinia7200_init(const machine_t *model) device_add(&i430hx_device); device_add(&piix3_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&pc87306_device); device_add(&intel_flash_bxt_ami_device); @@ -342,7 +342,7 @@ machine_at_cu430hx_common_init(const machine_t *model) device_add(&i430hx_device); device_add(&piix3_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&pc87306_device); device_add(&intel_flash_bxt_ami_device); } @@ -415,7 +415,7 @@ machine_at_pcv90_init(const machine_t *model) pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430hx_device); device_add(&piix3_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&pc87306_device); device_add(&intel_flash_bxt_ami_device); @@ -461,7 +461,7 @@ machine_at_epc2102_init(const machine_t *model) pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430hx_device); device_add(&piix3_device); - device_add(&keyboard_ps2_intel_ami_pci_device); + device_add(&kbc_ps2_intel_ami_pci_device); device_add(&i82091aa_device); device_add(&sst_flash_39sf010_device); @@ -490,7 +490,7 @@ machine_at_p55tvp4_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(&keyboard_ps2_ami_pci_device); // It uses the AMIKEY KBC + device_add(&kbc_ps2_ami_pci_device); // It uses the AMIKEY KBC device_add(&w83877f_device); device_add(&intel_flash_bxt_device); @@ -518,7 +518,7 @@ 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(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&prime3c_device); device_add(&intel_flash_bxt_device); @@ -547,7 +547,7 @@ machine_at_8500tvxa_init(const machine_t *model) pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 3, 2, 1); device_add(&i430vx_device); device_add(&piix3_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&um8669f_device); device_add(&sst_flash_29ee010_device); @@ -734,7 +734,7 @@ machine_at_pb680_init(const machine_t *model) device_add(&i430vx_device); device_add(&piix3_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&pc87306_device); device_add(&intel_flash_bxt_ami_device); @@ -794,7 +794,7 @@ machine_at_mb520n_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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&fdc37c669_device); device_add(&intel_flash_bxt_device); @@ -823,7 +823,7 @@ machine_at_i430vx_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(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&um8669f_device); device_add(&intel_flash_bxt_device); @@ -890,7 +890,7 @@ machine_at_ma23c_init(const machine_t *model) device_add(&i430tx_device); device_add(&piix4_device); device_add(&nec_mate_unk_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&fdc37c67x_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); @@ -926,7 +926,7 @@ machine_at_nupro592_init(const machine_t *model) device_add(&i430tx_device); device_add(&piix4_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83977ef_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x3, 128); @@ -963,7 +963,7 @@ machine_at_tx97_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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83877tf_acorp_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x3, 128); @@ -1079,7 +1079,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(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&w83977tf_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x3, 128); @@ -1109,7 +1109,7 @@ machine_at_mb540n_init(const machine_t *model) pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); /* PIIX4 */ device_add(&i430tx_device); device_add(&piix4_device); - device_add(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&um8669f_device); device_add(&sst_flash_29ee010_device); spd_register(SPD_TYPE_SDRAM, 0x3, 128); @@ -1140,7 +1140,7 @@ machine_at_56a5_init(const machine_t *model) pci_register_slot(0x10, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&i430tx_device); device_add(&piix4_device); - device_add(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&w83877f_device); device_add(&sst_flash_29ee010_device); spd_register(SPD_TYPE_SDRAM, 0x3, 128); @@ -1170,7 +1170,7 @@ 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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83977tf_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x3, 128); @@ -1202,7 +1202,7 @@ machine_at_richmond_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(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&it8671f_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x3, 128); @@ -1235,7 +1235,7 @@ machine_at_tomahawk_init(const machine_t *model) pci_register_slot(0x08, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&i430tx_device); device_add(&piix4_device); - device_add(&keyboard_ps2_intel_ami_pci_device); + device_add(&kbc_ps2_intel_ami_pci_device); device_add(&fdc37c67x_device); device_add(&amd_flash_29f020a_device); spd_register(SPD_TYPE_SDRAM, 0x3, 128); @@ -1276,7 +1276,7 @@ machine_at_ficva502_init(const machine_t *model) pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); device_add(&via_vpx_device); device_add(&via_vt82c586b_device); - device_add(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&fdc37c669_370_device); device_add(&sst_flash_29ee010_device); spd_register(SPD_TYPE_SDRAM, 0x3, 256); @@ -1308,7 +1308,7 @@ machine_at_ficpa2012_init(const machine_t *model) device_add(&via_vp3_device); device_add(&via_vt82c586b_device); - device_add(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&w83877f_device); device_add(&sst_flash_29ee010_device); spd_register(SPD_TYPE_SDRAM, 0x7, 512); @@ -1340,7 +1340,7 @@ machine_at_via809ds_init(const machine_t *model) device_add(&via_vp3_device); device_add(&via_vt82c586b_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&fdc37c669_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x7, 512); @@ -1370,7 +1370,7 @@ machine_at_r534f_init(const machine_t *model) pci_register_slot(0x11, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&sis_5571_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83877f_device); device_add(&sst_flash_29ee010_device); @@ -1399,7 +1399,7 @@ machine_at_ms5146_init(const machine_t *model) pci_register_slot(0x10, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&sis_5571_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83877f_device); device_add(&sst_flash_29ee010_device); @@ -1428,7 +1428,7 @@ machine_at_cb52xsi_init(const machine_t *model) pci_register_slot(0x07, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&sis_5571_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&fdc37c669_370_device); device_add(&sst_flash_29ee010_device); @@ -1457,7 +1457,7 @@ machine_at_sp97xv_init(const machine_t *model) pci_register_slot(0x09, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x13, PCI_CARD_VIDEO, 1, 2, 3, 4); /* On-chip SiS graphics, absent here. */ device_add(&sis_5581_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83877f_device); device_add(&sst_flash_29ee010_device); @@ -1484,7 +1484,7 @@ machine_at_sq578_init(const machine_t *model) pci_register_slot(0x0B, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x09, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&sis_5581_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83877tf_device); device_add(&sst_flash_29ee010_device); @@ -1512,7 +1512,7 @@ machine_at_ms5172_init(const machine_t *model) pci_register_slot(0x0A, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&sis_5591_1997_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83877tf_device); device_add(&sst_flash_29ee010_device); @@ -1550,6 +1550,35 @@ machine_at_m560_init(const machine_t *model) return ret; } +int +machine_at_m5ata_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/m5ata/ATA1223.BIN", + 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, 1, 2, 3, 4); + pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); + pci_register_slot(0x0B, PCI_CARD_SOUTHBRIDGE_IDE, 1, 2, 3, 4); + pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x04, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x06, PCI_CARD_NORMAL, 4, 1, 2, 3); + + device_add(&ali1531_device); + device_add(&ali1543_device); /* -5 */ + spd_register(SPD_TYPE_SDRAM, 0x3, 64); + + return ret; +} + int machine_at_ms5164_init(const machine_t *model) { diff --git a/src/machine/m_at_socket7_3v.c b/src/machine/m_at_socket7_3v.c index 0dea19a18..6303484dd 100644 --- a/src/machine/m_at_socket7_3v.c +++ b/src/machine/m_at_socket7_3v.c @@ -106,7 +106,7 @@ machine_at_thor_common_init(const machine_t *model, int has_video) if (has_video && (gfxcard[0] == VID_INTERNAL)) device_add(machine_get_vid_device(machine)); - device_add(&keyboard_ps2_intel_ami_pci_device); + device_add(&kbc_ps2_intel_ami_pci_device); device_add(&i430fx_device); device_add(&piix_device); device_add(&pc87306_device); @@ -125,7 +125,7 @@ machine_at_p54tp4xe_common_init(const machine_t *model) pci_register_slot(0x0A, 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, 0); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&i430fx_device); device_add(&piix_device); device_add(&fdc37c665_device); @@ -184,7 +184,7 @@ machine_at_exp8551_init(const machine_t *model) pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x11, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&i430fx_device); device_add(&piix_device); device_add(&w83787f_device); @@ -359,7 +359,7 @@ machine_at_endeavor_init(const machine_t *model) if (sound_card_current[0] == SOUND_INTERNAL) machine_snd = device_add(machine_get_snd_device(machine)); - device_add(&keyboard_ps2_intel_ami_pci_device); + device_add(&kbc_ps2_intel_ami_pci_device); device_add(&i430fx_device); device_add(&piix_device); device_add(&pc87306_device); @@ -390,7 +390,7 @@ machine_at_ms5119_init(const machine_t *model) device_add(&i430fx_device); device_add(&piix_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83787f_device); device_add(&sst_flash_29ee010_device); @@ -457,7 +457,7 @@ machine_at_pb640_init(const machine_t *model) if (gfxcard[0] == VID_INTERNAL) device_add(machine_get_vid_device(machine)); - device_add(&keyboard_ps2_intel_ami_pci_device); + device_add(&kbc_ps2_intel_ami_pci_device); device_add(&pc87306_device); device_add(&intel_flash_bxt_ami_device); @@ -484,7 +484,7 @@ machine_at_mb500n_init(const machine_t *model) pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x11, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&i430fx_device); device_add(&piix_no_mirq_device); device_add(&fdc37c665_device); @@ -516,7 +516,7 @@ machine_at_fmb_init(const machine_t *model) device_add(&i430fx_device); device_add(&piix_no_mirq_device); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); device_add(&w83787f_device); device_add(&intel_flash_bxt_device); @@ -576,7 +576,7 @@ machine_at_ap53_init(const machine_t *model) pci_register_slot(0x06, PCI_CARD_VIDEO, 1, 2, 3, 4); device_add(&i430hx_device); device_add(&piix3_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&fdc37c669_device); device_add(&intel_flash_bxt_device); @@ -605,7 +605,7 @@ machine_at_8500tuc_init(const machine_t *model) pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); device_add(&i430hx_device); device_add(&piix3_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&um8669f_device); device_add(&intel_flash_bxt_device); @@ -640,7 +640,7 @@ machine_at_d943_init(const machine_t *model) pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 3, 2, 4); device_add(&i430hx_device); device_add(&piix3_device); - device_add(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&fdc37c665_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_EDO, 0x7, 256); @@ -718,7 +718,7 @@ machine_at_p55t2s_init(const machine_t *model) pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430hx_device); device_add(&piix3_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&pc87306_device); device_add(&intel_flash_bxt_device); @@ -747,7 +747,7 @@ machine_at_p5vxb_init(const machine_t *model) pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 4); device_add(&i430vx_device); device_add(&piix3_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83877f_device); device_add(&sst_flash_29ee010_device); @@ -854,7 +854,7 @@ machine_at_ap5s_init(const machine_t *model) pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&sis_5511_device); - device_add(&keyboard_ps2_ami_device); + device_add(&kbc_ps2_ami_device); device_add(&fdc37c665_device); device_add(&sst_flash_29ee010_device); @@ -883,7 +883,7 @@ machine_at_ms5124_init(const machine_t *model) pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); device_add(&sis_5511_device); - device_add(&keyboard_ps2_ami_device); + device_add(&kbc_ps2_ami_device); device_add(&w83787f_88h_device); device_add(&sst_flash_29ee010_device); @@ -912,7 +912,7 @@ machine_at_amis727_init(const machine_t *model) pci_register_slot(0x0D, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&sis_5511_device); - device_add(&keyboard_ps2_intel_ami_pci_device); + device_add(&kbc_ps2_intel_ami_pci_device); device_add(&fdc37c665_device); device_add(&intel_flash_bxt_device); @@ -1016,7 +1016,7 @@ machine_at_5sbm2_init(const machine_t *model) pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 4, 1, 2); - device_add(&keyboard_at_ami_device); + device_add(&kbc_at_ami_device); device_add(&sis_550x_device); device_add(&um8663af_device); device_add(&sst_flash_29ee010_device); @@ -1048,7 +1048,7 @@ machine_at_pc140_6260_init(const machine_t *model) device_add(&gd5436_onboard_pci_device); device_add(&sis_5511_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&fdc37c669_device); device_add(&sst_flash_29ee010_device); diff --git a/src/machine/m_at_socket8.c b/src/machine/m_at_socket8.c index d81b41502..097512abc 100644 --- a/src/machine/m_at_socket8.c +++ b/src/machine/m_at_socket8.c @@ -65,7 +65,7 @@ machine_at_ap61_init(const machine_t *model) device_add(&i450kx_device); device_add(&sio_zb_device); device_add(&ide_cmd646_device); - device_add(&keyboard_ps2_acer_pci_device); + device_add(&kbc_ps2_acer_pci_device); device_add(&fdc37c665_device); device_add(&sst_flash_29ee010_device); // device_add(&intel_flash_bxt_device); @@ -100,7 +100,7 @@ machine_at_p6rp4_init(const machine_t *model) device_add(&sio_zb_device); device_add(&ide_cmd646_device); /* Input port bit 2 must be 1 or CMOS Setup is disabled. */ - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&fdc37c665_device); device_add(&intel_flash_bxt_device); @@ -129,7 +129,7 @@ machine_at_686nx_init(const machine_t *model) pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&i440fx_device); device_add(&piix3_device); - device_add(&keyboard_ps2_ami_pci_device); // Uses the AMIKEY keyboard controller + device_add(&kbc_ps2_ami_pci_device); // Uses the AMIKEY keyboard controller device_add(&um8669f_device); device_add(&intel_flash_bxt_device); @@ -158,7 +158,7 @@ machine_at_mb600n_init(const machine_t *model) pci_register_slot(0x14, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&i440fx_device); device_add(&piix3_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&fdc37c669_device); device_add(&intel_flash_bxt_device); @@ -217,7 +217,7 @@ machine_at_lgibmx61_init(const machine_t *model) pci_register_slot(0x0F, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&i440fx_device); device_add(&piix3_device); - device_add(&keyboard_ps2_ami_device); + device_add(&kbc_ps2_ami_device); device_add(&w83877f_president_device); device_add(&sst_flash_29ee010_device); @@ -392,7 +392,7 @@ machine_at_8600ttc_init(const machine_t *model) pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&i440fx_device); device_add(&piix3_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&fdc37c669_device); device_add(&intel_flash_bxt_device); @@ -442,7 +442,7 @@ machine_at_p65up5_common_init(const machine_t *model, const device_t *northbridg pci_register_slot(0x0D, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(northbridge); device_add(&piix3_ioapic_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83877f_device); 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 b7ffc03b3..6a867f8f0 100644 --- a/src/machine/m_at_sockets7.c +++ b/src/machine/m_at_sockets7.c @@ -231,7 +231,7 @@ machine_at_ax59pro_init(const machine_t *model) device_add(&via_mvp3_device); device_add(&via_vt82c586b_device); - device_add(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&w83877tf_device); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); @@ -262,7 +262,7 @@ machine_at_mvp3_init(const machine_t *model) device_add(&via_mvp3_device); device_add(&via_vt82c586b_device); - device_add(&keyboard_ps2_pci_device); + device_add(&kbc_ps2_pci_device); device_add(&w83877tf_acorp_device); device_add(&sst_flash_39sf010_device); spd_register(SPD_TYPE_SDRAM, 0x3, 256); @@ -294,7 +294,7 @@ machine_at_ficva503a_init(const machine_t *model) device_add(&via_mvp3_device); device_add(&via_vt82c686a_device); /* fans: CPU1, Chassis; temperatures: CPU, System, unused */ - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); hwm_values.temperatures[0] += 2; /* CPU offset */ @@ -332,7 +332,7 @@ machine_at_5emapro_init(const machine_t *model) device_add(&via_mvp3_device); /* Rebranded as EQ82C6638 */ device_add(&via_vt82c686a_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&sst_flash_39sf010_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); device_add(&via_vt82c686_hwm_device); /* fans: CPU1, Chassis; temperatures: CPU, System, unused */ @@ -364,7 +364,7 @@ machine_at_delhi3_init(const machine_t *model) device_add(&via_mvp3_device); device_add(&via_vt82c596a_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83877tf_device); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x3, 256); @@ -397,7 +397,7 @@ machine_at_5sg100_init(const machine_t *model) pci_register_slot(0x0F, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x02, PCI_CARD_AGPBRIDGE, 0, 0, 0, 0); device_add(&sis_5591_1997_device); - device_add(&keyboard_ps2_ami_pci_device); + device_add(&kbc_ps2_ami_pci_device); device_add(&w83877tf_device); device_add(&sst_flash_29ee010_device); diff --git a/src/machine/m_at_t3100e.c b/src/machine/m_at_t3100e.c index 3c83b0cce..92daa610c 100644 --- a/src/machine/m_at_t3100e.c +++ b/src/machine/m_at_t3100e.c @@ -813,7 +813,7 @@ machine_at_t3100e_init(const machine_t *model) machine_at_common_ide_init(model); - device_add(&keyboard_at_toshiba_device); + device_add(&kbc_at_toshiba_device); if (fdc_current[0] == FDC_INTERNAL) { device_add(&fdc_at_device); diff --git a/src/machine/m_elt.c b/src/machine/m_elt.c index 628333aba..2c807782c 100644 --- a/src/machine/m_elt.c +++ b/src/machine/m_elt.c @@ -190,7 +190,7 @@ machine_elt_init(const machine_t *model) /* Keyboard goes after the video, because on XT compatibles it's dealt * with by the same PPI as the config switches and we need them to * indicate the correct display type */ - device_add(&keyboard_xt_device); + device_add(&kbc_xt_device); device_add(&elt_nvr_device); diff --git a/src/machine/m_europc.c b/src/machine/m_europc.c index 7fc990a45..4f3a3b8ff 100644 --- a/src/machine/m_europc.c +++ b/src/machine/m_europc.c @@ -651,7 +651,7 @@ europc_boot(UNUSED(const device_t *info)) jim_read, NULL, NULL, jim_write, NULL, NULL, sys); /* Only after JIM has been initialized. */ - (void) device_add(&keyboard_xt_device); + (void) device_add(&kbc_xt_device); /* Enable and set up the FDC. */ (void) device_add(&fdc_xt_device); diff --git a/src/machine/m_ps1.c b/src/machine/m_ps1.c index c22463de4..6e6d7512f 100644 --- a/src/machine/m_ps1.c +++ b/src/machine/m_ps1.c @@ -394,7 +394,7 @@ ps1_common_init(const machine_t *model) dma16_init(); pic2_init(); - device_add(&keyboard_ps2_ps1_device); + device_add(&kbc_ps2_ps1_device); device_add(&port_6x_device); /* Audio uses ports 200h and 202-207h, so only initialize gameport on 201h. */ diff --git a/src/machine/m_ps2_isa.c b/src/machine/m_ps2_isa.c index 8a2760f15..f4439da84 100644 --- a/src/machine/m_ps2_isa.c +++ b/src/machine/m_ps2_isa.c @@ -197,7 +197,7 @@ ps2_isa_common_init(const machine_t *model) dma16_init(); pic2_init(); - device_add(&keyboard_ps2_device); + device_add(&kbc_ps2_device); device_add(&port_6x_ps2_device); } diff --git a/src/machine/m_ps2_mca.c b/src/machine/m_ps2_mca.c index d3f881b24..fccecb410 100644 --- a/src/machine/m_ps2_mca.c +++ b/src/machine/m_ps2_mca.c @@ -1159,7 +1159,7 @@ ps2_mca_board_model_50_init(void) mem_remap_top(384); mca_init(4); - device_add(&keyboard_ps2_mca_2_device); + device_add(&kbc_ps2_mca_2_device); ps2.planar_read = model_50_read; ps2.planar_write = model_50_write; @@ -1180,7 +1180,7 @@ ps2_mca_board_model_60_init(void) mem_remap_top(384); mca_init(8); - device_add(&keyboard_ps2_mca_2_device); + device_add(&kbc_ps2_mca_2_device); ps2.planar_read = model_50_read; ps2.planar_write = model_50_write; @@ -1240,7 +1240,7 @@ ps2_mca_board_model_55sx_init(int has_sec_nvram, int slots) } mca_init(slots); - device_add(&keyboard_ps2_mca_1_device); + device_add(&kbc_ps2_mca_1_device); if (has_sec_nvram) device_add(&ps2_nvr_55ls_device); @@ -1419,7 +1419,7 @@ ps2_mca_board_model_70_type34_init(int is_type4, int slots) ps2.split_addr = mem_size * 1024; mca_init(slots); - device_add(&keyboard_ps2_mca_1_device); + device_add(&kbc_ps2_mca_1_device); ps2.planar_read = model_70_type3_read; ps2.planar_write = model_70_type3_write; @@ -1512,7 +1512,7 @@ ps2_mca_board_model_80_type2_init(void) ps2.split_addr = mem_size * 1024; mca_init(8); - device_add(&keyboard_ps2_mca_1_device); + device_add(&kbc_ps2_mca_1_device); ps2.planar_read = model_80_read; ps2.planar_write = model_80_write; @@ -1778,7 +1778,7 @@ ps55_mca_board_model_50t_init(void) ps2.split_addr = mem_size * 1024; /* The slot 5 is reserved for the Integrated Fixed Disk II (an internal ESDI hard drive). */ mca_init(5); - device_add(&keyboard_ps2_mca_1_device); + device_add(&kbc_ps2_mca_1_device); ps2.planar_read = ps55_model_50t_read; ps2.planar_write = ps55_model_50tv_write; @@ -1822,7 +1822,7 @@ ps55_mca_board_model_50v_init(void) ps2.split_addr = mem_size * 1024; /* The slot 5 is reserved for the Integrated Fixed Disk II (an internal ESDI hard drive). */ mca_init(5); - device_add(&keyboard_ps2_mca_1_device); + device_add(&kbc_ps2_mca_1_device); ps2.planar_read = ps55_model_50v_read; ps2.planar_write = ps55_model_50tv_write; diff --git a/src/machine/m_tandy.c b/src/machine/m_tandy.c index d69694c44..1c7061d8a 100644 --- a/src/machine/m_tandy.c +++ b/src/machine/m_tandy.c @@ -945,7 +945,7 @@ machine_tandy1k_init(const machine_t *model, int type) MEM_MAPPING_INTERNAL, dev); mem_mapping_set_addr(&ram_low_mapping, 0, dev->base); - device_add(&keyboard_tandy_device); + device_add(&kbc_tandy_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_xt_tandy_device); diff --git a/src/machine/m_v86p.c b/src/machine/m_v86p.c index f152383d1..fbe7296f8 100644 --- a/src/machine/m_v86p.c +++ b/src/machine/m_v86p.c @@ -86,7 +86,7 @@ machine_v86p_init(const machine_t *model) device_add(&ct_82c100_device); device_add(&f82c606_device); - device_add(&keyboard_xt_device); + device_add(&kbc_xt_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_xt_device); diff --git a/src/machine/m_xt.c b/src/machine/m_xt.c index 04cddbbd0..2fee7873a 100644 --- a/src/machine/m_xt.c +++ b/src/machine/m_xt.c @@ -160,7 +160,7 @@ machine_pc_init(const machine_t *model) if (bios_only || !ret) return ret; - device_add(&keyboard_pc_device); + device_add(&kbc_pc_device); machine_xt_common_init(model, 0); @@ -270,7 +270,7 @@ machine_pc82_init(const machine_t *model) if (bios_only || !ret) return ret; - device_add(&keyboard_pc82_device); + device_add(&kbc_pc82_device); machine_xt_common_init(model, 0); @@ -441,7 +441,7 @@ machine_xt_init(const machine_t *model) if (bios_only || !ret) return ret; - device_add(&keyboard_xt_device); + device_add(&kbc_xt_device); machine_xt_common_init(model, 0); @@ -462,7 +462,7 @@ machine_genxt_init(const machine_t *model) if (bios_only || !ret) return ret; - device_add(&keyboard_xt_device); + device_add(&kbc_xt_device); machine_xt_common_init(model, 0); @@ -619,7 +619,7 @@ machine_xt86_init(const machine_t *model) if (bios_only || !ret) return ret; - device_add(&keyboard_xt86_device); + device_add(&kbc_xt86_device); machine_xt_common_init(model, 0); @@ -632,7 +632,7 @@ machine_xt86_init(const machine_t *model) static void machine_xt_clone_init(const machine_t *model, int fixed_floppy) { - device_add(&keyboard_xtclone_device); + device_add(&kbc_xtclone_device); machine_xt_common_init(model, fixed_floppy); } @@ -680,7 +680,7 @@ machine_xt_tuliptc8_init(const machine_t *model) if (bios_only || !ret) return ret; - device_add(&keyboard_xt_fe2010_device); + device_add(&kbc_xt_fe2010_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); @@ -863,7 +863,7 @@ machine_xt_pxxt_init(const machine_t *model) if (bios_only || !ret) return ret; - device_add(&keyboard_xt_device); + device_add(&kbc_xt_device); machine_xt_common_init(model, 0); @@ -943,7 +943,7 @@ machine_xt_pravetz16_imko4_init(const machine_t *model) if (bios_only || !ret) return ret; - device_add(&keyboard_pravetz_device); + device_add(&kbc_pravetz_device); machine_xt_common_init(model, 0); @@ -961,7 +961,7 @@ machine_xt_pravetz16s_cpu12p_init(const machine_t *model) if (bios_only || !ret) return ret; - device_add(&keyboard_xt_device); + device_add(&kbc_xt_device); machine_xt_common_init(model, 0); @@ -979,7 +979,7 @@ machine_xt_micoms_xl7turbo_init(const machine_t *model) if (bios_only || !ret) return ret; - device_add(&keyboard_xt_device); + device_add(&kbc_xt_device); machine_xt_common_init(model, 0); @@ -1013,7 +1013,7 @@ machine_xt_mpc1600_init(const machine_t *model) if (bios_only || !ret) return ret; - device_add(&keyboard_pc82_device); + device_add(&kbc_pc82_device); machine_xt_common_init(model, 0); @@ -1036,7 +1036,7 @@ machine_xt_pcspirit_init(const machine_t *model) if (bios_only || !ret) return ret; - device_add(&keyboard_pc82_device); + device_add(&kbc_pc82_device); machine_xt_common_init(model, 0); @@ -1054,7 +1054,7 @@ machine_xt_pc700_init(const machine_t *model) if (bios_only || !ret) return ret; - device_add(&keyboard_pc_device); + device_add(&kbc_pc_device); machine_xt_common_init(model, 0); @@ -1072,7 +1072,7 @@ machine_xt_pc500_init(const machine_t *model) if (bios_only || !ret) return ret; - device_add(&keyboard_pc_device); + device_add(&kbc_pc_device); machine_xt_common_init(model, 0); @@ -1146,7 +1146,7 @@ machine_xt_vendex_init(const machine_t *model) static void machine_xt_hyundai_common_init(const machine_t *model, int fixed_floppy) { - device_add(&keyboard_xt_hyundai_device); + device_add(&kbc_xt_hyundai_device); machine_xt_common_init(model, fixed_floppy); } @@ -1294,7 +1294,7 @@ machine_xt_glabios_init(const machine_t *model) if (bios_only || !ret) return ret; - device_add(&keyboard_xt_device); + device_add(&kbc_xt_device); machine_xt_common_init(model, 0); diff --git a/src/machine/m_xt_compaq.c b/src/machine/m_xt_compaq.c index eaae251d1..d17f43ba4 100644 --- a/src/machine/m_xt_compaq.c +++ b/src/machine/m_xt_compaq.c @@ -52,7 +52,7 @@ machine_xt_compaq_deskpro_init(const machine_t *model) pit_devs[0].set_out_func(pit_devs[0].data, 1, pit_refresh_timer_xt); - device_add(&keyboard_xt_compaq_device); + device_add(&kbc_xt_compaq_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_xt_device); nmi_init(); @@ -79,7 +79,7 @@ machine_xt_compaq_portable_init(const machine_t *model) pit_devs[0].set_out_func(pit_devs[0].data, 1, pit_refresh_timer_xt); - device_add(&keyboard_xt_compaq_device); + device_add(&kbc_xt_compaq_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_xt_device); nmi_init(); diff --git a/src/machine/m_xt_laserxt.c b/src/machine/m_xt_laserxt.c index 9a7dfc255..fcfcebaa2 100644 --- a/src/machine/m_xt_laserxt.c +++ b/src/machine/m_xt_laserxt.c @@ -468,7 +468,7 @@ machine_xt_laserxt_common_init(const machine_t *model,int is_lxt3) device_add(is_lxt3 ? &lxt3_device : &laserxt_device); - device_add(&keyboard_xt_lxt3_device); + device_add(&kbc_xt_lxt3_device); } int diff --git a/src/machine/m_xt_olivetti.c b/src/machine/m_xt_olivetti.c index b18aeedff..41a474c28 100644 --- a/src/machine/m_xt_olivetti.c +++ b/src/machine/m_xt_olivetti.c @@ -2451,7 +2451,7 @@ machine_xt_m19_init(const machine_t *model) m19_vid_init(vid); device_add_ex(&m19_vid_device, vid); - device_add(&keyboard_xt_olivetti_device); + device_add(&kbc_xt_olivetti_device); pit_set_clock((uint32_t) 14318184.0); diff --git a/src/machine/m_xt_philips.c b/src/machine/m_xt_philips.c index 92a33391d..273c856a5 100644 --- a/src/machine/m_xt_philips.c +++ b/src/machine/m_xt_philips.c @@ -160,7 +160,7 @@ machine_xt_philips_common_init(const machine_t *model) standalone_gameport_type = &gameport_200_device; - device_add(&keyboard_pc_device); + device_add(&kbc_pc_device); device_add(&philips_device); diff --git a/src/machine/m_xt_t1000.c b/src/machine/m_xt_t1000.c index 5a787292f..080a03d19 100644 --- a/src/machine/m_xt_t1000.c +++ b/src/machine/m_xt_t1000.c @@ -899,7 +899,7 @@ machine_xt_t1000_init(const machine_t *model) machine_common_init(model); pit_devs[0].set_out_func(pit_devs[0].data, 1, pit_refresh_timer_xt); - device_add(&keyboard_xt_t1x00_device); + device_add(&kbc_xt_t1x00_device); t1000.fdc = device_add(&fdc_xt_device); nmi_init(); @@ -957,7 +957,7 @@ machine_xt_t1200_init(const machine_t *model) NULL, MEM_MAPPING_EXTERNAL, &t1000); pit_devs[0].set_out_func(pit_devs[0].data, 1, pit_refresh_timer_xt); - device_add(&keyboard_xt_t1x00_device); + device_add(&kbc_xt_t1x00_device); t1000.fdc = device_add(&fdc_xt_t1x00_device); nmi_init(); diff --git a/src/machine/m_xt_xi8088.c b/src/machine/m_xt_xi8088.c index 2e155a833..0e70893fb 100644 --- a/src/machine/m_xt_xi8088.c +++ b/src/machine/m_xt_xi8088.c @@ -110,11 +110,11 @@ static const device_config_t xi8088_config[] = { .type = CONFIG_SELECTION, .selection = { { - .description = "64 kB starting from F0000", + .description = "64 KB starting from F0000", .value = 0 }, { - .description = "128 kB starting from E0000 (address MSB inverted, last 64KB first)", + .description = "128 KB starting from E0000 (address MSB inverted, last 64 KB first)", .value = 1 } }, @@ -204,7 +204,7 @@ machine_xt_xi8088_init(const machine_t *model) if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); - device_add(&keyboard_ps2_xi8088_device); + device_add(&kbc_ps2_xi8088_device); device_add(&port_6x_xi8088_device); nmi_init(); device_add(&ibmat_nvr_device); diff --git a/src/machine/m_xt_zenith.c b/src/machine/m_xt_zenith.c index 2159c18e5..78fbb8eed 100644 --- a/src/machine/m_xt_zenith.c +++ b/src/machine/m_xt_zenith.c @@ -117,7 +117,7 @@ machine_zenith_init(const machine_t *model) pit_devs[0].set_out_func(pit_devs[0].data, 1, pit_refresh_timer_xt); - device_add(&keyboard_xt_zenith_device); + device_add(&kbc_xt_zenith_device); nmi_init(); } diff --git a/src/machine_status.c b/src/machine_status.c index 3eb2762bc..c1396975d 100644 --- a/src/machine_status.c +++ b/src/machine_status.c @@ -16,7 +16,7 @@ #include <86box/cartridge.h> #include <86box/cassette.h> #include <86box/cdrom.h> -#include <86box/zip.h> +#include <86box/rdisk.h> #include <86box/mo.h> #include <86box/hdd.h> #include <86box/thread.h> @@ -36,9 +36,9 @@ machine_status_init(void) machine_status.cdrom[i].empty = (strlen(cdrom[i].image_path) == 0); machine_status.cdrom[i].active = false; } - for (size_t i = 0; i < ZIP_NUM; i++) { - machine_status.zip[i].empty = (strlen(zip_drives[i].image_path) == 0); - machine_status.zip[i].active = false; + for (size_t i = 0; i < RDISK_NUM; i++) { + machine_status.rdisk[i].empty = (strlen(rdisk_drives[i].image_path) == 0); + machine_status.rdisk[i].active = false; } for (size_t i = 0; i < MO_NUM; i++) { machine_status.mo[i].empty = (strlen(mo_drives[i].image_path) == 0); diff --git a/src/network/net_3c503.c b/src/network/net_3c503.c index 0eba8a382..ea64633bc 100644 --- a/src/network/net_3c503.c +++ b/src/network/net_3c503.c @@ -721,7 +721,7 @@ static const device_config_t threec503_config[] = { }, { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0xCC000, diff --git a/src/network/net_ne2000.c b/src/network/net_ne2000.c index 4b9ef4a19..0174ef098 100644 --- a/src/network/net_ne2000.c +++ b/src/network/net_ne2000.c @@ -1412,7 +1412,7 @@ static const device_config_t ne2000_config[] = { }, { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0, @@ -1510,7 +1510,7 @@ static const device_config_t ne2000_compat_config[] = { }, { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0, @@ -1602,7 +1602,7 @@ static const device_config_t ne2000_compat_8bit_config[] = { }, { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0, diff --git a/src/pic.c b/src/pic.c index 4b8993322..446ea1361 100644 --- a/src/pic.c +++ b/src/pic.c @@ -693,6 +693,13 @@ picint_common(uint16_t num, int level, int set, uint8_t *irq_state) uint16_t lines = level ? 0x0000 : num; pic_t *dev; + /* + Do this because some emulated cards will, for whatever reason, attempt to + raise an IRQ at init when the PIC has not yet been properly initialized. + */ + if (update_pending == NULL) + return; + /* Make sure to ignore all slave IRQ's, and in case of AT+, translate IRQ 2 to IRQ 9. */ for (uint8_t i = 0; i < 8; i++) { diff --git a/src/printer/prt_escp.c b/src/printer/prt_escp.c index 1855df380..96afcd4a5 100644 --- a/src/printer/prt_escp.c +++ b/src/printer/prt_escp.c @@ -2097,7 +2097,7 @@ escp_close(void *priv) } const lpt_device_t lpt_prt_escp_device = { - .name = "Generic ESC/P Dot-Matrix", + .name = "Generic ESC/P Dot-Matrix Printer", .internal_name = "dot_matrix", .init = escp_init, .close = escp_close, diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index c71273af8..0479ff3f8 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -88,6 +88,8 @@ add_library(ui STATIC qt_openglrenderer.cpp qt_openglrenderer.hpp qt_glsl_parser.cpp + qt_about.cpp + qt_about.hpp qt_settings.cpp qt_settings.hpp @@ -187,14 +189,6 @@ add_library(ui STATIC qt_mediahistorymanager.cpp qt_mediahistorymanager.hpp - qt_updatecheck.cpp - qt_updatecheck.hpp - qt_updatecheckdialog.cpp - qt_updatecheckdialog.hpp - qt_updatecheckdialog.ui - qt_updatedetails.cpp - qt_updatedetails.hpp - qt_updatedetails.ui qt_downloader.cpp qt_downloader.hpp @@ -245,6 +239,19 @@ add_library(ui STATIC qt_iconindicators.cpp ) +if(EMU_BUILD_NUM) + target_sources(ui PRIVATE + qt_updatecheck.cpp + qt_updatecheck.hpp + qt_updatecheckdialog.cpp + qt_updatecheckdialog.hpp + qt_updatecheckdialog.ui + qt_updatedetails.cpp + qt_updatedetails.hpp + qt_updatedetails.ui + ) +endif() + if(RTMIDI) target_compile_definitions(ui PRIVATE USE_RTMIDI) endif() @@ -284,6 +291,15 @@ if(WIN32 AND NOT SDL_JOYSTICK) target_sources(plat PRIVATE win_joystick_rawinput.c) target_link_libraries(86Box hid) else() + find_package(SDL2 REQUIRED) + include_directories(${SDL2_INCLUDE_DIRS}) + if(STATIC_BUILD AND TARGET SDL2::SDL2-static) + target_link_libraries(86Box SDL2::SDL2-static) + elseif(TARGET SDL2::SDL2) + target_link_libraries(86Box SDL2::SDL2) + else() + target_link_libraries(86Box ${SDL2_LIBRARIES}) + endif() target_sources(plat PRIVATE sdl_joystick.c) endif() diff --git a/src/qt/icons/zip.ico b/src/qt/icons/rdisk.ico similarity index 100% rename from src/qt/icons/zip.ico rename to src/qt/icons/rdisk.ico diff --git a/src/qt/icons/zip_disabled.ico b/src/qt/icons/rdisk_disabled.ico similarity index 100% rename from src/qt/icons/zip_disabled.ico rename to src/qt/icons/rdisk_disabled.ico diff --git a/src/qt/icons/zip_image.ico b/src/qt/icons/rdisk_image.ico similarity index 100% rename from src/qt/icons/zip_image.ico rename to src/qt/icons/rdisk_image.ico diff --git a/src/qt/languages/86box.pot b/src/qt/languages/86box.pot index ac379b171..0089a3700 100644 --- a/src/qt/languages/86box.pot +++ b/src/qt/languages/86box.pot @@ -27,7 +27,10 @@ msgstr "" msgid "&Pause" msgstr "" -msgid "E&xit..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" msgstr "" msgid "&View" @@ -60,7 +63,7 @@ msgstr "" msgid "&VNC" msgstr "" -msgid "Specify dimensions..." +msgid "Specify &dimensions..." msgstr "" msgid "F&orce 4:3 display ratio" @@ -99,7 +102,7 @@ msgstr "" msgid "&8x" msgstr "" -msgid "Filter method" +msgid "Fi<er method" msgstr "" msgid "&Nearest" @@ -144,9 +147,15 @@ msgstr "" msgid "RGB &Color" msgstr "" +msgid "RGB (no brown)" +msgstr "" + msgid "&RGB Grayscale" msgstr "" +msgid "Generic RGBI color monitor" +msgstr "" + msgid "&Amber monitor" msgstr "" @@ -384,6 +393,15 @@ msgstr "" msgid "Dynamic Recompiler" msgstr "" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "" @@ -399,6 +417,9 @@ msgstr "" msgid "XGA Graphics" msgstr "" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "" @@ -498,10 +519,10 @@ msgstr "" msgid "Parallel port 4" msgstr "" -msgid "HD Controller:" +msgid "FD Controller:" msgstr "" -msgid "FD Controller:" +msgid "CD-ROM Controller:" msgstr "" msgid "Tertiary IDE Controller" @@ -510,6 +531,9 @@ msgstr "" msgid "Quaternary IDE Controller" msgstr "" +msgid "Hard disk" +msgstr "" + msgid "SCSI" msgstr "" @@ -531,6 +555,9 @@ msgstr "" msgid "Hard disks:" msgstr "" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "" @@ -588,7 +615,7 @@ msgstr "" msgid "MO drives:" msgstr "" -msgid "ZIP drives:" +msgid "Removable disk drives:" msgstr "" msgid "ZIP 250" @@ -600,6 +627,9 @@ msgstr "" msgid "ISA Memory Expansion" msgstr "" +msgid "ISA ROM Cards" +msgstr "" + msgid "Card 1:" msgstr "" @@ -612,6 +642,15 @@ msgstr "" msgid "Card 4:" msgstr "" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "" @@ -633,10 +672,16 @@ msgstr "" msgid "Speed" msgstr "" -msgid "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" msgstr "" -msgid "ZIP images" +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" msgstr "" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." @@ -777,12 +822,39 @@ msgstr "" msgid "CH Flightstick Pro" msgstr "" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "" msgid "Thrustmaster Flight Control System" msgstr "" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "" @@ -792,6 +864,9 @@ msgstr "" msgid "Floppy %1 (%2): %3" msgstr "" +msgid "&Floppy %1 (%2): %3" +msgstr "" + msgid "Advanced sector images" msgstr "" @@ -813,6 +888,9 @@ msgstr "" msgid "MO %1 (%2): %3" msgstr "" +msgid "&MO %1 (%2): %3" +msgstr "" + msgid "MO images" msgstr "" @@ -897,12 +975,18 @@ msgstr "" msgid "Cassette: %1" msgstr "" +msgid "C&assette: %1" +msgstr "" + msgid "Cassette images" msgstr "" msgid "Cartridge %1: %2" msgstr "" +msgid "Car&tridge %1: %2" +msgstr "" + msgid "Cartridge images" msgstr "" @@ -924,6 +1008,9 @@ msgstr "" msgid "ACPI shutdown" msgstr "" +msgid "ACP&I shutdown" +msgstr "" + msgid "Hard disk (%1)" msgstr "" @@ -1071,6 +1158,9 @@ msgstr "" msgid "CD-ROM %1 (%2): %3" msgstr "" +msgid "&CD-ROM %1 (%2): %3" +msgstr "" + msgid "160 KB" msgstr "" @@ -1209,40 +1299,40 @@ msgstr "" msgid "List of MCA devices:" msgstr "" -msgid "Tablet tool" +msgid "&Tablet tool" msgstr "" msgid "Qt (OpenGL &ES)" msgstr "" -msgid "About Qt" +msgid "About &Qt" msgstr "" -msgid "MCA devices..." +msgid "&MCA devices..." msgstr "" -msgid "Show non-primary monitors" +msgid "Show non-&primary monitors" msgstr "" -msgid "Open screenshots folder..." +msgid "Open screenshots &folder..." msgstr "" -msgid "Apply fullscreen stretch mode when maximized" +msgid "Appl&y fullscreen stretch mode when maximized" msgstr "" -msgid "Cursor/Puck" +msgid "&Cursor/Puck" msgstr "" -msgid "Pen" +msgid "&Pen" msgstr "" -msgid "Host CD/DVD Drive (%1:)" +msgid "&Host CD/DVD Drive (%1:)" msgstr "" msgid "&Connected" msgstr "" -msgid "Clear image history" +msgid "Clear image &history" msgstr "" msgid "Create..." @@ -1260,6 +1350,9 @@ msgstr "" msgid "NIC %1 (%2) %3" msgstr "" +msgid "&NIC %1 (%2) %3" +msgstr "" + msgid "Render behavior" msgstr "" @@ -1365,7 +1458,25 @@ msgstr "" msgid "Serial port passthrough 4" msgstr "" -msgid "Renderer options..." +msgid "Renderer &options..." +msgstr "" + +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" msgstr "" msgid "Logitech/Microsoft Bus Mouse" @@ -1377,18 +1488,30 @@ msgstr "" msgid "Mouse Systems Serial Mouse" msgstr "" +msgid "Mouse Systems Bus Mouse" +msgstr "" + msgid "Microsoft Serial Mouse" msgstr "" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "" msgid "PS/2 Mouse" msgstr "" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "" @@ -1413,12 +1536,54 @@ msgstr "" msgid "MIDI Input Device" msgstr "" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" +msgstr "" + +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" msgstr "" msgid "Enable BIOS extension ROM Writes" msgstr "" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "" @@ -1428,6 +1593,18 @@ msgstr "" msgid "BIOS Revision" msgstr "" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "" @@ -1443,6 +1620,18 @@ msgstr "" msgid "BIOS size" msgstr "" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "" @@ -1518,6 +1707,9 @@ msgstr "" msgid "Interpolation Method" msgstr "" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" msgstr "" @@ -1605,6 +1797,12 @@ msgstr "" msgid "Enable Game port" msgstr "" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "" @@ -1617,6 +1815,9 @@ msgstr "" msgid "SB Address" msgstr "" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "" @@ -1701,9 +1902,15 @@ msgstr "" msgid "Blend" msgstr "" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "" @@ -1746,6 +1953,33 @@ msgstr "" msgid "EMS mode" msgstr "" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "" @@ -1764,10 +1998,10 @@ msgstr "" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "" -msgid "64 kB starting from F0000" +msgid "64 KB starting from F0000" msgstr "" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" msgstr "" msgid "Sine" @@ -1902,6 +2136,15 @@ msgstr "" msgid "Linear interpolation" msgstr "" +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" + msgid "128 KB" msgstr "" @@ -1935,6 +2178,9 @@ msgstr "" msgid "Gray" msgstr "" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "" @@ -1950,6 +2196,12 @@ msgstr "" msgid "Bochs latest" msgstr "" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "" @@ -2031,6 +2283,9 @@ msgstr "" msgid "Named Pipe (Server)" msgstr "" +msgid "Named Pipe (Client)" +msgstr "" + msgid "Host Serial Passthrough" msgstr "" @@ -2153,3 +2408,60 @@ msgstr "" msgid "Could not load file %1" msgstr "" + +msgid "Key Bindings:" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" diff --git a/src/qt/languages/ca-ES.po b/src/qt/languages/ca-ES.po index c9fc9bd82..bdf2e919f 100644 --- a/src/qt/languages/ca-ES.po +++ b/src/qt/languages/ca-ES.po @@ -27,8 +27,11 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Pausa" -msgid "E&xit..." -msgstr "&Sortir ..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" +msgstr "&Sortir" msgid "&View" msgstr "&Vista" @@ -60,7 +63,7 @@ msgstr "Open&GL (3.0 Core)" msgid "&VNC" msgstr "&VNC" -msgid "Specify dimensions..." +msgid "Specify &dimensions..." msgstr "E&specificar dimensions ..." msgid "F&orce 4:3 display ratio" @@ -99,7 +102,7 @@ msgstr "&7x" msgid "&8x" msgstr "&8x" -msgid "Filter method" +msgid "Fi<er method" msgstr "&Mètode de filtrat" msgid "&Nearest" @@ -144,9 +147,15 @@ msgstr "&Tipus de pantalla VGA" msgid "RGB &Color" msgstr "RGB &Color" +msgid "RGB (no brown)" +msgstr "" + msgid "&RGB Grayscale" msgstr "RGB &Grisos" +msgid "Generic RGBI color monitor" +msgstr "" + msgid "&Amber monitor" msgstr "Monitor & Ambre" @@ -384,6 +393,15 @@ msgstr "Activat (UTC)" msgid "Dynamic Recompiler" msgstr "Recopilador Dinàmic" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "Vídeo:" @@ -399,6 +417,9 @@ msgstr "Gràfics IBM 8514/A" msgid "XGA Graphics" msgstr "Gràfics XGA" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "Ratolí:" @@ -498,18 +519,21 @@ msgstr "Port paral·lel 3" msgid "Parallel port 4" msgstr "Port paral·lel 4" -msgid "HD Controller:" -msgstr "Controlador de HD:" - msgid "FD Controller:" msgstr "Controlador de FD:" +msgid "CD-ROM Controller:" +msgstr "" + msgid "Tertiary IDE Controller" msgstr "Controlador IDE terciari" msgid "Quaternary IDE Controller" msgstr "Controlador IDE quaternari" +msgid "Hard disk" +msgstr "" + msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "Casset" msgid "Hard disks:" msgstr "Discs durs:" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "&Nou ..." @@ -588,8 +615,8 @@ msgstr "Unitats de CD-ROM:" msgid "MO drives:" msgstr "Unitats MO:" -msgid "ZIP drives:" -msgstr "Unitats ZIP:" +msgid "Removable disk drives:" +msgstr "" msgid "ZIP 250" msgstr "ZIP 250" @@ -600,6 +627,9 @@ msgstr "ISA RTC:" msgid "ISA Memory Expansion" msgstr "Expansió de memòria ISA" +msgid "ISA ROM Cards" +msgstr "" + msgid "Card 1:" msgstr "Targeta 1:" @@ -612,6 +642,15 @@ msgstr "Targeta 3:" msgid "Card 4:" msgstr "Targeta 4:" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "Dispositiu ISABugger" @@ -633,11 +672,17 @@ msgstr " - EN PAUSA" msgid "Speed" msgstr "Velocitat" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "" -msgid "ZIP images" -msgstr "Imatges ZIP" +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" +msgstr "" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box no ha pogut trobar cap imatge ROM utilitzable.\n\nSi us plau, descarregueu un conjunt de ROM i extreu-lo al directori \"roms\"." @@ -777,12 +822,39 @@ msgstr "Joystick de 4 eixes, 4 botons" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" msgid "Thrustmaster Flight Control System" msgstr "Thrustmaster Flight Control System" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "Cap" @@ -792,6 +864,9 @@ msgstr "%1 MB (CHS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "Disquet %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "&Disquet %1 (%2): %3" + msgid "Advanced sector images" msgstr "Imatges avançates del sector" @@ -813,6 +888,9 @@ msgstr "No es pot inicialitzar GhostPCL" msgid "MO %1 (%2): %3" msgstr "MO %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "&MO %1 (%2): %3" + msgid "MO images" msgstr "Imatges MO" @@ -897,12 +975,18 @@ msgstr "Continuar" msgid "Cassette: %1" msgstr "Casset: %1" +msgid "C&assette: %1" +msgstr "C&asset: %1" + msgid "Cassette images" msgstr "Imatges de casset" msgid "Cartridge %1: %2" msgstr "Cartutx %1: %2" +msgid "Car&tridge %1: %2" +msgstr "Car&tutx %1: %2" + msgid "Cartridge images" msgstr "Imatges de cartutx" @@ -924,6 +1008,9 @@ msgstr "Reinicialització completa" msgid "ACPI shutdown" msgstr "Apagada ACPI" +msgid "ACP&I shutdown" +msgstr "Apagada ACP&I" + msgid "Hard disk (%1)" msgstr "Disc dur (%1)" @@ -1071,6 +1158,9 @@ msgstr "ATAPI" msgid "CD-ROM %1 (%2): %3" msgstr "CD-ROM %1 (%2): %3" +msgid "&CD-ROM %1 (%2): %3" +msgstr "&CD-ROM %1 (%2): %3" + msgid "160 KB" msgstr "160 KB" @@ -1209,41 +1299,41 @@ msgstr "Dispositius MCA" msgid "List of MCA devices:" msgstr "Lista de dispositius MCA:" -msgid "Tablet tool" +msgid "&Tablet tool" msgstr "Eina de tauleta" msgid "Qt (OpenGL &ES)" msgstr "Qt (OpenGL &ES)" -msgid "About Qt" -msgstr "Quant a Qt" +msgid "About &Qt" +msgstr "Quant a &Qt" -msgid "MCA devices..." +msgid "&MCA devices..." msgstr "Dispositius MCA ..." -msgid "Show non-primary monitors" +msgid "Show non-&primary monitors" msgstr "Mostrar monitors no primaris" -msgid "Open screenshots folder..." +msgid "Open screenshots &folder..." msgstr "Obrir la carpeta de captures de pantalla ..." -msgid "Apply fullscreen stretch mode when maximized" +msgid "Appl&y fullscreen stretch mode when maximized" msgstr "Apliqueu el mode d’estirament de pantalla completa en màxima" -msgid "Cursor/Puck" -msgstr "Cursor/Puck" +msgid "&Cursor/Puck" +msgstr "&Cursor/Puck" -msgid "Pen" -msgstr "Ploma" +msgid "&Pen" +msgstr "&Ploma" -msgid "Host CD/DVD Drive (%1:)" -msgstr "Unitat CD/DVD d'amfitrió (%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "&Unitat CD/DVD d'amfitrió (%1:)" msgid "&Connected" msgstr "&Connectat" -msgid "Clear image history" -msgstr "Esborrar la història de imatges" +msgid "Clear image &history" +msgstr "Esborrar la &història de imatges" msgid "Create..." msgstr "Crear ..." @@ -1260,6 +1350,9 @@ msgstr "Controlador nul" msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" +msgid "&NIC %1 (%2) %3" +msgstr "&NIC %1 (%2) %3" + msgid "Render behavior" msgstr "Comportament del renderitzador" @@ -1365,9 +1458,27 @@ msgstr "Pas del port sèrie 3" msgid "Serial port passthrough 4" msgstr "Pas del port sèrie 4" -msgid "Renderer options..." +msgid "Renderer &options..." msgstr "Opcions del renderitzador ..." +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" +msgstr "" + msgid "Logitech/Microsoft Bus Mouse" msgstr "Ratolí bus Logitech/Microsoft" @@ -1377,18 +1488,30 @@ msgstr "Ratolí bus Microsoft (InPort)" msgid "Mouse Systems Serial Mouse" msgstr "Ratolí sèrie Mouse Systems" +msgid "Mouse Systems Bus Mouse" +msgstr "" + msgid "Microsoft Serial Mouse" msgstr "Ratolí sèrie Microsoft" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "Ratolí sèrie Logitech" msgid "PS/2 Mouse" msgstr "Ratolí PS/2" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (sèrie)" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] Mòdem estàndard, complint els Hayes" @@ -1413,12 +1536,54 @@ msgstr "MIDI de sistema" msgid "MIDI Input Device" msgstr "Dispositiu d'entrada MIDI" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" msgstr "Adreça de BIOS" +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" +msgstr "" + msgid "Enable BIOS extension ROM Writes" msgstr "Activar les escrits a la ROM extensor de BIOS" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "Adreça" @@ -1428,6 +1593,18 @@ msgstr "IRQ" msgid "BIOS Revision" msgstr "Revisió de la BIOS" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "Traduir 26 -> 17" @@ -1443,6 +1620,18 @@ msgstr "Colors invertits" msgid "BIOS size" msgstr "Grandària de la BIOS" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "Mapa C0000-C7FFF com UMB" @@ -1518,6 +1707,9 @@ msgstr "Nivell de reverberació" msgid "Interpolation Method" msgstr "Mètode d'interpolació" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" msgstr "Guany de sortida de reverberació" @@ -1605,6 +1797,12 @@ msgstr "DMA baix" msgid "Enable Game port" msgstr "Activar port de joc" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "Mòdul Surround" @@ -1617,6 +1815,9 @@ msgstr "Activar la interrupció del codec en la configuració del CODEC (necessa msgid "SB Address" msgstr "Adreça de SB" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "IRQ de WSS" @@ -1701,9 +1902,15 @@ msgstr "Tipus de RAMDAC" msgid "Blend" msgstr "Barrejar" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "Filtratge bilineal" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "Dithering" @@ -1746,6 +1953,33 @@ msgstr "Velocitat de transferència" msgid "EMS mode" msgstr "Mode EMS" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "Adreça per a > 2 MB" @@ -1764,11 +1998,11 @@ msgstr "Sempre a la velocitat seleccionada" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "Configuració de la BIOS + Hotkeys (desactivat durant el POST)" -msgid "64 kB starting from F0000" -msgstr "64 kB a partir de F0000" +msgid "64 KB starting from F0000" +msgstr "64 KB a partir de F0000" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "128 kB a partir de E0000 (MSB de adreça invertit, els darrers 64KB primer)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "128 KB a partir de E0000 (MSB de adreça invertit, els darrers 64 KB primer)" msgid "Sine" msgstr "Sinusoidal" @@ -1902,6 +2136,15 @@ msgstr "Interpolació sRGB" msgid "Linear interpolation" msgstr "Interpolació lineal" +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" + msgid "128 KB" msgstr "128 KB" @@ -1935,6 +2178,9 @@ msgstr "Ambre" msgid "Gray" msgstr "Gris" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "Color" @@ -1950,6 +2196,12 @@ msgstr "Altres idiomes" msgid "Bochs latest" msgstr "Bochs més recent" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "Monocrom no interlat" @@ -2031,6 +2283,9 @@ msgstr "Taxa de baud de pas" msgid "Named Pipe (Server)" msgstr "Pipe anomenat (servidor)" +msgid "Named Pipe (Client)" +msgstr "" + msgid "Host Serial Passthrough" msgstr "Pas del port sèrie amfitrió" @@ -2076,6 +2331,12 @@ msgstr "Clon IBM 8514/A (ISA)" msgid "Vendor" msgstr "Frabricant" +msgid "30 Hz (JMP2 = 1)" +msgstr "" + +msgid "60 Hz (JMP2 = 2)" +msgstr "" + msgid "Generic PC/XT Memory Expansion" msgstr "Expansió de memòria genèrica PC/XT" @@ -2147,3 +2408,72 @@ msgstr "" msgid "Could not load file %1" msgstr "" + +msgid "Key Bindings:" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" + +#~ msgid "HD Controller:" +#~ msgstr "Controlador de HD:" + +#~ msgid "ZIP drives:" +#~ msgstr "Unitats ZIP:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "Imatges ZIP" diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index cd726832d..574c4f0d6 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -27,7 +27,10 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "P&ozastavit" -msgid "E&xit..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" msgstr "&Ukončit" msgid "&View" @@ -60,7 +63,7 @@ msgstr "Open&GL (3.0 Core)" msgid "&VNC" msgstr "&VNC" -msgid "Specify dimensions..." +msgid "Specify &dimensions..." msgstr "&Zadat velikost..." msgid "F&orce 4:3 display ratio" @@ -99,7 +102,7 @@ msgstr "&7x" msgid "&8x" msgstr "&8x" -msgid "Filter method" +msgid "Fi<er method" msgstr "Metoda &filtrování" msgid "&Nearest" @@ -144,9 +147,15 @@ msgstr "&Typ VGA monitoru" msgid "RGB &Color" msgstr "RGB &barevný" +msgid "RGB (no brown)" +msgstr "" + msgid "&RGB Grayscale" msgstr "&Odstíny šedi" +msgid "Generic RGBI color monitor" +msgstr "" + msgid "&Amber monitor" msgstr "&Jantarová obrazovka" @@ -384,6 +393,15 @@ msgstr "Zapnuta (UTC)" msgid "Dynamic Recompiler" msgstr "Dynamický překladač" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "Grafika:" @@ -399,6 +417,9 @@ msgstr "Grafika IBM 8514/A" msgid "XGA Graphics" msgstr "Grafika XGA" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "Myš:" @@ -498,18 +519,21 @@ msgstr "Povolit port LPT3" msgid "Parallel port 4" msgstr "Povolit port LPT4" -msgid "HD Controller:" -msgstr "Řadič disku:" - msgid "FD Controller:" msgstr "Disketový řadič:" +msgid "CD-ROM Controller:" +msgstr "" + msgid "Tertiary IDE Controller" msgstr "Třetí řadič IDE" msgid "Quaternary IDE Controller" msgstr "Čtvrtý řadič IDE" +msgid "Hard disk" +msgstr "" + msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "Kazeta" msgid "Hard disks:" msgstr "Pevné disky:" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "&Nový..." @@ -588,8 +615,8 @@ msgstr "Mechaniky CD-ROM:" msgid "MO drives:" msgstr "Magnetooptické mechaniky:" -msgid "ZIP drives:" -msgstr "Mechaniky ZIP:" +msgid "Removable disk drives:" +msgstr "" msgid "ZIP 250" msgstr "ZIP 250" @@ -600,6 +627,9 @@ msgstr "ISA hodiny:" msgid "ISA Memory Expansion" msgstr "ISA rozšíření paměti" +msgid "ISA ROM Cards" +msgstr "" + msgid "Card 1:" msgstr "Karta 1:" @@ -612,6 +642,15 @@ msgstr "Karta 3:" msgid "Card 4:" msgstr "Karta 4:" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "Zařízení ISABugger" @@ -633,11 +672,17 @@ msgstr " - POZASTAVENO" msgid "Speed" msgstr "Rychlost" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "" -msgid "ZIP images" -msgstr "Obrazy ZIP disků" +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" +msgstr "" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box nenalezl žádné použitelné image pamětí ROM.\n\nStáhněte sadu obrazů ROM a extrahujte ji do složky \"roms\"." @@ -777,12 +822,39 @@ msgstr "4osový, 4tlačítkový joystick" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" msgid "Thrustmaster Flight Control System" msgstr "Thrustmaster Flight Control System" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "Žadné" @@ -792,6 +864,9 @@ msgstr "%1 MB (CHS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "Disketová mechanika %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "&Disketová mechanika %1 (%2): %3" + msgid "Advanced sector images" msgstr "Rozšířené sektorové obrazy" @@ -813,6 +888,9 @@ msgstr "Nastala chyba při inicializaci knihovny GhostPCL" msgid "MO %1 (%2): %3" msgstr "MO %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "&MO %1 (%2): %3" + msgid "MO images" msgstr "Obrazy MO" @@ -897,12 +975,18 @@ msgstr "Pokračovat" msgid "Cassette: %1" msgstr "Kazeta: %1" +msgid "C&assette: %1" +msgstr "K&azeta: %1" + msgid "Cassette images" msgstr "Kazetové nahrávky" msgid "Cartridge %1: %2" msgstr "Cartridge %1: %2" +msgid "Car&tridge %1: %2" +msgstr "Car&tridge %1: %2" + msgid "Cartridge images" msgstr "Obrazy cartridge" @@ -924,6 +1008,9 @@ msgstr "Resetovat" msgid "ACPI shutdown" msgstr "Vypnout skrze rozhraní ACPI" +msgid "ACP&I shutdown" +msgstr "Vypnout skrze rozhraní ACP&I" + msgid "Hard disk (%1)" msgstr "Pevný disk (%1)" @@ -1071,6 +1158,9 @@ msgstr "ATAPI" msgid "CD-ROM %1 (%2): %3" msgstr "CD-ROM %1 (%2): %3" +msgid "&CD-ROM %1 (%2): %3" +msgstr "&CD-ROM %1 (%2): %3" + msgid "160 KB" msgstr "160 KB" @@ -1209,41 +1299,41 @@ msgstr "Zařízení MCA" msgid "List of MCA devices:" msgstr "Seznam zařízení MCA:" -msgid "Tablet tool" +msgid "&Tablet tool" msgstr "Nástroj pro tablety" msgid "Qt (OpenGL &ES)" msgstr "Qt (OpenGL &ES)" -msgid "About Qt" -msgstr "O programu Qt" +msgid "About &Qt" +msgstr "O programu &Qt" -msgid "MCA devices..." +msgid "&MCA devices..." msgstr "Zařízení MCA ..." -msgid "Show non-primary monitors" +msgid "Show non-&primary monitors" msgstr "Zobrazit neprimární monitory" -msgid "Open screenshots folder..." +msgid "Open screenshots &folder..." msgstr "Otevři složku screenshots..." -msgid "Apply fullscreen stretch mode when maximized" +msgid "Appl&y fullscreen stretch mode when maximized" msgstr "Použití režimu roztá&hnutí při celé obrazovce při maximalizaci" -msgid "Cursor/Puck" -msgstr "Kurzor/Puk" +msgid "&Cursor/Puck" +msgstr "&Kurzor/Puk" -msgid "Pen" -msgstr "Pero" +msgid "&Pen" +msgstr "&Pero" -msgid "Host CD/DVD Drive (%1:)" -msgstr "Jednotka CD/DVD hostitele (%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "&Jednotka CD/DVD hostitele (%1:)" msgid "&Connected" msgstr "&Připojeno" -msgid "Clear image history" -msgstr "Vymaž historie snímků" +msgid "Clear image &history" +msgstr "Vymaž &historie snímků" msgid "Create..." msgstr "Vytvoř..." @@ -1260,6 +1350,9 @@ msgstr "Nulový ovladač" msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" +msgid "&NIC %1 (%2) %3" +msgstr "&NIC %1 (%2) %3" + msgid "Render behavior" msgstr "Chování vykreslování" @@ -1365,9 +1458,27 @@ msgstr "Průchod sériového portu 3" msgid "Serial port passthrough 4" msgstr "Průchod sériového portu 4" -msgid "Renderer options..." +msgid "Renderer &options..." msgstr "Možnosti vykreslovače..." +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" +msgstr "" + msgid "Logitech/Microsoft Bus Mouse" msgstr "Sběrnicová myš Logitech/Microsoft" @@ -1377,18 +1488,30 @@ msgstr "Sběrnicová myš Microsoft (InPort)" msgid "Mouse Systems Serial Mouse" msgstr "Sériová myš Mouse Systems" +msgid "Mouse Systems Bus Mouse" +msgstr "" + msgid "Microsoft Serial Mouse" msgstr "Sériová myš Microsoft" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "Sériová myš Logitech" msgid "PS/2 Mouse" msgstr "Myš PS/2" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (sériová)" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] Modem kompatibilní se standardem Hayes" @@ -1413,12 +1536,54 @@ msgstr "Systémové MIDI" msgid "MIDI Input Device" msgstr "Vstupní zařízení MIDI" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" msgstr "Adresa BIOSu" +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" +msgstr "" + msgid "Enable BIOS extension ROM Writes" msgstr "Povolení zápisu do rozšiřující paměti ROM systému BIOS" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "Adresa" @@ -1428,6 +1593,18 @@ msgstr "IRQ" msgid "BIOS Revision" msgstr "Revize BIOSu" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "Přeložit 26 -> 17" @@ -1443,6 +1620,18 @@ msgstr "Invertování barev" msgid "BIOS size" msgstr "Velikost BIOSu" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "Mapovat C0000-C7FFF jako UMB" @@ -1518,6 +1707,9 @@ msgstr "Úroveň dozvuku" msgid "Interpolation Method" msgstr "Metoda interpolace" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" msgstr "Zesílení výstupu dozvuku" @@ -1605,6 +1797,12 @@ msgstr "Nízký DMA" msgid "Enable Game port" msgstr "Povolit herní port" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "Modul Surround" @@ -1617,6 +1815,9 @@ msgstr "Vyvolání přerušení CODEC při nastavení CODEC (potřebují někter msgid "SB Address" msgstr "Adresa SB" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "IRQ WSS" @@ -1701,9 +1902,15 @@ msgstr "Typ RAMDACu" msgid "Blend" msgstr "Směs" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "Bilineární filtrování" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "Dithering" @@ -1746,6 +1953,33 @@ msgstr "Rychlost přenosu" msgid "EMS mode" msgstr "Režím EMS" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "Adresa pro > 2 MB" @@ -1764,11 +1998,11 @@ msgstr "Vždy při zvolené rychlosti" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "Nastavení BIOS + klávesové zkratky (vypnuto během POST)" -msgid "64 kB starting from F0000" -msgstr "64 kB od F0000" +msgid "64 KB starting from F0000" +msgstr "64 KB od F0000" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "128 kB od E0000 (invertovaný MSB adresy, nejprve posledních 64 kB)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "128 KB od E0000 (invertovaný MSB adresy, nejprve posledních 64 KB)" msgid "Sine" msgstr "Sinusový" @@ -1902,6 +2136,15 @@ msgstr "Interpolace sRGB" msgid "Linear interpolation" msgstr "Lineární interpolace" +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" + msgid "128 KB" msgstr "128 KB" @@ -1935,6 +2178,9 @@ msgstr "Jantarový" msgid "Gray" msgstr "Šedý" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "Barevný" @@ -1950,6 +2196,12 @@ msgstr "Ostatní jazyky" msgid "Bochs latest" msgstr "Bochs nejnovější" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "Monochromatický bez prokládání" @@ -2031,6 +2283,9 @@ msgstr "Přenosová rychlost průchodu" msgid "Named Pipe (Server)" msgstr "Pojmenované potrubí (server)" +msgid "Named Pipe (Client)" +msgstr "" + msgid "Host Serial Passthrough" msgstr "Průchod sériového portu hostitele" @@ -2076,6 +2331,12 @@ msgstr "Klon IBM 8514/A (ISA)" msgid "Vendor" msgstr "Výrobce" +msgid "30 Hz (JMP2 = 1)" +msgstr "" + +msgid "60 Hz (JMP2 = 2)" +msgstr "" + msgid "Generic PC/XT Memory Expansion" msgstr "Obecné rozšíření paměti PC/XT" @@ -2147,3 +2408,72 @@ msgstr "" msgid "Could not load file %1" msgstr "" + +msgid "Key Bindings:" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" + +#~ msgid "HD Controller:" +#~ msgstr "Řadič disku:" + +#~ msgid "ZIP drives:" +#~ msgstr "Mechaniky ZIP:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "Obrazy ZIP disků" diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po index 267e4b13e..cb7aad343 100644 --- a/src/qt/languages/de-DE.po +++ b/src/qt/languages/de-DE.po @@ -27,8 +27,11 @@ msgstr "Strg+Alt+&Esc" msgid "&Pause" msgstr "&Pause" -msgid "E&xit..." -msgstr "Be&enden..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" +msgstr "Be&enden" msgid "&View" msgstr "&Ansicht" @@ -60,7 +63,7 @@ msgstr "Open&GL (3.0-Kern)" msgid "&VNC" msgstr "&VNC" -msgid "Specify dimensions..." +msgid "Specify &dimensions..." msgstr "Fenstergröße einstellen..." msgid "F&orce 4:3 display ratio" @@ -99,7 +102,7 @@ msgstr "&7x" msgid "&8x" msgstr "&8x" -msgid "Filter method" +msgid "Fi<er method" msgstr "Filterungsmethode" msgid "&Nearest" @@ -144,9 +147,15 @@ msgstr "&VGA-Bildschirmtyp" msgid "RGB &Color" msgstr "&RGB-Farbe" +msgid "RGB (no brown)" +msgstr "" + msgid "&RGB Grayscale" msgstr "&RGB-Graustufen" +msgid "Generic RGBI color monitor" +msgstr "" + msgid "&Amber monitor" msgstr "&Bernstein-Monitor" @@ -384,6 +393,15 @@ msgstr "Eingeschaltet (UTC)" msgid "Dynamic Recompiler" msgstr "Dynamischer Recompiler" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "Videokarte:" @@ -399,6 +417,9 @@ msgstr "IBM 8514/A-Grafik" msgid "XGA Graphics" msgstr "XGA-Grafik" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "Maus:" @@ -498,18 +519,21 @@ msgstr "Parallelport 3" msgid "Parallel port 4" msgstr "Parallelport 4" -msgid "HD Controller:" -msgstr "HDD-Controller:" - msgid "FD Controller:" msgstr "FD-Controller:" +msgid "CD-ROM Controller:" +msgstr "" + msgid "Tertiary IDE Controller" msgstr "Tertiärer IDE-Controller" msgid "Quaternary IDE Controller" msgstr "Quartärer IDE-Controller" +msgid "Hard disk" +msgstr "" + msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "Kassette" msgid "Hard disks:" msgstr "Festplatten:" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "&Neu..." @@ -588,8 +615,8 @@ msgstr "CD-ROM-Laufwerke:" msgid "MO drives:" msgstr "MO-Laufwerke:" -msgid "ZIP drives:" -msgstr "ZIP-Laufwerke:" +msgid "Removable disk drives:" +msgstr "" msgid "ZIP 250" msgstr "ZIP 250" @@ -600,6 +627,9 @@ msgstr "ISA-Echtzeituhr:" msgid "ISA Memory Expansion" msgstr "ISA-Speichererweiterung:" +msgid "ISA ROM Cards" +msgstr "" + msgid "Card 1:" msgstr "Steckkarte 1:" @@ -612,6 +642,15 @@ msgstr "Steckkarte 3:" msgid "Card 4:" msgstr "Steckkarte 4:" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "ISABugger-Gerät" @@ -633,11 +672,17 @@ msgstr " - PAUSIERT" msgid "Speed" msgstr "Geschwindigkeit" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "" -msgid "ZIP images" -msgstr "ZIP-Abbilder" +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" +msgstr "" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box konnte keine nutzbaren ROM-Dateien finden.\n\nBitte besuchen Sie download, laden ein ROM-Set herunter und extrahieren dies in das \"roms\"-Verzeichnis." @@ -777,12 +822,39 @@ msgstr "4-Achsen-, 4-Tasten-Joystick" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" msgid "Thrustmaster Flight Control System" msgstr "Thrustmaster Flight Control System" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "Ohne" @@ -792,6 +864,9 @@ msgstr "%1 MB (CHS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "Diskette %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "&Diskette %1 (%2): %3" + msgid "Advanced sector images" msgstr "Fortgeschrittene Sektorabbilder" @@ -813,6 +888,9 @@ msgstr "GhostPCL konnte nicht initialisiert werden" msgid "MO %1 (%2): %3" msgstr "MO %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "&MO %1 (%2): %3" + msgid "MO images" msgstr "MO-Abbilder" @@ -897,12 +975,18 @@ msgstr "Fortfahren" msgid "Cassette: %1" msgstr "Kassette: %1" +msgid "C&assette: %1" +msgstr "K&assette: %1" + msgid "Cassette images" msgstr "Kassettenabbilder" msgid "Cartridge %1: %2" msgstr "Cartridge %1: %2" +msgid "Car&tridge %1: %2" +msgstr "Car&tridge %1: %2" + msgid "Cartridge images" msgstr "Cartridgeabbilder" @@ -924,6 +1008,9 @@ msgstr "Kaltstart" msgid "ACPI shutdown" msgstr "ACPI basiertes Herunterfahren" +msgid "ACP&I shutdown" +msgstr "ACP&I basiertes Herunterfahren" + msgid "Hard disk (%1)" msgstr "Festplatte (%1)" @@ -1071,6 +1158,9 @@ msgstr "ATAPI" msgid "CD-ROM %1 (%2): %3" msgstr "CD-ROM %1 (%2): %3" +msgid "&CD-ROM %1 (%2): %3" +msgstr "&CD-ROM %1 (%2): %3" + msgid "160 KB" msgstr "160 KB" @@ -1209,41 +1299,41 @@ msgstr "MCA-Geräte" msgid "List of MCA devices:" msgstr "Liste die MCA-Geräte:" -msgid "Tablet tool" +msgid "&Tablet tool" msgstr "Tablet-Werkzeug" msgid "Qt (OpenGL &ES)" msgstr "Qt (OpenGL &ES)" -msgid "About Qt" -msgstr "Über Qt" +msgid "About &Qt" +msgstr "Über &Qt" -msgid "MCA devices..." +msgid "&MCA devices..." msgstr "MCA-Geräte..." -msgid "Show non-primary monitors" +msgid "Show non-&primary monitors" msgstr "Nicht-primäre Monitore anzeigen" -msgid "Open screenshots folder..." +msgid "Open screenshots &folder..." msgstr "Ordner „screenshots“ öffnen..." -msgid "Apply fullscreen stretch mode when maximized" +msgid "Appl&y fullscreen stretch mode when maximized" msgstr "Vollbild-Streckmodus aktivieren, wenn das Fenster maximiert ist" -msgid "Cursor/Puck" -msgstr "Mauszeiger/Puck" +msgid "&Cursor/Puck" +msgstr "&Mauszeiger/Puck" -msgid "Pen" -msgstr "Stift" +msgid "&Pen" +msgstr "&Stift" -msgid "Host CD/DVD Drive (%1:)" -msgstr "Host-CD/DVD-Laufwerk (%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "&Host-CD/DVD-Laufwerk (%1:)" msgid "&Connected" msgstr "&Verbunden" -msgid "Clear image history" -msgstr "Abbildverlauf löschen" +msgid "Clear image &history" +msgstr "&Abbildverlauf löschen" msgid "Create..." msgstr "Erstellen..." @@ -1260,6 +1350,9 @@ msgstr "Nulltreiber" msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" +msgid "&NIC %1 (%2) %3" +msgstr "&NIC %1 (%2) %3" + msgid "Render behavior" msgstr "Rendering-Verhalten" @@ -1365,9 +1458,27 @@ msgstr "Durchreichung der Serielle Schnittstelle 3" msgid "Serial port passthrough 4" msgstr "Durchreichung der Serielle Schnittstelle 4" -msgid "Renderer options..." +msgid "Renderer &options..." msgstr "Renderer-Optionen..." +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" +msgstr "" + msgid "Logitech/Microsoft Bus Mouse" msgstr "Logitech/Microsoft Bus-Maus" @@ -1377,18 +1488,30 @@ msgstr "Microsoft Bus-Maus (InPort)" msgid "Mouse Systems Serial Mouse" msgstr "Mouse Systems Serielle Maus" +msgid "Mouse Systems Bus Mouse" +msgstr "" + msgid "Microsoft Serial Mouse" msgstr "Microsoft Serielle Maus" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "Logitech Serielle Maus" msgid "PS/2 Mouse" msgstr "PS/2-Maus" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (Seriell)" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] Standard Hayes-kompatibles Modem" @@ -1413,12 +1536,54 @@ msgstr "System MIDI" msgid "MIDI Input Device" msgstr "MIDI-Eingabegerät" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" msgstr "BIOS-Adresse" +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" +msgstr "" + msgid "Enable BIOS extension ROM Writes" msgstr "Schreiben in BIOS Erweiterungs ROMs zulassen" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "Adresse" @@ -1428,6 +1593,18 @@ msgstr "IRQ" msgid "BIOS Revision" msgstr "BIOS-Revision" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "Übersetzen 26 -> 17" @@ -1443,6 +1620,18 @@ msgstr "Farben invertieren" msgid "BIOS size" msgstr "BIOS-Größe" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "C0000-C7FFF als UMB zuordnen" @@ -1518,6 +1707,9 @@ msgstr "Nachhall-Pegel" msgid "Interpolation Method" msgstr "Interpolationsmethode" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" msgstr "Nachhall-Ausgangsverstärkung" @@ -1605,6 +1797,12 @@ msgstr "Niedrige DMA" msgid "Enable Game port" msgstr "Game-Port einschalten" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "Surround-Modul" @@ -1617,6 +1815,9 @@ msgstr "CODEC-Interrupt bei CODEC-Einrichtung auslösen (wird von einigen Treibe msgid "SB Address" msgstr "SB-Adresse" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "WSS-IRQ" @@ -1701,9 +1902,15 @@ msgstr "RAMDAC-Typ" msgid "Blend" msgstr "Mischung" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "Bilineare Filterung" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "Dithering" @@ -1746,6 +1953,33 @@ msgstr "Übertragungsgeschwindigkeit" msgid "EMS mode" msgstr "EMS-Modus" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "Adresse für > 2 MB" @@ -1764,11 +1998,11 @@ msgstr "Immer mit der gewählten Geschwindigkeit" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "BIOS-Einstellung + Hotkeys (aus während POST)" -msgid "64 kB starting from F0000" -msgstr "64 kB ab F0000" +msgid "64 KB starting from F0000" +msgstr "64 KB ab F0000" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "128 kB ab E0000 (MSB der Adresse invertiert, letzte 64KB zuerst)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "128 KB ab E0000 (MSB der Adresse invertiert, letzte 64 KB zuerst)" msgid "Sine" msgstr "Sinus" @@ -1902,6 +2136,15 @@ msgstr "sRGB-Interpolation" msgid "Linear interpolation" msgstr "Lineare Interpolation" +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" + msgid "128 KB" msgstr "128 KB" @@ -1935,6 +2178,9 @@ msgstr "Bernsteinfarben" msgid "Gray" msgstr "Graues" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "Farbe" @@ -1950,6 +2196,12 @@ msgstr "Andere Sprachen" msgid "Bochs latest" msgstr "Bochs neueste" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "Monochrom (Kein Zeilensprungverfahren)" @@ -2031,6 +2283,9 @@ msgstr "Baudrate der Durchreichung" msgid "Named Pipe (Server)" msgstr "Benanntes Pipe (Server)" +msgid "Named Pipe (Client)" +msgstr "" + msgid "Host Serial Passthrough" msgstr "Durchreichung der seriellen Schnittstelle des Hosts" @@ -2076,6 +2331,12 @@ msgstr "IBM 8514/A-Klon (ISA)" msgid "Vendor" msgstr "Hersteller" +msgid "30 Hz (JMP2 = 1)" +msgstr "" + +msgid "60 Hz (JMP2 = 2)" +msgstr "" + msgid "Generic PC/XT Memory Expansion" msgstr "Generische PC/XT-Speichererweiterung" @@ -2147,3 +2408,72 @@ msgstr "" msgid "Could not load file %1" msgstr "" + +msgid "Key Bindings:" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" + +#~ msgid "HD Controller:" +#~ msgstr "HDD-Controller:" + +#~ msgid "ZIP drives:" +#~ msgstr "ZIP-Laufwerke:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "ZIP-Abbilder" diff --git a/src/qt/languages/en-GB.po b/src/qt/languages/en-GB.po index 550bc3ab4..9802d06f9 100644 --- a/src/qt/languages/en-GB.po +++ b/src/qt/languages/en-GB.po @@ -24,8 +24,8 @@ msgstr "Unable to initialise GhostPCL" msgid "Development of the WinBox manager stopped in 2022 due to a lack of maintainers. As we direct our efforts towards making 86Box even better, we have made the decision to no longer support WinBox as a manager.\n\nNo further updates will be provided through WinBox, and you may encounter incorrect behavior should you continue using it with newer versions of 86Box. Any bug reports related to WinBox behavior will be closed as invalid.\n\nGo to 86box.net for a list of other managers you can use." msgstr "Development of the WinBox manager stopped in 2022 due to a lack of maintainers. As we direct our efforts towards making 86Box even better, we have made the decision to no longer support WinBox as a manager.\n\nNo further updates will be provided through WinBox, and you may encounter incorrect behavior should you continue using it with newer versions of 86Box. Any bug reports related to WinBox behaviour will be closed as invalid.\n\nGo to 86box.net for a list of other managers you can use." -msgid "Apply fullscreen stretch mode when maximized" -msgstr "Apply fullscreen stretch mode when maximised" +msgid "Appl&y fullscreen stretch mode when maximized" +msgstr "Appl&y fullscreen stretch mode when maximised" msgid "Failed to initialize network driver" msgstr "Failed to initialise network driver" diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po index 5454ab1de..d6e2cbd44 100644 --- a/src/qt/languages/es-ES.po +++ b/src/qt/languages/es-ES.po @@ -27,8 +27,11 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Pausa" -msgid "E&xit..." -msgstr "&Salir..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" +msgstr "&Salir" msgid "&View" msgstr "&Vista" @@ -60,7 +63,7 @@ msgstr "Open&GL (3.0 Core)" msgid "&VNC" msgstr "&VNC" -msgid "Specify dimensions..." +msgid "Specify &dimensions..." msgstr "E&specificar dimensiones..." msgid "F&orce 4:3 display ratio" @@ -99,7 +102,7 @@ msgstr "&7x" msgid "&8x" msgstr "&8x" -msgid "Filter method" +msgid "Fi<er method" msgstr "&Método de filtrado" msgid "&Nearest" @@ -144,9 +147,15 @@ msgstr "&Tipo de pantalla VGA" msgid "RGB &Color" msgstr "RGB &Color" +msgid "RGB (no brown)" +msgstr "" + msgid "&RGB Grayscale" msgstr "RGB &Grises" +msgid "Generic RGBI color monitor" +msgstr "" + msgid "&Amber monitor" msgstr "Monitor &Ámbar" @@ -384,6 +393,15 @@ msgstr "Habilitado (UTC)" msgid "Dynamic Recompiler" msgstr "Recompilador Dinámico" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "Vídeo:" @@ -399,6 +417,9 @@ msgstr "Gráficos IBM 8514/A" msgid "XGA Graphics" msgstr "Gráficos XGA" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "Ratón:" @@ -498,18 +519,21 @@ msgstr "Puerto paralelo 3" msgid "Parallel port 4" msgstr "Puerto paralelo 4" -msgid "HD Controller:" -msgstr "Controladora HD:" - msgid "FD Controller:" msgstr "Controladora FD:" +msgid "CD-ROM Controller:" +msgstr "" + msgid "Tertiary IDE Controller" msgstr "Tercera controladora IDE" msgid "Quaternary IDE Controller" msgstr "Cuarta controladora IDE" +msgid "Hard disk" +msgstr "" + msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "Cassette" msgid "Hard disks:" msgstr "Discos duros:" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "&Nuevo..." @@ -588,8 +615,8 @@ msgstr "Unidades de CD-ROM:" msgid "MO drives:" msgstr "Unidades MO:" -msgid "ZIP drives:" -msgstr "Unidades ZIP:" +msgid "Removable disk drives:" +msgstr "" msgid "ZIP 250" msgstr "ZIP 250" @@ -600,6 +627,9 @@ msgstr "ISA RTC:" msgid "ISA Memory Expansion" msgstr "Expansión de Memoria ISA" +msgid "ISA ROM Cards" +msgstr "" + msgid "Card 1:" msgstr "Tarjeta 1:" @@ -612,6 +642,15 @@ msgstr "Tarjeta 3:" msgid "Card 4:" msgstr "Tarjeta 4:" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "Dispositivo ISABugger" @@ -633,11 +672,17 @@ msgstr " - EN PAUSA" msgid "Speed" msgstr "Velocidad" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "" -msgid "ZIP images" -msgstr "Imagenes ZIP" +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" +msgstr "" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box no pudo encontrar ninguna imagen ROM usable.\n\nPor favor descargue un conjunte de ROMs y extráigalo en el directorio \"roms\"." @@ -777,12 +822,39 @@ msgstr "Mando de 4 ejes, 4 botones" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" msgid "Thrustmaster Flight Control System" msgstr "Thrustmaster Flight Control System" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "Ninguno" @@ -792,6 +864,9 @@ msgstr "%1 MB (CHS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "Disquete %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "&Disquete %1 (%2): %3" + msgid "Advanced sector images" msgstr "Imágenes avanzadas de sector" @@ -813,6 +888,9 @@ msgstr "No fué posible inicializar GhostPCL" msgid "MO %1 (%2): %3" msgstr "MO %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "&MO %1 (%2): %3" + msgid "MO images" msgstr "Imágenes de MO" @@ -897,12 +975,18 @@ msgstr "Continuar" msgid "Cassette: %1" msgstr "Cassette: %1" +msgid "C&assette: %1" +msgstr "C&assette: %1" + msgid "Cassette images" msgstr "Imágenes de Cassette" msgid "Cartridge %1: %2" msgstr "Cartucho %1: %2" +msgid "Car&tridge %1: %2" +msgstr "Car&tucho %1: %2" + msgid "Cartridge images" msgstr "Imágenes de Cartucho" @@ -924,6 +1008,9 @@ msgstr "Hard reset" msgid "ACPI shutdown" msgstr "Parada ACPI" +msgid "ACP&I shutdown" +msgstr "Parada ACP&I" + msgid "Hard disk (%1)" msgstr "Disco duro (%1)" @@ -1071,6 +1158,9 @@ msgstr "ATAPI" msgid "CD-ROM %1 (%2): %3" msgstr "CD-ROM %1 (%2): %3" +msgid "&CD-ROM %1 (%2): %3" +msgstr "&CD-ROM %1 (%2): %3" + msgid "160 KB" msgstr "160 KB" @@ -1187,6 +1277,7 @@ msgstr "WinBox ya no recibe soporte" msgid "Development of the WinBox manager stopped in 2022 due to a lack of maintainers. As we direct our efforts towards making 86Box even better, we have made the decision to no longer support WinBox as a manager.\n\nNo further updates will be provided through WinBox, and you may encounter incorrect behavior should you continue using it with newer versions of 86Box. Any bug reports related to WinBox behavior will be closed as invalid.\n\nGo to 86box.net for a list of other managers you can use." msgstr "El desarrollo del gestor WinBox se detuvo en 2022 debido a la falta de mantenedores. Como dirigimos nuestros esfuerzos a hacer 86Box aún mejor, hemos tomado la decisión de dejar de dar soporte a WinBox como gestor.\n\nNo se proporcionarán más actualizaciones a través de WinBox, y puede encontrar un comportamiento incorrecto si continúa usándolo con versiones más nuevas de 86Box. Cualquier informe de error relacionado con el comportamiento de WinBox será cerrado como inválido.\n\nVaya a 86box.net para una lista de otros gestores que puede utilizar." + msgid "Generate" msgstr "Vytvoř" @@ -1208,41 +1299,41 @@ msgstr "Dispositivos MCA" msgid "List of MCA devices:" msgstr "Lista de dispositivos MCA:" -msgid "Tablet tool" +msgid "&Tablet tool" msgstr "Herramienta de tableta" msgid "Qt (OpenGL &ES)" msgstr "Qt (OpenGL &ES)" -msgid "About Qt" -msgstr "Acerca de Qt" +msgid "About &Qt" +msgstr "Acerca de &Qt" -msgid "MCA devices..." +msgid "&MCA devices..." msgstr "Dispositivos MCA ..." -msgid "Show non-primary monitors" +msgid "Show non-&primary monitors" msgstr "Mostrar monitores no primarios" -msgid "Open screenshots folder..." +msgid "Open screenshots &folder..." msgstr "Abrir la carpeta screenshots..." -msgid "Apply fullscreen stretch mode when maximized" +msgid "Appl&y fullscreen stretch mode when maximized" msgstr "Usar escalado pantalla completa en modalidad maximizada" -msgid "Cursor/Puck" -msgstr "Cursor/Puck" +msgid "&Cursor/Puck" +msgstr "&Cursor/Puck" -msgid "Pen" -msgstr "Bolígrafo" +msgid "&Pen" +msgstr "&Bolígrafo" -msgid "Host CD/DVD Drive (%1:)" -msgstr "Unidad de CD/DVD anfitriona (%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "&Unidad de CD/DVD anfitriona (%1:)" msgid "&Connected" msgstr "&Conectrado" -msgid "Clear image history" -msgstr "Eliminar historia de imágenes" +msgid "Clear image &history" +msgstr "Eliminar &historia de imágenes" msgid "Create..." msgstr "Crear..." @@ -1259,6 +1350,9 @@ msgstr "Controlador nulo" msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" +msgid "&NIC %1 (%2) %3" +msgstr "&NIC %1 (%2) %3" + msgid "Render behavior" msgstr "Comportamiento del renderizador" @@ -1364,9 +1458,27 @@ msgstr "Paso de puerto serie 3" msgid "Serial port passthrough 4" msgstr "Paso de puerto serie 4" -msgid "Renderer options..." +msgid "Renderer &options..." msgstr "Opciones del renderizador..." +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" +msgstr "" + msgid "Logitech/Microsoft Bus Mouse" msgstr "Ratón de bus Logitech/Microsoft" @@ -1376,18 +1488,30 @@ msgstr "Ratón de bus Microsoft (InPort)" msgid "Mouse Systems Serial Mouse" msgstr "Ratón serie Mouse Systems" +msgid "Mouse Systems Bus Mouse" +msgstr "" + msgid "Microsoft Serial Mouse" msgstr "Ratón serie Microsoft" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "Ratón serie Logitech" msgid "PS/2 Mouse" msgstr "Ratón PS/2" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (serie)" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] Módem estándar compatible con Hayes" @@ -1412,12 +1536,54 @@ msgstr "MIDI del sistema" msgid "MIDI Input Device" msgstr "Dispositivo de entrada MIDI" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" msgstr "Dirección de BIOS" +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" +msgstr "" + msgid "Enable BIOS extension ROM Writes" msgstr "Habilitar escrituras para el ROM de extensión de BIOS" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "Dirección" @@ -1427,6 +1593,18 @@ msgstr "IRQ" msgid "BIOS Revision" msgstr "Revisión de BIOS" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "Traducir 26 -> 17" @@ -1442,6 +1620,18 @@ msgstr "Invertir colores" msgid "BIOS size" msgstr "Tamaño de BIOS" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "Mapear a C0000-C7FFF como UMB" @@ -1517,6 +1707,9 @@ msgstr "Nível de reverberación" msgid "Interpolation Method" msgstr "Método de interpolación" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" msgstr "Ganancia de salida de reverberación" @@ -1604,6 +1797,12 @@ msgstr "DMA bajo" msgid "Enable Game port" msgstr "Habilitar puerto de juegos" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "Módulo Surround" @@ -1616,6 +1815,9 @@ msgstr "Activar la interrupción CODEC en la configuración CODEC (necesario par msgid "SB Address" msgstr "Dirección del SB" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "IRQ de WSS" @@ -1700,9 +1902,15 @@ msgstr "Tipo de RAMDAC" msgid "Blend" msgstr "Mezclar" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "Filtrado bilineal" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "Dithering" @@ -1745,6 +1953,33 @@ msgstr "Velocidad de transferencia" msgid "EMS mode" msgstr "Modo EMS" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "Dirección para > 2 MB" @@ -1763,11 +1998,11 @@ msgstr "Siempre a la velocidad seleccionada" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "Configuración de la BIOS + Teclas de acceso rápido (desactivadas durante la POST)" -msgid "64 kB starting from F0000" -msgstr "64 kB desde F0000" +msgid "64 KB starting from F0000" +msgstr "64 KB desde F0000" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "128 kB desde E0000 (MSB de dirección invertido, últimas 64KB primero)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "128 KB desde E0000 (MSB de dirección invertido, últimas 64 KB primero)" msgid "Sine" msgstr "Sinusoidal" @@ -1901,6 +2136,15 @@ msgstr "Interpolación sRGB" msgid "Linear interpolation" msgstr "Interpolación lineare" +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" + msgid "128 KB" msgstr "128 KB" @@ -1934,6 +2178,9 @@ msgstr "Ámbar" msgid "Gray" msgstr "Gris" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "Color" @@ -1949,6 +2196,12 @@ msgstr "Otros idiomas" msgid "Bochs latest" msgstr "Bochs más nuevo" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "Monocromo no entrelazado" @@ -2030,6 +2283,9 @@ msgstr "Tasa de baudios de paso" msgid "Named Pipe (Server)" msgstr "Tubería con nombre (servidor)" +msgid "Named Pipe (Client)" +msgstr "" + msgid "Host Serial Passthrough" msgstr "Paso del puerto serie del host" @@ -2075,6 +2331,12 @@ msgstr "Clon IBM 8514/A (ISA)" msgid "Vendor" msgstr "Fabricante" +msgid "30 Hz (JMP2 = 1)" +msgstr "" + +msgid "60 Hz (JMP2 = 2)" +msgstr "" + msgid "Generic PC/XT Memory Expansion" msgstr "Expansión de Memoria Generica PC/XT" @@ -2146,3 +2408,72 @@ msgstr "" msgid "Could not load file %1" msgstr "" + +msgid "Key Bindings:" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" + +#~ msgid "HD Controller:" +#~ msgstr "Controladora HD:" + +#~ msgid "ZIP drives:" +#~ msgstr "Unidades ZIP:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "Imagenes ZIP" diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po index ae4f78bb5..e306b595a 100644 --- a/src/qt/languages/fi-FI.po +++ b/src/qt/languages/fi-FI.po @@ -27,8 +27,11 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Tauko" -msgid "E&xit..." -msgstr "&Poistu..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" +msgstr "&Poistu" msgid "&View" msgstr "&Näytä" @@ -60,7 +63,7 @@ msgstr "Open&GL (3.0 Core)" msgid "&VNC" msgstr "&VNC" -msgid "Specify dimensions..." +msgid "Specify &dimensions..." msgstr "&Määritä koko..." msgid "F&orce 4:3 display ratio" @@ -99,7 +102,7 @@ msgstr "&7x" msgid "&8x" msgstr "&8x" -msgid "Filter method" +msgid "Fi<er method" msgstr "&Suodatusmetodi" msgid "&Nearest" @@ -144,9 +147,15 @@ msgstr "VGA-näytön &tyyppi" msgid "RGB &Color" msgstr "RGB, &värit" +msgid "RGB (no brown)" +msgstr "" + msgid "&RGB Grayscale" msgstr "&RGB, harmaasävy" +msgid "Generic RGBI color monitor" +msgstr "" + msgid "&Amber monitor" msgstr "&Meripihkanvärinen" @@ -384,6 +393,15 @@ msgstr "Käytössä (UTC)" msgid "Dynamic Recompiler" msgstr "Dynaaminen uudelleenkääntäjä" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "Näytönohjain:" @@ -399,6 +417,9 @@ msgstr "IBM 8514/A-grafiikkasuoritin" msgid "XGA Graphics" msgstr "XGA-grafiikkasuoritin" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "Hiiri:" @@ -498,18 +519,21 @@ msgstr "Rinnakkaisportti 3" msgid "Parallel port 4" msgstr "Rinnakkaisportti 4" -msgid "HD Controller:" -msgstr "Kiintolevyohjain:" - msgid "FD Controller:" msgstr "Levykeohjain:" +msgid "CD-ROM Controller:" +msgstr "" + msgid "Tertiary IDE Controller" msgstr "Kolmas IDE-ohjain" msgid "Quaternary IDE Controller" msgstr "Neljäs IDE-ohjain" +msgid "Hard disk" +msgstr "" + msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "Kasettiasema" msgid "Hard disks:" msgstr "Kiintolevyt:" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "&Uusi..." @@ -588,8 +615,8 @@ msgstr "CD-ROM-asemat:" msgid "MO drives:" msgstr "Magneettisoptiset asemat (MO):" -msgid "ZIP drives:" -msgstr "ZIP-asemat:" +msgid "Removable disk drives:" +msgstr "" msgid "ZIP 250" msgstr "ZIP 250" @@ -600,6 +627,9 @@ msgstr "ISA-RTC (kello):" msgid "ISA Memory Expansion" msgstr "ISA-muistilaajennus" +msgid "ISA ROM Cards" +msgstr "" + msgid "Card 1:" msgstr "Kortti 1:" @@ -612,6 +642,15 @@ msgstr "Kortti 3:" msgid "Card 4:" msgstr "Kortti 4:" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "ISABugger-laite" @@ -633,11 +672,17 @@ msgstr " - TAUKO" msgid "Speed" msgstr "Nopeus" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "" -msgid "ZIP images" -msgstr "ZIP-levykuvat" +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" +msgstr "" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box ei löytänyt käyttökelpoisia ROM-tiedostoja.\n\nVoit ladata ROM-paketin ja purkaa sen \"roms\"-hakemistoon." @@ -672,7 +717,7 @@ msgstr "Konetta \"%hs\" ei voi käyttää, koska roms/machines-hakemistosta puut msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." msgstr "Näytönohjainta \"%hs\" ei voi käyttää, koska roms/machines-hakemistosta puuttuvien ROM-tiedostojen vuoksi. Vaihdetaan käyttökelpoiseen näytönohjaimeen." -msgid "Video card #2 \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgid "Video card #2 \"%hs\" is not available due to missing ROMs in the roms/video directory. Disabling the second video card." msgstr "Näytönohjainta 2 \"%hs\" ei voi käyttää, koska roms/machines-hakemistosta puuttuvien ROM-tiedostojen vuoksi. Toisen näytönohjaimen poistaminen käytöstä." msgid "Device \"%hs\" is not available due to missing ROMs. Ignoring the device." @@ -777,12 +822,39 @@ msgstr "4-akselinen 4-painikkeinen peliohjain" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" msgid "Thrustmaster Flight Control System" msgstr "Thrustmaster Flight Control System" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "Ei mikään" @@ -792,6 +864,9 @@ msgstr "%1 Mt (CHS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "Levyke %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "&Levyke %1 (%2): %3" + msgid "Advanced sector images" msgstr "Kehittyneet sektorilevykuvat" @@ -813,6 +888,9 @@ msgstr "GhostPCLin alustus epäonnistui" msgid "MO %1 (%2): %3" msgstr "MO %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "&MO %1 (%2): %3" + msgid "MO images" msgstr "MO-levykuvat" @@ -897,12 +975,18 @@ msgstr "Jatka" msgid "Cassette: %1" msgstr "Kasetti: %1" +msgid "C&assette: %1" +msgstr "K&asetti: %1" + msgid "Cassette images" msgstr "Kasettitiedostot" msgid "Cartridge %1: %2" msgstr "ROM-moduuli %1: %2" +msgid "Car&tridge %1: %2" +msgstr "R&OM-moduuli %1: %2" + msgid "Cartridge images" msgstr "ROM-moduulikuvat" @@ -924,6 +1008,9 @@ msgstr "Kylmä uudelleenkäynnistys" msgid "ACPI shutdown" msgstr "ACPI-sammutus" +msgid "ACP&I shutdown" +msgstr "ACP&I-sammutus" + msgid "Hard disk (%1)" msgstr "Kiintolevy (%1)" @@ -1071,6 +1158,9 @@ msgstr "ATAPI" msgid "CD-ROM %1 (%2): %3" msgstr "CD-ROM %1 (%2): %3" +msgid "&CD-ROM %1 (%2): %3" +msgstr "&CD-ROM %1 (%2): %3" + msgid "160 KB" msgstr "160 Kt" @@ -1209,41 +1299,41 @@ msgstr "MCA-laitteet" msgid "List of MCA devices:" msgstr "Luettelo MCA-laitteista:" -msgid "Tablet tool" +msgid "&Tablet tool" msgstr "Tablettityökalu" msgid "Qt (OpenGL &ES)" msgstr "Qt (OpenGL &ES)" -msgid "About Qt" -msgstr "Tietoja Qt:sta" +msgid "About &Qt" +msgstr "Tietoja &Qt:sta" -msgid "MCA devices..." +msgid "&MCA devices..." msgstr "MCA-laitteet..." -msgid "Show non-primary monitors" +msgid "Show non-&primary monitors" msgstr "Näytä muut kuin ensisijaiset monitorit" -msgid "Open screenshots folder..." +msgid "Open screenshots &folder..." msgstr "Avaa kuvakaappaukset-kansio..." -msgid "Apply fullscreen stretch mode when maximized" +msgid "Appl&y fullscreen stretch mode when maximized" msgstr "Sovelletaan koko näytön venytystilaa maksimoidessa" -msgid "Cursor/Puck" -msgstr "Kursori/Kiekko" +msgid "&Cursor/Puck" +msgstr "&Kursori/Kiekko" -msgid "Pen" -msgstr "Kynä" +msgid "&Pen" +msgstr "K&ynä" -msgid "Host CD/DVD Drive (%1:)" -msgstr "Isäntä CD/DVD-asema (%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "&Isäntä CD/DVD-asema (%1:)" msgid "&Connected" msgstr "&Yhdistetty" -msgid "Clear image history" -msgstr "Tyhjennä kuvahistoria" +msgid "Clear image &history" +msgstr "Tyhjennä kuva&historia" msgid "Create..." msgstr "Luo..." @@ -1260,6 +1350,9 @@ msgstr "Nolla-ajuri" msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" +msgid "&NIC %1 (%2) %3" +msgstr "&NIC %1 (%2) %3" + msgid "Render behavior" msgstr "Renderöintikäyttäytyminen" @@ -1281,9 +1374,6 @@ msgstr "Varjostinohjelmat" msgid "Remove" msgstr "Poista" -msgid "No shader selected" -msgstr "Ei valittu varjostinohjelmatta" - msgid "Browse..." msgstr "Selaa..." @@ -1368,9 +1458,27 @@ msgstr "Sarjaportin läpivienti 3" msgid "Serial port passthrough 4" msgstr "Sarjaportin läpivienti 4" -msgid "Renderer options..." +msgid "Renderer &options..." msgstr "Alustusasetukset..." +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" +msgstr "" + msgid "Logitech/Microsoft Bus Mouse" msgstr "Logitech/Microsoft-väylähiiri" @@ -1380,18 +1488,30 @@ msgstr "Microsoft-väylähiiri (InPort)" msgid "Mouse Systems Serial Mouse" msgstr "Mouse Systems-sarjahiiri" +msgid "Mouse Systems Bus Mouse" +msgstr "" + msgid "Microsoft Serial Mouse" msgstr "Microsoft-sarjahiiri" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "Logitech-sarjahiiri" msgid "PS/2 Mouse" msgstr "PS/2 hiiri" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (sarja)" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] Tavallinen Hayes-yhteensopiva modeemi" @@ -1416,12 +1536,54 @@ msgstr "Järjestelmän MIDI" msgid "MIDI Input Device" msgstr "MIDI-syöttölaite" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" msgstr "BIOS-osoite" +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" +msgstr "" + msgid "Enable BIOS extension ROM Writes" msgstr "Käytä BIOS-laajennuksen ROM-kirjoitusten" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "Osoite" @@ -1431,6 +1593,18 @@ msgstr "IRQ" msgid "BIOS Revision" msgstr "BIOS-tarkistus" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "Käännä 26 -> 17" @@ -1446,6 +1620,18 @@ msgstr "Käännä värit" msgid "BIOS size" msgstr "BIOS-koko" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "Kartta C0000-C7FFF UMB:nä" @@ -1521,6 +1707,9 @@ msgstr "Jälkikaiunnan taso" msgid "Interpolation Method" msgstr "Interpolointimenetelmä" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" msgstr "Jälkikaiunta lähtötaso" @@ -1608,6 +1797,12 @@ msgstr "Matala DMA" msgid "Enable Game port" msgstr "Käytä peliporttita" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "Surround-moduuli" @@ -1620,6 +1815,9 @@ msgstr "CODEC-keskeytyksen nostaminen CODEC-asennuksen yhteydessä (jotkut ohjai msgid "SB Address" msgstr "SB-osoite" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "WSS-IRQ" @@ -1704,9 +1902,15 @@ msgstr "RAMDAC-tyyppi" msgid "Blend" msgstr "Sekoitus" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "Bilineaarinen suodatus" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "Dithering" @@ -1749,6 +1953,33 @@ msgstr "Siirtonopeus" msgid "EMS mode" msgstr "EMS-tila" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "Osoite > 2 Mt" @@ -1767,11 +1998,11 @@ msgstr "Aina valitulla nopeudella" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "BIOS-asetus + pikanäppäimet (pois päältä POSTin aikana)" -msgid "64 kB starting from F0000" -msgstr "64 kB alkaen F0000:sta" +msgid "64 KB starting from F0000" +msgstr "64 Kt alkaen F0000:sta" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "128 kB alkaen E0000:sta (osoitteen käänteinen MSB, viimeiset 64 kB ensin)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "128 Kt alkaen E0000:sta (osoitteen käänteinen MSB, viimeiset 64 Kt ensin)" msgid "Sine" msgstr "Sini" @@ -1837,7 +2068,7 @@ msgid "2 MB" msgstr "2 Mt" msgid "8 MB" -msgstr " 8 Mt" +msgstr "8 Mt" msgid "28 MB" msgstr "28 Mt" @@ -1905,6 +2136,15 @@ msgstr "sRGB-interpolointi" msgid "Linear interpolation" msgstr "Lineaarinen interpolointi" +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" + msgid "128 KB" msgstr "128 Kt" @@ -1938,6 +2178,9 @@ msgstr "Keltainen" msgid "Gray" msgstr "Harmaa" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "Väri" @@ -1953,6 +2196,12 @@ msgstr "Muut kielet" msgid "Bochs latest" msgstr "Bochs uusin" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "Yksivärinen ei-välitetyt" @@ -2034,6 +2283,9 @@ msgstr "Läpiviennin baudinopeus" msgid "Named Pipe (Server)" msgstr "Nimetty putki (palvelin)" +msgid "Named Pipe (Client)" +msgstr "" + msgid "Host Serial Passthrough" msgstr "Isännän sarjaportin läpivienti" @@ -2079,6 +2331,12 @@ msgstr "IBM 8514/A-klooni (ISA)" msgid "Vendor" msgstr "Valmistaja" +msgid "30 Hz (JMP2 = 1)" +msgstr "" + +msgid "60 Hz (JMP2 = 2)" +msgstr "" + msgid "Generic PC/XT Memory Expansion" msgstr "Yleinen PC/XT-muistilaajennus" @@ -2150,3 +2408,72 @@ msgstr "" msgid "Could not load file %1" msgstr "" + +msgid "Key Bindings:" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" + +#~ msgid "HD Controller:" +#~ msgstr "Kiintolevyohjain:" + +#~ msgid "ZIP drives:" +#~ msgstr "ZIP-asemat:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "ZIP-levykuvat" diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po index 87530590a..102a57ac3 100644 --- a/src/qt/languages/fr-FR.po +++ b/src/qt/languages/fr-FR.po @@ -27,8 +27,11 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Pause" -msgid "E&xit..." -msgstr "&Quitter..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" +msgstr "&Quitter" msgid "&View" msgstr "&Vue" @@ -40,7 +43,7 @@ msgid "Hide &toolbar" msgstr "Masquer la &barre d'outils" msgid "&Resizeable window" -msgstr "Fenêtre &Redimensionnable" +msgstr "Fenêtre &redimensionnable" msgid "R&emember size && position" msgstr "S&auvegarder taille && position" @@ -60,14 +63,14 @@ msgstr "Open&GL (3.0 Core)" msgid "&VNC" msgstr "&VNC" -msgid "Specify dimensions..." +msgid "Specify &dimensions..." msgstr "Spécifier dimensions..." msgid "F&orce 4:3 display ratio" -msgstr "F&orcer 4:3" +msgstr "F&orcer le ratio 4:3" msgid "&Window scale factor" -msgstr "&Echelle facteur" +msgstr "&Echelle de facteur" msgid "&0.5x" msgstr "&0.5x" @@ -99,8 +102,8 @@ msgstr "&7x" msgid "&8x" msgstr "&8x" -msgid "Filter method" -msgstr "Méthode Filtre" +msgid "Fi<er method" +msgstr "Méthode de Filtre" msgid "&Nearest" msgstr "&Plus proche" @@ -112,10 +115,10 @@ msgid "Hi&DPI scaling" msgstr "Mise à l'échelle Hi&DPI" msgid "&Fullscreen" -msgstr "&Plein Ecran" +msgstr "&Plein écran" msgid "Fullscreen &stretch mode" -msgstr "Mode &Elargi plein écran" +msgstr "Mode plein écran &étiré" msgid "&Full screen stretch" msgstr "&Plein écran étiré" @@ -124,13 +127,13 @@ msgid "&4:3" msgstr "&4:3" msgid "&Square pixels (Keep ratio)" -msgstr "Pixels &carrés (Keep ratio)" +msgstr "Pixels &carrés (Conserver le ratio)" msgid "&Integer scale" -msgstr "Echelle &Entière" +msgstr "&Echelle entière" msgid "4:&3 Integer scale" -msgstr "Echelle Entière 4:&3" +msgstr "Echelle entière 4:&3" msgid "E&GA/(S)VGA settings" msgstr "Réglages E&GA/(S)VGA" @@ -139,13 +142,19 @@ msgid "&Inverted VGA monitor" msgstr "Moniteur VGA &Inversé" msgid "VGA screen &type" -msgstr "&Type Ecran VGA" +msgstr "&Type d'écran VGA" msgid "RGB &Color" -msgstr "RGB &Couleur" +msgstr "&Couleurs RGB" + +msgid "RGB (no brown)" +msgstr "" msgid "&RGB Grayscale" -msgstr "&RGB Ton de Gris" +msgstr "Niveau de Gris &RGB " + +msgid "Generic RGBI color monitor" +msgstr "" msgid "&Amber monitor" msgstr "Moniteur &Ambre" @@ -157,7 +166,7 @@ msgid "&White monitor" msgstr "Moniteur &Blanc" msgid "Grayscale &conversion type" -msgstr "Mode &Conversion tons de gris" +msgstr "Type de &conversion du niveau de Gris" msgid "BT&601 (NTSC/PAL)" msgstr "BT&601 (NTSC/PAL)" @@ -166,16 +175,16 @@ msgid "BT&709 (HDTV)" msgstr "BT&709 (HDTV)" msgid "&Average" -msgstr "&Moyenne" +msgstr "&Moyen" msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" -msgstr "Overscan CGA/PCjr/Tandy/E&GA/(S)VGA" +msgstr "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" msgid "Change contrast for &monochrome display" -msgstr "Modifier contraste affichage &monochrome" +msgstr "Modifier le contraste de l'affichage &monochrome" msgid "&Media" -msgstr "&Media" +msgstr "&Média" msgid "&Tools" msgstr "Ou&tils" @@ -187,7 +196,7 @@ msgid "&Update status bar icons" msgstr "Mettre à jour la barre de stat&us" msgid "Take s&creenshot" -msgstr "Copie &Ecran" +msgstr "Copie &d'écran" msgid "S&ound" msgstr "S&on" @@ -196,7 +205,7 @@ msgid "&Preferences..." msgstr "&Préférences..." msgid "Enable &Discord integration" -msgstr "Activer intégration &Discord" +msgstr "Activer l'intégration &Discord" msgid "Sound &gain..." msgstr "&Gain Son..." @@ -235,7 +244,7 @@ msgid "&Rewind to the beginning" msgstr "&Revenir au debut" msgid "&Fast forward to the end" -msgstr "Aller à la &Fin" +msgstr "Avance rapide jusqu'à la &Fin" msgid "E&ject" msgstr "É&jecter" @@ -244,13 +253,13 @@ msgid "&Image..." msgstr "&Image..." msgid "E&xport to 86F..." -msgstr "E&xporter vers 86F..." +msgstr "E&xport vers 86F..." msgid "&Mute" msgstr "&Couper" msgid "E&mpty" -msgstr "E&jecter" +msgstr "V&ide" msgid "Reload previous image" msgstr "Recharger image précedente" @@ -328,7 +337,7 @@ msgid "RPM mode:" msgstr "Mode RPM:" msgid "Progress:" -msgstr "Progrès:" +msgstr "Progression:" msgid "Width:" msgstr "Largeur:" @@ -384,6 +393,15 @@ msgstr "Activé (UTC)" msgid "Dynamic Recompiler" msgstr "Recompilateur dynamique" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "Vidéo:" @@ -399,6 +417,9 @@ msgstr "Graphique IBM 8514/A" msgid "XGA Graphics" msgstr "Graphique XGA" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "Souris:" @@ -498,17 +519,20 @@ msgstr "Port parallèle 3" msgid "Parallel port 4" msgstr "Port parallèle 4" -msgid "HD Controller:" -msgstr "Contrôleur HD:" - msgid "FD Controller:" msgstr "Contrôleur FD:" +msgid "CD-ROM Controller:" +msgstr "" + msgid "Tertiary IDE Controller" -msgstr "Contrôleur IDE tertiaire" +msgstr "Troisième contrôleur IDE" msgid "Quaternary IDE Controller" -msgstr "Contrôleur IDE quaternair" +msgstr "Quatrième contrôleur IDE" + +msgid "Hard disk" +msgstr "" msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "Cassette" msgid "Hard disks:" msgstr "Disques durs:" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "&Nouveau..." @@ -583,13 +610,13 @@ msgid "Check BPB" msgstr "Vérifier BPB" msgid "CD-ROM drives:" -msgstr "Lecterus CD-ROM:" +msgstr "Lecteurs CD-ROM:" msgid "MO drives:" msgstr "Lecteurs magnéto-optiques:" -msgid "ZIP drives:" -msgstr "Lecteurs ZIP:" +msgid "Removable disk drives:" +msgstr "" msgid "ZIP 250" msgstr "ZIP 250" @@ -598,7 +625,10 @@ msgid "ISA RTC:" msgstr "Horloge temps réel ISA:" msgid "ISA Memory Expansion" -msgstr "Extension de mémoire ISA" +msgstr "Extension de la mémoire ISA" + +msgid "ISA ROM Cards" +msgstr "" msgid "Card 1:" msgstr "Carte 1:" @@ -612,6 +642,15 @@ msgstr "Carte 3:" msgid "Card 4:" msgstr "Carte 4:" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "Dispositif ISABugger" @@ -633,11 +672,17 @@ msgstr " - EN PAUSE" msgid "Speed" msgstr "Vitesse" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "" -msgid "ZIP images" -msgstr "Images ZIP" +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" +msgstr "" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box n'a pas pu trouver d'images ROM utilisables.\n\nS'il vous plait, téléchargez un ensemble ROM et extrayez-le dans le répertoire \"roms\"." @@ -661,7 +706,7 @@ msgid "All images" msgstr "Toutes les images" msgid "Basic sector images" -msgstr "Images basiques du secteur" +msgstr "Images secteur basique" msgid "Surface images" msgstr "Images de la surface" @@ -709,7 +754,7 @@ msgid "Other removable devices" msgstr "Autres dispositifs amovibles" msgid "Other peripherals" -msgstr "Autres périfériques" +msgstr "Autres périphériques" msgid "Click to capture mouse" msgstr "Cliquer pour capturer la souris" @@ -724,7 +769,7 @@ msgid "Bus" msgstr "Bus" msgid "File" -msgstr "File" +msgstr "Fichier" msgid "C" msgstr "C" @@ -751,7 +796,7 @@ msgid "No PCap devices found" msgstr "Aucun dispositif PCap trouvé" msgid "Invalid PCap device" -msgstr "Dispositif PCap non valide" +msgstr "Dispositif PCap invalide" msgid "2-axis, 2-button joystick(s)" msgstr "Manette(s) avec 2 axes, 2 boutons" @@ -777,12 +822,39 @@ msgstr "Manette avec 4 axes, 4 boutons" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" msgid "Thrustmaster Flight Control System" msgstr "Système de contrôle de vol Thrustmaster" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "Aucun" @@ -792,11 +864,14 @@ msgstr "%1 Mo (CTS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "Disquette %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "&Disquette %1 (%2): %3" + msgid "Advanced sector images" -msgstr "Images du secteur avancés" +msgstr "Images secteur avancé" msgid "Flux images" -msgstr "Images du flux" +msgstr "Images Flux" msgid "Are you sure you want to hard reset the emulated machine?" msgstr "Etes-vous sûr de vouloir réinitialiser la machine émulée ?" @@ -813,6 +888,9 @@ msgstr "Impossible d'initialiser GhostPCL" msgid "MO %1 (%2): %3" msgstr "Magnéto-optique %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "&Magnéto-optique %1 (%2): %3" + msgid "MO images" msgstr "Images magnéto-optiques" @@ -844,7 +922,7 @@ msgid "86Box v" msgstr "86Box v" msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." -msgstr "Un émulateur de vieux ordinateurs\n\nAuteurs: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nAvec les contributions de Sarah Walker, leilei, JohnElliott, greatpsycho et d'autres.\n\nLibéré sous la licence GNU General Public License version 2 ou ultérieure. Pour plus d'informations, voir le fichier LICENSE." +msgstr "Un émulateur d'ordinateurs du passé\n\nAuteurs: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nAvec les contributions de Sarah Walker, leilei, JohnElliott, greatpsycho et d'autres.\n\nLibéré sous la licence GNU General Public License version 2 ou ultérieure. Pour plus d'informations, voir le fichier LICENSE." msgid "Hardware not available" msgstr "Matériel non disponible" @@ -853,7 +931,7 @@ msgid "Make sure %1 is installed and that you are on a %1-compatible network con msgstr "Assurez-vous que %1 est installé et que vous utilisez une connexion réseau compatible avec %1." msgid "Invalid configuration" -msgstr "Configuration non valide" +msgstr "Configuration invalide" msgid "%1 is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." msgstr "%1 est nécessaire pour la conversion automatique des fichiers PostScript en PDF.\n\nTous les documents envoyés à l'imprimante générique PostScript seront sauvés en tant que fichiers PostScript (.ps)." @@ -889,7 +967,7 @@ msgid "You are loading an unsupported configuration" msgstr "Vous chargez une configuration non prise en charge" msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "Le filtrage du type du processeur sur la base de la machine sélectionnée est désactivé pur cette machine émulée.\n\nCela permet de sélectionner un processeur qui est sinon incompatible avec la machine sélectionné. Cependant, il pourrait y avoir des incompatibilités avec le BIOS de la machine ou autres logiciels.\n\nL'activation de cette configuration non officiellement prise en charge implique que tout rapport de bogue peut être fermé comme étant invalide." +msgstr "Le filtre du type du processeur basé par rapport à la machine sélectionnée est désactivé pour cette machine émulée.\n\nCela permet de sélectionner un processeur qui est de base incompatible avec la machine sélectionné. Cependant, il pourrait y avoir des incompatibilités avec le BIOS de la machine ou autres logiciels.\n\nL'activation de cette configuration non officiellement prise en charge implique que tout rapport de bogue peut être fermé étant considéré comme invalide." msgid "Continue" msgstr "Continuer" @@ -897,12 +975,18 @@ msgstr "Continuer" msgid "Cassette: %1" msgstr "Cassette: %1" +msgid "C&assette: %1" +msgstr "C&assette: %1" + msgid "Cassette images" msgstr "Images cassette" msgid "Cartridge %1: %2" msgstr "Cartouche %1: %2" +msgid "Car&tridge %1: %2" +msgstr "Car&touche %1: %2" + msgid "Cartridge images" msgstr "Images cartouche" @@ -924,6 +1008,9 @@ msgstr "Hard reset" msgid "ACPI shutdown" msgstr "Arrêt ACPI" +msgid "ACP&I shutdown" +msgstr "Arrêt ACP&I" + msgid "Hard disk (%1)" msgstr "Disque dur (%1)" @@ -982,7 +1069,7 @@ msgid "Remember to partition and format the newly-created drive." msgstr "N'oubliez pas de partitionner et de formater le nouveau disque créé." msgid "The selected file will be overwritten. Are you sure you want to use it?" -msgstr "Le fichier sélectionné sera écrasé. Etes-vous sûr de vouloir l'utiliser?" +msgstr "Le fichier sélectionné sera écrasé. Etes-vous sûr de vouloir l'utiliser ?" msgid "Unsupported disk image" msgstr "Image disque non prise en charge" @@ -1003,13 +1090,13 @@ msgid "HDX image" msgstr "Image HDX" msgid "Fixed-size VHD" -msgstr "VHD à taille fixe" +msgstr "VHD de taille fixe" msgid "Dynamic-size VHD" -msgstr "VHD à taille dynamique" +msgstr "VHD de taille dynamique" msgid "Differencing VHD" -msgstr "VHD à différenciation" +msgstr "VHD différentiel" msgid "(N/A)" msgstr "(N.D.)" @@ -1024,13 +1111,13 @@ msgid "HDX image (.hdx)" msgstr "Image HDX (.hdx)" msgid "Fixed-size VHD (.vhd)" -msgstr "VHD à taille fixe (.vhd)" +msgstr "VHD de taille fixe (.vhd)" msgid "Dynamic-size VHD (.vhd)" -msgstr "VHD à taille dynamique (.vhd)" +msgstr "VHD de taille dynamique (.vhd)" msgid "Differencing VHD (.vhd)" -msgstr "VHD à différenciation (.vhd)" +msgstr "VHD différentiel (.vhd)" msgid "Large blocks (2 MB)" msgstr "Grands Blocs (2 Mo)" @@ -1045,7 +1132,7 @@ msgid "Select the parent VHD" msgstr "Sélectionnez le VHD parent" msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" -msgstr "Il est possible que l'image parente ai été modifiée après la création de l'image à différenciation.\n\nIl est même possible que les fichiers de l’image ont été déplacés ou copiés ou il existe un bogue dans le programme qui a créé ce disque.\n\nVoulez-vous réparer l'horodatage?" +msgstr "Il est possible que l'image parente ai été modifiée après la création de l'image différentielle.\n\nIl est même possible que les fichiers de l’image ont été déplacés ou copiés ou il existe un bogue dans le programme qui a créé ce disque.\n\nVoulez-vous réparer l'horodatage ?" msgid "Parent and child disk timestamps do not match" msgstr "Les horodatages des disques parents et enfants ne correspondent pas" @@ -1071,6 +1158,9 @@ msgstr "ATAPI" msgid "CD-ROM %1 (%2): %3" msgstr "CD-ROM %1 (%2): %3" +msgid "&CD-ROM %1 (%2): %3" +msgstr "&CD-ROM %1 (%2): %3" + msgid "160 KB" msgstr "160 Ko" @@ -1186,7 +1276,7 @@ msgid "WinBox is no longer supported" msgstr "WinBox n'est plus pris en charge" msgid "Development of the WinBox manager stopped in 2022 due to a lack of maintainers. As we direct our efforts towards making 86Box even better, we have made the decision to no longer support WinBox as a manager.\n\nNo further updates will be provided through WinBox, and you may encounter incorrect behavior should you continue using it with newer versions of 86Box. Any bug reports related to WinBox behavior will be closed as invalid.\n\nGo to 86box.net for a list of other managers you can use." -msgstr "Le développement du gestionnaire WinBox s'est arrêté en 2022 en raison d'un manque de mainteneurs. Comme nous concentrons nos efforts sur l'amélioration de 86Box, nous avons pris la décision de ne plus supporter WinBox en tant que gestionnaire.\n\nAucune mise à jour ne sera fournie par WinBox, et vous pourriez rencontrer des comportements incorrects si vous continuez à l'utiliser avec des versions plus récentes de 86Box. Tous les rapports de bogues relatifs au comportement de WinBox seront classés comme non valides.\n\nAllez sur 86box.net pour une liste d'autres gestionnaires que vous pouvez utiliser." +msgstr "Le développement du gestionnaire WinBox s'est arrêté en 2022 en raison d'un manque de mainteneurs. Comme nous concentrons nos efforts sur l'amélioration de 86Box, nous avons pris la décision de ne plus supporter WinBox en tant que gestionnaire.\n\nAucune mise à jour ne sera fournie par WinBox et vous pourriez rencontrer des comportements incorrects si vous continuez à l'utiliser avec des versions plus récentes de 86Box. Tous les rapports de bogues relatifs au comportement de WinBox seront classés comme non valides.\n\nAllez sur 86box.net pour une liste d'autres gestionnaires que vous pouvez utiliser." msgid "Generate" msgstr "Générer" @@ -1209,41 +1299,41 @@ msgstr "Dispositifs MCA" msgid "List of MCA devices:" msgstr "Liste des dispositifs MCA :" -msgid "Tablet tool" +msgid "&Tablet tool" msgstr "Outil Tablette" msgid "Qt (OpenGL &ES)" msgstr "Qt (OpenGL &ES)" -msgid "About Qt" -msgstr "A propos de Qt" +msgid "About &Qt" +msgstr "A propos de &Qt" -msgid "MCA devices..." +msgid "&MCA devices..." msgstr "Dispositifs MCA..." -msgid "Show non-primary monitors" +msgid "Show non-&primary monitors" msgstr "Afficher les moniteurs non primaires" -msgid "Open screenshots folder..." +msgid "Open screenshots &folder..." msgstr "Ouvrir le dossier des captures d'écran..." -msgid "Apply fullscreen stretch mode when maximized" -msgstr "Appliquer le mode elargi plein écran lorsque l'écran est maximisé" +msgid "Appl&y fullscreen stretch mode when maximized" +msgstr "Appliquer le mode élargi plein écran lorsque la fenêtre est maximisée" -msgid "Cursor/Puck" -msgstr "Curseur/Palette" +msgid "&Cursor/Puck" +msgstr "&Curseur/Palette" -msgid "Pen" -msgstr "Stylo" +msgid "&Pen" +msgstr "&Stylo" msgid "Host CD/DVD Drive (%1:)" -msgstr "Lecteur CD/DVD hôte (%1:)" +msgstr "&Lecteur CD/DVD hôte (%1:)" msgid "&Connected" msgstr "&Connecté" -msgid "Clear image history" -msgstr "Effacer l'historique de l'image" +msgid "Clear image &history" +msgstr "Effacer l'&historique de l'image" msgid "Create..." msgstr "Créer..." @@ -1260,8 +1350,11 @@ msgstr "Pilote NULL" msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" +msgid "&NIC %1 (%2) %3" +msgstr "&NIC %1 (%2) %3" + msgid "Render behavior" -msgstr "Comportement de rendu" +msgstr "Comportement du rendu" msgid "Use target framerate:" msgstr "Utiliser le taux de rafraîchissement cible:" @@ -1297,7 +1390,7 @@ msgid "Error initializing OpenGL" msgstr "Erreur d'initialisation d'OpenGL" msgid "\nFalling back to software rendering." -msgstr "\nSe rabattre sur le rendu logiciel." +msgstr "\nRevenir au rendu logiciel." msgid "

When selecting media images (CD-ROM, floppy, etc.) the open dialog will start in the same directory as the 86Box configuration file. This setting will likely only make a difference on macOS.

" msgstr "

Lors de la sélection d'images multimédia (CD-ROM, disquette, etc.), la boîte de dialogue d'ouverture démarrera dans le même répertoire que le fichier de configuration de 86Box. Ce paramètre ne fera probablement une différence que sur macOS.

" @@ -1354,19 +1447,37 @@ msgid "Novell NetWare 2.x Key Card" msgstr "Carte clé Novell NetWare 2.x" msgid "Serial port passthrough 1" -msgstr "Passage du port série 1" +msgstr "Transfert du port série 1" msgid "Serial port passthrough 2" -msgstr "Passage du port série 2" +msgstr "Transfert du port série 2" msgid "Serial port passthrough 3" -msgstr "Passage du port série 3" +msgstr "Transfert du port série 3" msgid "Serial port passthrough 4" -msgstr "Passage du port série 4" +msgstr "Transfert du port série 4" -msgid "Renderer options..." -msgstr "Options de rendu..." +msgid "Renderer &options..." +msgstr "Options du rendu..." + +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" +msgstr "" msgid "Logitech/Microsoft Bus Mouse" msgstr "Souris bus Logitech/Microsoft" @@ -1377,18 +1488,30 @@ msgstr "Souris bus Microsoft (InPort)" msgid "Mouse Systems Serial Mouse" msgstr "Souris série Mouse Systems" +msgid "Mouse Systems Bus Mouse" +msgstr "" + msgid "Microsoft Serial Mouse" msgstr "Souris série Microsoft" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "Souris série Logitech" msgid "PS/2 Mouse" msgstr "Souris PS/2" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (série)" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] Modem standard conforme à la norme Hayes" @@ -1408,17 +1531,59 @@ msgid "OPL4-ML Daughterboard" msgstr "Carte fille OPL4-ML" msgid "System MIDI" -msgstr "MIDI de système" +msgstr "Système MIDI" msgid "MIDI Input Device" msgstr "Dispositif d'entrée MIDI" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" msgstr "Adresse BIOS" +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" +msgstr "" + msgid "Enable BIOS extension ROM Writes" msgstr "Activer les écritures au ROM d'extension du BIOS" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "Adresse" @@ -1428,11 +1593,23 @@ msgstr "IRQ" msgid "BIOS Revision" msgstr "Révision BIOS" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "Traduire 26 -> 17" msgid "Language" -msgstr "Language" +msgstr "Langage" msgid "Enable backlight" msgstr "Activer le rétro-éclairage" @@ -1443,6 +1620,18 @@ msgstr "Inversion des couleurs" msgid "BIOS size" msgstr "Taille du BIOS" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "Mapper C0000-C7FFF en tant qu'UMB" @@ -1471,7 +1660,7 @@ msgid "MIDI Real time" msgstr "MIDI en temps réel" msgid "MIDI Thru" -msgstr "Passage de la entrée MIDI" +msgstr "Transfert MIDI" msgid "MIDI Clockout" msgstr "Horloge MIDI" @@ -1486,10 +1675,10 @@ msgid "Chorus" msgstr "Chœur" msgid "Chorus Voices" -msgstr "Voix de chœur" +msgstr "Voix du chœur" msgid "Chorus Level" -msgstr "Niveau de chœur" +msgstr "Niveau du chœur" msgid "Chorus Speed" msgstr "Vitesse du chœur" @@ -1518,8 +1707,11 @@ msgstr "Niveau de réverbération" msgid "Interpolation Method" msgstr "Méthode d'interpolation" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" -msgstr "Gain de sortie de réverbération" +msgstr "Gain de sortie réverbération" msgid "Reversed stereo" msgstr "Stéréo inversée" @@ -1555,7 +1747,7 @@ msgid "MAC Address" msgstr "Adresse MAC" msgid "MAC Address OUI" -msgstr "OUI de adresse MAC" +msgstr "Adresse MAC OUI" msgid "Enable BIOS" msgstr "Activer BIOS" @@ -1567,7 +1759,7 @@ msgid "TCP/IP listening port" msgstr "Port d'écoute TCP/IP" msgid "Phonebook File" -msgstr "Fichier de répertoire" +msgstr "Fichier d'annuaire" msgid "Telnet emulation" msgstr "Émulation de Telnet" @@ -1605,6 +1797,12 @@ msgstr "DMA bas" msgid "Enable Game port" msgstr "Activer le port de jeu" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "Module Surround" @@ -1617,6 +1815,9 @@ msgstr "Lever l'interruption CODEC lors de la configuration du CODEC (nécessair msgid "SB Address" msgstr "Adresse SB" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "IRQ WSS" @@ -1645,10 +1846,10 @@ msgid "High DMA" msgstr "DMA haut" msgid "Control PC speaker" -msgstr "Contrôler l'haut-parleur du PC" +msgstr "Contrôler le haut-parleur du PC" msgid "Memory size" -msgstr "Taille de mémoire" +msgstr "Taille mémoire" msgid "EMU8000 Address" msgstr "Adresse EMU8000" @@ -1701,9 +1902,15 @@ msgstr "Type de RAMDAC" msgid "Blend" msgstr "Mélanger" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "Filtrage bilinéaire" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "Tramage" @@ -1714,10 +1921,10 @@ msgid "Voodoo type" msgstr "Type de Voodoo" msgid "Framebuffer memory size" -msgstr "Taille de la mémoire du tampon d'images" +msgstr "Taille mémoire du tampon d'images" msgid "Texture memory size" -msgstr "Taille de la mémoire des textures" +msgstr "Taille mémoire des textures" msgid "Dither subtraction" msgstr "Soustraction de tramage" @@ -1726,7 +1933,7 @@ msgid "Screen Filter" msgstr "Filtre d'écran" msgid "Render threads" -msgstr "Fils de rendu" +msgstr "Tâches du rendu" msgid "SLI" msgstr "SLI" @@ -1746,6 +1953,33 @@ msgstr "Vitesse de transfert" msgid "EMS mode" msgstr "Mode EMS" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "Adresse pour > 2 MB" @@ -1764,11 +1998,11 @@ msgstr "Toujours à la vitesse sélectionnée" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "Paramètres du BIOS + touches de raccourci (désactivées pendant le POST)" -msgid "64 kB starting from F0000" -msgstr "64 ko à partir de F0000" +msgid "64 KB starting from F0000" +msgstr "64 Ko à partir de F0000" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "128 ko à partir de E0000 (adresse MSB inversée, derniers 64KB en premier)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "128 Ko à partir de E0000 (adresse MSB inversée, derniers 64 Ko en premier)" msgid "Sine" msgstr "Sinusoïdale" @@ -1780,10 +2014,10 @@ msgid "Linear" msgstr "Linéaire" msgid "4th Order" -msgstr "Du 4e ordre" +msgstr "4e ordre" msgid "7th Order" -msgstr "Du 7e ordre" +msgstr "7e ordre" msgid "Non-timed (original)" msgstr "Non temporisé (original)" @@ -1804,7 +2038,7 @@ msgid "Five + Wheel" msgstr "Cinq + molette" msgid "Five + 2 Wheels" -msgstr "" +msgstr "Cinq + 2 molettes" msgid "A3 - SMT2 Serial / SMT3(R)V" msgstr "A3 - SMT2 série / SMT3(R)V" @@ -1900,7 +2134,16 @@ msgid "sRGB interpolation" msgstr "Interpolation sRVB" msgid "Linear interpolation" -msgstr "Interpolation linéairee" +msgstr "Interpolation linéaire" + +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" msgid "128 KB" msgstr "128 Ko" @@ -1915,7 +2158,7 @@ msgid "Monochrome (5151/MDA) (amber)" msgstr "Monochrome (5151/MDA) (ambre)" msgid "Color 40x25 (5153/CGA)" -msgstr "Couler 40x25 (5153/CGA)" +msgstr "Couleur 40x25 (5153/CGA)" msgid "Color 80x25 (5153/CGA)" msgstr "Couleur 80x25 (5153/CGA)" @@ -1935,6 +2178,9 @@ msgstr "Ambre" msgid "Gray" msgstr "Gris" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "Couleur" @@ -1950,14 +2196,20 @@ msgstr "Autres langues" msgid "Bochs latest" msgstr "Bochs dernière" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "Monochrome non entrelacé" msgid "Color Interlaced" -msgstr "Couler entrelacé" +msgstr "Couleur entrelacée" msgid "Color Non-Interlaced" -msgstr "Couleur non entrelacé" +msgstr "Couleur non entrelacée" msgid "3Dfx Voodoo Graphics" msgstr "Graphique 3dfx Voodoo" @@ -1990,7 +2242,7 @@ msgid "Stereo LPT DAC" msgstr "Convertisseur numérique stéréo LPT" msgid "Generic Text Printer" -msgstr "Imprimante Texte générique" +msgstr "Imprimante texte générique" msgid "Generic ESC/P Dot-Matrix Printer" msgstr "Imprimante matricielle générique ESC/P" @@ -2008,16 +2260,16 @@ msgid "Protection Dongle for Savage Quest" msgstr "Clé de protection pour Savage Quest" msgid "Serial Passthrough Device" -msgstr "Dispositif de passage du port série" +msgstr "Dispositif de transfert du port série" msgid "Passthrough Mode" -msgstr "Mode de passage" +msgstr "Mode de transfert" msgid "Host Serial Device" -msgstr "Dispositif sériel de l'hôte" +msgstr "Dispositif série de l'hôte" msgid "Name of pipe" -msgstr "Nom du tuyau" +msgstr "Nom du pipeline" msgid "Data bits" msgstr "Bits de données" @@ -2026,13 +2278,16 @@ msgid "Stop bits" msgstr "Bits d'arrêt" msgid "Baud Rate of Passthrough" -msgstr "Taux de bauds du passage" +msgstr "Taux de bauds du transfert" msgid "Named Pipe (Server)" -msgstr "Tuyau nommé (serveur)" +msgstr "Pipeline nommé (serveur)" + +msgid "Named Pipe (Client)" +msgstr "" msgid "Host Serial Passthrough" -msgstr "Passage du port série de l'hôte" +msgstr "Transfert du port série de l'hôte" msgid "E&ject %1" msgstr "É&jecter %1" @@ -2076,14 +2331,20 @@ msgstr "Clone IBM 8514/A (ISA)" msgid "Vendor" msgstr "Fabricant" +msgid "30 Hz (JMP2 = 1)" +msgstr "" + +msgid "60 Hz (JMP2 = 2)" +msgstr "" + msgid "Generic PC/XT Memory Expansion" -msgstr "Extension de mémoire générique PC/XT" +msgstr "Extension mémoire générique PC/XT" msgid "Generic PC/AT Memory Expansion" -msgstr "Extension de mémoire générique PC/AT" +msgstr "Extension mémoire générique PC/AT" msgid "Unable to find Dot-Matrix fonts" -msgstr "Impossible de trouver les polices matricielles" +msgstr "Impossible de trouver les polices matricielles." msgid "TrueType fonts in the \"roms/printer/fonts\" directory are required for the emulation of the Generic ESC/P Dot-Matrix Printer." msgstr "Les polices TrueType dans le répertoire \"roms/printer/fonts\" sont nécessaires à l'émulation de l'imprimante générique ESC/P matricielle." @@ -2104,7 +2365,7 @@ msgid "Options" msgstr "Options" msgid "Model" -msgstr "Modèle" +msgstr "" msgid "Model:" msgstr "Modèle:" @@ -2116,10 +2377,10 @@ msgid "GLSL Error" msgstr "Erreur GLSL" msgid "Could not load shader: %1" -msgstr "Impossible de charger le shaker %1" +msgstr "Impossible de charger le shader %1" msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2" -msgstr "OpenGL version 3.0 ou supérieur requis. Version installée: %1.%2" +msgstr "OpenGL version 3.0 ou supérieure requis. Version installée: %1.%2" msgid "Could not load texture: %1" msgstr "Impossible de charger la texture %1" @@ -2147,3 +2408,72 @@ msgstr "Descendre" msgid "Could not load file %1" msgstr "Impossible de charger le fichier %1" + +msgid "Key Bindings:" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" + +#~ msgid "HD Controller:" +#~ msgstr "Contrôleur HD:" + +#~ msgid "ZIP drives:" +#~ msgstr "Lecteurs ZIP:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "Images ZIP" diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po index 0330cd59a..c42d9f003 100644 --- a/src/qt/languages/hr-HR.po +++ b/src/qt/languages/hr-HR.po @@ -27,8 +27,11 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Pauza" -msgid "E&xit..." -msgstr "Iz&laz..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" +msgstr "Iz&laz" msgid "&View" msgstr "&Pogled" @@ -60,7 +63,7 @@ msgstr "Open&GL (3.0 jezgra)" msgid "&VNC" msgstr "&VNC" -msgid "Specify dimensions..." +msgid "Specify &dimensions..." msgstr "Odrediti veličinu..." msgid "F&orce 4:3 display ratio" @@ -99,7 +102,7 @@ msgstr "&7x" msgid "&8x" msgstr "&8x" -msgid "Filter method" +msgid "Fi<er method" msgstr "Metoda filtriranja" msgid "&Nearest" @@ -144,9 +147,15 @@ msgstr "&Tip zaslona VGA" msgid "RGB &Color" msgstr "RGB u &boji" +msgid "RGB (no brown)" +msgstr "" + msgid "&RGB Grayscale" msgstr "&RGB u nijansama sive boje" +msgid "Generic RGBI color monitor" +msgstr "" + msgid "&Amber monitor" msgstr "&Jantarni zaslon" @@ -384,6 +393,15 @@ msgstr "Uključeno (UTC)" msgid "Dynamic Recompiler" msgstr "Dinamički rekompilator" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "Video:" @@ -399,6 +417,9 @@ msgstr "IBM 8514/A grafika" msgid "XGA Graphics" msgstr "XGA grafika" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "Miš:" @@ -498,18 +519,21 @@ msgstr "Paralelna vrata 3" msgid "Parallel port 4" msgstr "Paralelna vrata 4" -msgid "HD Controller:" -msgstr "Kontroler tvrdog diska:" - msgid "FD Controller:" msgstr "Kontroler diskete:" +msgid "CD-ROM Controller:" +msgstr "" + msgid "Tertiary IDE Controller" msgstr "Tercijarni IDE kontroler" msgid "Quaternary IDE Controller" msgstr "Kvaternarni IDE kontroler" +msgid "Hard disk" +msgstr "" + msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "Audio kaseta" msgid "Hard disks:" msgstr "Tvrdi diskovi:" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "&Novi..." @@ -588,8 +615,8 @@ msgstr "CD-ROM pogoni:" msgid "MO drives:" msgstr "MO pogoni:" -msgid "ZIP drives:" -msgstr "ZIP pogoni:" +msgid "Removable disk drives:" +msgstr "" msgid "ZIP 250" msgstr "ZIP 250" @@ -600,6 +627,9 @@ msgstr "Sat stvarnog vremena (RTC):" msgid "ISA Memory Expansion" msgstr "Proširenje memorije ISA" +msgid "ISA ROM Cards" +msgstr "" + msgid "Card 1:" msgstr "Kartica 1:" @@ -612,6 +642,15 @@ msgstr "Kartica 3:" msgid "Card 4:" msgstr "Kartica 4:" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "Uređaj ISABugger" @@ -633,11 +672,17 @@ msgstr " - ZASTAO" msgid "Speed" msgstr "Brzina" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "" -msgid "ZIP images" -msgstr "ZIP slike" +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" +msgstr "" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box nije mogao pronaći upotrebljive ROM datoteke.\n\nMolimte posjetite sknite paket s ROM datotekama i ekstrahirajte paket u mapu \"roms\"." @@ -765,7 +810,7 @@ msgstr "Palica za igru s 2 osi, 6 tipke" msgid "2-axis, 8-button joystick" msgstr "Palica za igru s 2 osi, 8 tipke" -msgid "3-axis, 2-button joystick(s)" +msgid "3-axis, 2-button joystick" msgstr "Palica za igru s 3 osi, 2 tipke" msgid "3-axis, 4-button joystick" @@ -777,12 +822,39 @@ msgstr "Palica za igru s 4 osi, 4 tipke" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" msgid "Thrustmaster Flight Control System" msgstr "Thrustmaster Flight Control System" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "Bez" @@ -792,6 +864,9 @@ msgstr "%1 MB (CHS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "Disketa %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "&Disketa %1 (%2): %3" + msgid "Advanced sector images" msgstr "Napredne sektorske slike" @@ -813,6 +888,9 @@ msgstr "Nije moguće inicijalizirati GhostPCL" msgid "MO %1 (%2): %3" msgstr "MO %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "&MO %1 (%2): %3" + msgid "MO images" msgstr "MO slike" @@ -897,12 +975,18 @@ msgstr "Nastavi" msgid "Cassette: %1" msgstr "Audio kaseta: %1" +msgid "C&assette: %1" +msgstr "&Audio kaseta: %1" + msgid "Cassette images" msgstr "Slike audio kasete" msgid "Cartridge %1: %2" msgstr "Kaseta %1: %2" +msgid "Car&tridge %1: %2" +msgstr "&Kaseta %1: %2" + msgid "Cartridge images" msgstr "Slike kasete" @@ -924,6 +1008,9 @@ msgstr "Ponovno pokretanje" msgid "ACPI shutdown" msgstr "ACPI bazirano gašenje" +msgid "ACP&I shutdown" +msgstr "ACP&I bazirano gašenje" + msgid "Hard disk (%1)" msgstr "Tvrdi disk (%1)" @@ -1071,6 +1158,9 @@ msgstr "ATAPI" msgid "CD-ROM %1 (%2): %3" msgstr "CD-ROM %1 (%2): %3" +msgid "&CD-ROM %1 (%2): %3" +msgstr "&CD-ROM %1 (%2): %3" + msgid "160 KB" msgstr "160 KB" @@ -1209,41 +1299,41 @@ msgstr "Uređaji MCA" msgid "List of MCA devices:" msgstr "Spisak uređaja MCA:" -msgid "Tablet tool" +msgid "&Tablet tool" msgstr "Alat za tablet" msgid "Qt (OpenGL &ES)" msgstr "Qt (OpenGL &ES)" -msgid "About Qt" -msgstr "O programu Qt" +msgid "About &Qt" +msgstr "O programu &Qt" -msgid "MCA devices..." +msgid "&MCA devices..." msgstr "Uređaji MCA ..." -msgid "Show non-primary monitors" +msgid "Show non-&primary monitors" msgstr "Prikaži neprimarne monitore" -msgid "Open screenshots folder..." +msgid "Open screenshots &folder..." msgstr "Otvori mapu snimaka zaslona..." -msgid "Apply fullscreen stretch mode when maximized" +msgid "Appl&y fullscreen stretch mode when maximized" msgstr "Primijeni način cijelozaslonskog rastezanja u maksimiziranom načinu" -msgid "Cursor/Puck" -msgstr "Kursor/Pak" +msgid "&Cursor/Puck" +msgstr "&Kursor/Pak" -msgid "Pen" -msgstr "Olovka" +msgid "&Pen" +msgstr "&Olovka" -msgid "Host CD/DVD Drive (%1:)" -msgstr "CD/DVD pogon nositelja (%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "CD/DVD pogon &nositelja (%1:)" msgid "&Connected" msgstr "&Povezan" -msgid "Clear image history" -msgstr "Očisti povijest slika" +msgid "Clear image &history" +msgstr "Očisti &povijest slika" msgid "Create..." msgstr "Stvori..." @@ -1260,6 +1350,9 @@ msgstr "Nulti upravljački program" msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" +msgid "&NIC %1 (%2) %3" +msgstr "&NIC %1 (%2) %3" + msgid "Render behavior" msgstr "Ponašanje rendera" @@ -1365,9 +1458,27 @@ msgstr "Prolaz serijskih vrata 3" msgid "Serial port passthrough 4" msgstr "Prolaz serijskih vrata 4" -msgid "Renderer options..." +msgid "Renderer &options..." msgstr "Opcije rendera..." +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" +msgstr "" + msgid "Logitech/Microsoft Bus Mouse" msgstr "Sabirnički miš Logitech/Microsoft" @@ -1377,18 +1488,30 @@ msgstr "Sabirnički miš Microsoft (InPort)" msgid "Mouse Systems Serial Mouse" msgstr "Serijski miš Mouse Systems" +msgid "Mouse Systems Bus Mouse" +msgstr "" + msgid "Microsoft Serial Mouse" msgstr "Serijski miš Microsoft" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "Serijski miš Logitech" msgid "PS/2 Mouse" msgstr "Miš PS/2" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (serijski)" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] Standardni modem, usklađen s standardom Hayesom" @@ -1413,12 +1536,54 @@ msgstr "Sistemski MIDI" msgid "MIDI Input Device" msgstr "Ulazni uređaj MIDI" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" msgstr "Adresa BIOS-a" +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" +msgstr "" + msgid "Enable BIOS extension ROM Writes" msgstr "Omogući pisanje u ROM proširenja BIOS-a" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "Adresa" @@ -1428,6 +1593,18 @@ msgstr "IRQ" msgid "BIOS Revision" msgstr "Revizija BIOS-a" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "Prevedi 26 -> 17" @@ -1443,6 +1620,18 @@ msgstr "Invertiraj boje" msgid "BIOS size" msgstr "Veličina BIOS-a" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "Mapiraj C0000-C7FFF kao UMB" @@ -1518,6 +1707,9 @@ msgstr "Nivo odjeka" msgid "Interpolation Method" msgstr "Metoda interpolacije" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" msgstr "Pojačavanje izlaza odjeka" @@ -1605,6 +1797,12 @@ msgstr "Niski DMA" msgid "Enable Game port" msgstr "Omogoći vrata za igru" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "Modul Surround" @@ -1617,6 +1815,9 @@ msgstr "Podigni prekid CODEC na postavljanju CODEC-a (potrebno nekim upravljačk msgid "SB Address" msgstr "Adresa SB-a" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "IRQ WSS-a" @@ -1701,9 +1902,15 @@ msgstr "Vrsta RAMDAC-a" msgid "Blend" msgstr "Miješaj" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "Bilinearno filtriranje" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "Podrhtavanje" @@ -1746,6 +1953,33 @@ msgstr "Brzina prijenosa" msgid "EMS mode" msgstr "Načina EMS" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "Adresa za > 2 MB" @@ -1764,11 +1998,11 @@ msgstr "Uvijek na odabranoj brzini" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "Konfiguracija BIOS-a + Tipkovni prečaci (onemogućeni tekom POST-a)" -msgid "64 kB starting from F0000" -msgstr "64 kB od F0000" +msgid "64 KB starting from F0000" +msgstr "64 KB od F0000" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "128 kB od E0000 (MSB adrese invertiran, poslednjih 64KB prvo)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "128 KB od E0000 (MSB adrese invertiran, poslednjih 64 KB prvo)" msgid "Sine" msgstr "Sinusni" @@ -1902,6 +2136,15 @@ msgstr "Interpolacija sRGB" msgid "Linear interpolation" msgstr "Linearna interpolacija" +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" + msgid "128 KB" msgstr "128 KB" @@ -1935,6 +2178,9 @@ msgstr "Jantarna" msgid "Gray" msgstr "Siva" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "Bojna" @@ -1950,6 +2196,12 @@ msgstr "Ostali jezici" msgid "Bochs latest" msgstr "Bochs poslednji" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "Crno-biljeli bez preplitanja" @@ -2031,6 +2283,9 @@ msgstr "Baudova brzina prolaza" msgid "Named Pipe (Server)" msgstr "Imenovani vod (server)" +msgid "Named Pipe (Client)" +msgstr "" + msgid "Host Serial Passthrough" msgstr "Prolaz serijskih vrata nositelja" @@ -2076,6 +2331,12 @@ msgstr "Klon IBM 8514/A (ISA)" msgid "Vendor" msgstr "Proizvođać" +msgid "30 Hz (JMP2 = 1)" +msgstr "" + +msgid "60 Hz (JMP2 = 2)" +msgstr "" + msgid "Generic PC/XT Memory Expansion" msgstr "Generičko proširenje memorije PC/XT" @@ -2147,3 +2408,72 @@ msgstr "" msgid "Could not load file %1" msgstr "" + +msgid "Key Bindings:" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" + +#~ msgid "HD Controller:" +#~ msgstr "Kontroler tvrdog diska:" + +#~ msgid "ZIP drives:" +#~ msgstr "ZIP pogoni:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "ZIP slike" diff --git a/src/qt/languages/hu-HU.po b/src/qt/languages/hu-HU.po index 981edad71..df7b9f6bd 100644 --- a/src/qt/languages/hu-HU.po +++ b/src/qt/languages/hu-HU.po @@ -27,8 +27,11 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Szüneteltetés" -msgid "E&xit..." -msgstr "&Kilépés..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" +msgstr "&Kilépés" msgid "&View" msgstr "&Nézet" @@ -60,7 +63,7 @@ msgstr "Open&GL (3.0 Core)" msgid "&VNC" msgstr "&VNC" -msgid "Specify dimensions..." +msgid "Specify &dimensions..." msgstr "Méretek kézi megadása..." msgid "F&orce 4:3 display ratio" @@ -99,7 +102,7 @@ msgstr "&7x" msgid "&8x" msgstr "&8x" -msgid "Filter method" +msgid "Fi<er method" msgstr "Szűrési mód" msgid "&Nearest" @@ -144,9 +147,15 @@ msgstr "VGA képernyő &típusa" msgid "RGB &Color" msgstr "RGB &színes" +msgid "RGB (no brown)" +msgstr "" + msgid "&RGB Grayscale" msgstr "&RGB szürkeárnyalatos" +msgid "Generic RGBI color monitor" +msgstr "" + msgid "&Amber monitor" msgstr "&Gyömbér kijelző" @@ -384,6 +393,15 @@ msgstr "Engedélyezve (UTC)" msgid "Dynamic Recompiler" msgstr "Dinamikus újrafordítás" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "Videokártya:" @@ -399,6 +417,9 @@ msgstr "IBM 8514/A-gyorsítókártya" msgid "XGA Graphics" msgstr "XGA-gyorsítókártya" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "Egér:" @@ -498,18 +519,21 @@ msgstr "Párhuzamos port 3" msgid "Parallel port 4" msgstr "Párhuzamos port 4" -msgid "HD Controller:" -msgstr "Merevl.-vezérlő:" - msgid "FD Controller:" msgstr "Floppy-vezérlő:" +msgid "CD-ROM Controller:" +msgstr "" + msgid "Tertiary IDE Controller" msgstr "Harmadlagos IDE-vezérlő" msgid "Quaternary IDE Controller" msgstr "Negyedleges IDE-vezérlő" +msgid "Hard disk" +msgstr "" + msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "Magnókazetta" msgid "Hard disks:" msgstr "Merevlemezek:" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "&Új..." @@ -588,8 +615,8 @@ msgstr "CD-ROM meghajtók:" msgid "MO drives:" msgstr "MO-meghajtók:" -msgid "ZIP drives:" -msgstr "ZIP-meghajtók:" +msgid "Removable disk drives:" +msgstr "" msgid "ZIP 250" msgstr "ZIP 250" @@ -600,6 +627,9 @@ msgstr "ISA RTC (óra):" msgid "ISA Memory Expansion" msgstr "ISA memóriabővítők" +msgid "ISA ROM Cards" +msgstr "" + msgid "Card 1:" msgstr "Kártya 1:" @@ -612,6 +642,15 @@ msgstr "Kártya 3:" msgid "Card 4:" msgstr "Kártya 4:" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "ISABugger eszköz" @@ -633,11 +672,17 @@ msgstr " - SZÜNETELT" msgid "Speed" msgstr "Sebesség" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "" -msgid "ZIP images" -msgstr "ZIP-lemezképek" +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" +msgstr "" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "A 86Box nem talált használható ROM-képeket\n\nKérem töltse le a ROM készletet és bontsa ki a \"roms\" könyvtárba." @@ -765,8 +810,8 @@ msgstr "2-tengelyes, 6-gombos játékvezérlő" msgid "2-axis, 8-button joystick" msgstr "2-tengelyes, 8-gombos játékvezérlő" -msgid "3-axis, 2-button joystick(s)" -msgstr "3-tengelyes, 2-gombos játékvezérlő(k)" +msgid "3-axis, 2-button joystick" +msgstr "3-tengelyes, 2-gombos játékvezérlő" msgid "3-axis, 4-button joystick" msgstr "3-tengelyes, 4-gombos játékvezérlő" @@ -777,12 +822,39 @@ msgstr "4-tengelyes, 4-gombos játékvezérlő" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" msgid "Thrustmaster Flight Control System" msgstr "Thrustmaster Flight Control System" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "Nincs" @@ -792,6 +864,9 @@ msgstr "%1 MB (CHS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "Floppy %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "&Floppy %1 (%2): %3" + msgid "Advanced sector images" msgstr "Továbbfejlesztett szektor képek" @@ -813,6 +888,9 @@ msgstr "Nem sikerült inicializálni a GhostPCL-et" msgid "MO %1 (%2): %3" msgstr "MO %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "&MO %1 (%2): %3" + msgid "MO images" msgstr "MO-képfájlok" @@ -858,7 +936,7 @@ msgstr "Érvénytelen konfiguráció" msgid "%1 is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." msgstr "%1 szükséges a PostScript fájlok PDF formátumba való automatikus konvertálásához.\n\nAz általános PostScript nyomtatóra küldött dokumentumok PostScript (.ps) fájlként kerülnek mentésre." -msgid "%1 is required for automatic conversion of PCL files to PDF.\n\nAny documents sent to the generic PCL printer will be saved as Printer Command Lnaugage (.pcl) files." +msgid "%1 is required for automatic conversion of PCL files to PDF.\n\nAny documents sent to the generic PCL printer will be saved as Printer Command Language (.pcl) files." msgstr "%1 szükséges a PCL fájlok PDF formátumba való automatikus konvertálásához.\n\nAz általános PCL nyomtatóra küldött dokumentumok Printer Command Language (.pcl) fájlként kerülnek mentésre." msgid "Don't show this message again" @@ -897,6 +975,9 @@ msgstr "Folytatás" msgid "Cassette: %1" msgstr "Magnókazetta: %1" +msgid "C&assette: %1" +msgstr "M&agnókazetta: %1" + msgid "Cassette images" msgstr "Magnókazetta-képek" @@ -924,6 +1005,9 @@ msgstr "Hardveres újraindítás" msgid "ACPI shutdown" msgstr "ACPI leállítás" +msgid "ACP&I shutdown" +msgstr "ACP&I leállítás" + msgid "Hard disk (%1)" msgstr "Merevlemez (%1)" @@ -1071,6 +1155,9 @@ msgstr "ATAPI" msgid "CD-ROM %1 (%2): %3" msgstr "CD-ROM %1 (%2): %3" +msgid "&CD-ROM %1 (%2): %3" +msgstr "&CD-ROM %1 (%2): %3" + msgid "160 KB" msgstr "160 KB" @@ -1209,41 +1296,41 @@ msgstr "MCA eszközök" msgid "List of MCA devices:" msgstr "Az MCA-eszközök listája:" -msgid "Tablet tool" +msgid "&Tablet tool" msgstr "Tablet eszköz" msgid "Qt (OpenGL &ES)" msgstr "Qt (OpenGL &ES)" -msgid "About Qt" -msgstr "A Qt-ről" +msgid "About &Qt" +msgstr "A &Qt-ről" -msgid "MCA devices..." +msgid "&MCA devices..." msgstr "MCA eszközök..." -msgid "Show non-primary monitors" +msgid "Show non-&primary monitors" msgstr "Nem elsődleges monitorok megjelenítése" -msgid "Open screenshots folder..." +msgid "Open screenshots &folder..." msgstr "Nyissa meg a képernyőképek mappát..." -msgid "Apply fullscreen stretch mode when maximized" +msgid "Appl&y fullscreen stretch mode when maximized" msgstr "Teljes képernyős méretezés alkalmazása maximalizáláskor" -msgid "Cursor/Puck" -msgstr "Cursor/Puck" +msgid "&Cursor/Puck" +msgstr "&Cursor/Puck" -msgid "Pen" -msgstr "Toll" +msgid "&Pen" +msgstr "&Toll" -msgid "Host CD/DVD Drive (%1:)" -msgstr "Gazdag CD/DVD-meghajtó (%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "&Gazdag CD/DVD-meghajtó (%1:)" msgid "&Connected" msgstr "" -msgid "Clear image history" -msgstr "Törölje a kép előzményeit" +msgid "Clear image &history" +msgstr "Törölje a kép &előzményeit" msgid "Create..." msgstr "Hozzon létre..." @@ -1260,6 +1347,9 @@ msgstr "Null Driver" msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" +msgid "&NIC %1 (%2) %3" +msgstr "&NIC %1 (%2) %3" + msgid "Render behavior" msgstr "Renderelési viselkedés" @@ -1365,9 +1455,27 @@ msgstr "Soros port áthaladás 3" msgid "Serial port passthrough 4" msgstr "Soros port áthaladás 4" -msgid "Renderer options..." +msgid "Renderer &options..." msgstr "Renderer opciók..." +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" +msgstr "" + msgid "Logitech/Microsoft Bus Mouse" msgstr "Logitech/Microsoft busz egér" @@ -1377,18 +1485,30 @@ msgstr "Microsoft buszos egér (InPort)" msgid "Mouse Systems Serial Mouse" msgstr "Egérrendszerek Soros egér" +msgid "Mouse Systems Bus Mouse" +msgstr "" + msgid "Microsoft Serial Mouse" msgstr "Microsoft soros egér" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "Logitech soros egér" msgid "PS/2 Mouse" msgstr "PS/2 egér" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (soros)" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] Szabványos Hayes-kompatibilis modem" @@ -1413,12 +1533,54 @@ msgstr "Rendszer MIDI" msgid "MIDI Input Device" msgstr "MIDI bemeneti eszköz" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" msgstr "BIOS cím" +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" +msgstr "" + msgid "Enable BIOS extension ROM Writes" msgstr "BIOS bővítés ROM írások engedélyezése" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "Cím:" @@ -1428,6 +1590,18 @@ msgstr "IRQ" msgid "BIOS Revision" msgstr "BIOS felülvizsgálata" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "Fordítsd le 26 -> 17" @@ -1443,6 +1617,18 @@ msgstr "Invertált színek" msgid "BIOS size" msgstr "BIOS mérete" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "C0000-C7FFF mint UMB leképezése" @@ -1518,6 +1704,9 @@ msgstr "Visszhang szint" msgid "Interpolation Method" msgstr "Interpolációs módszer" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" msgstr "Visszhang kimenetének erősítése" @@ -1605,6 +1794,12 @@ msgstr "Alacsony DMA" msgid "Enable Game port" msgstr "Játékport engedélyezése" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "Surround modul" @@ -1617,6 +1812,9 @@ msgstr "CODEC megszakítás felemelése CODEC beállításakor (néhány illeszt msgid "SB Address" msgstr "SB cím" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "WSS IRQ" @@ -1701,9 +1899,15 @@ msgstr "RAMDAC típus" msgid "Blend" msgstr "Blend" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "Bilineáris szűrés" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "Dithering" @@ -1746,6 +1950,33 @@ msgstr "Átviteli sebesség" msgid "EMS mode" msgstr "EMS üzemmód" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "Cím > 2 MB" @@ -1764,11 +1995,11 @@ msgstr "Mindig a kiválasztott sebességen" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "BIOS beállítás + gyorsbillentyűk (kikapcsolva POST alatt)" -msgid "64 kB starting from F0000" -msgstr "64 kB F0000-től kezdődően" +msgid "64 KB starting from F0000" +msgstr "64 KB F0000-től kezdődően" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "128 kB E0000-től kezdődően (cím MSB invertálva, először az utolsó 64KB)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "128 KB E0000-től kezdődően (cím MSB invertálva, először az utolsó 64 KB)" msgid "Sine" msgstr "Szinuszos" @@ -1902,6 +2133,15 @@ msgstr "sRGB interpoláció" msgid "Linear interpolation" msgstr "Lineáris interpoláció" +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" + msgid "128 KB" msgstr "128 KB" @@ -1935,6 +2175,9 @@ msgstr "Sárga" msgid "Gray" msgstr "Szürke" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "Színes" @@ -1950,6 +2193,12 @@ msgstr "Egyéb nyelvek" msgid "Bochs latest" msgstr "Bochs legújabb" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "Monokróm nem átlapolt" @@ -2031,6 +2280,9 @@ msgstr "Az átmenő átviteli sebesség Baud-rátája" msgid "Named Pipe (Server)" msgstr "Megnevezett cső (kiszolgáló)" +msgid "Named Pipe (Client)" +msgstr "" + msgid "Host Serial Passthrough" msgstr "Az állomás soros portjának áthaladása" @@ -2076,6 +2328,12 @@ msgstr "IBM 8514/A klón (ISA)" msgid "Vendor" msgstr "Gyártó" +msgid "30 Hz (JMP2 = 1)" +msgstr "" + +msgid "60 Hz (JMP2 = 2)" +msgstr "" + msgid "Generic PC/XT Memory Expansion" msgstr "Általános PC/XT memóriabővítők" @@ -2147,3 +2405,73 @@ msgstr "" msgid "Could not load file %1" msgstr "" + +msgid "Key Bindings:" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" + +#~ msgid "HD Controller:" +#~ msgstr "Merevl.-vezérlő:" + +#~ msgid "ZIP drives:" +#~ msgstr "ZIP-meghajtók:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "ZIP-lemezképek" + diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po index 877032c85..f53e53de4 100644 --- a/src/qt/languages/it-IT.po +++ b/src/qt/languages/it-IT.po @@ -27,8 +27,11 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Pausa" -msgid "E&xit..." -msgstr "E&sci..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" +msgstr "E&sci" msgid "&View" msgstr "&Visualizza" @@ -60,7 +63,7 @@ msgstr "Open&GL (3.0 Core)" msgid "&VNC" msgstr "&VNC" -msgid "Specify dimensions..." +msgid "Specify &dimensions..." msgstr "Specifica dimensioni..." msgid "F&orce 4:3 display ratio" @@ -99,7 +102,7 @@ msgstr "&7x" msgid "&8x" msgstr "&8x" -msgid "Filter method" +msgid "Fi<er method" msgstr "Metodo filtro" msgid "&Nearest" @@ -144,9 +147,15 @@ msgstr "Schermi VGA &" msgid "RGB &Color" msgstr "RGB &Color" +msgid "RGB (no brown)" +msgstr "" + msgid "&RGB Grayscale" msgstr "&RGB Monocroma" +msgid "Generic RGBI color monitor" +msgstr "" + msgid "&Amber monitor" msgstr "&Monitor ambra" @@ -384,6 +393,15 @@ msgstr "Abilitata (UTC)" msgid "Dynamic Recompiler" msgstr "Ricompilatore dinamico" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "Video:" @@ -399,6 +417,9 @@ msgstr "Grafica IBM 8514/A" msgid "XGA Graphics" msgstr "Grafica XGA" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "Mouse:" @@ -498,18 +519,21 @@ msgstr "Porta parallela 3" msgid "Parallel port 4" msgstr "Porta parallela 4" -msgid "HD Controller:" -msgstr "Controller HD:" - msgid "FD Controller:" msgstr "Controller FD:" +msgid "CD-ROM Controller:" +msgstr "" + msgid "Tertiary IDE Controller" msgstr "Controller IDE terziario" msgid "Quaternary IDE Controller" msgstr "Controller IDE quaternario" +msgid "Hard disk" +msgstr "" + msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "Cassetta" msgid "Hard disks:" msgstr "Hard disk:" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "&Nuovo..." @@ -588,8 +615,8 @@ msgstr "Unità CD-ROM:" msgid "MO drives:" msgstr "Unità magneto-ottiche:" -msgid "ZIP drives:" -msgstr "Unità ZIP:" +msgid "Removable disk drives:" +msgstr "" msgid "ZIP 250" msgstr "ZIP 250" @@ -600,6 +627,9 @@ msgstr "RTC ISA:" msgid "ISA Memory Expansion" msgstr "Espansione memoria ISA" +msgid "ISA ROM Cards" +msgstr "" + msgid "Card 1:" msgstr "Scheda 1:" @@ -612,6 +642,15 @@ msgstr "Scheda 3:" msgid "Card 4:" msgstr "Scheda 4:" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "Dispositivo ISABugger" @@ -633,11 +672,17 @@ msgstr " - IN PAUSA" msgid "Speed" msgstr "Velocità" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "" -msgid "ZIP images" -msgstr "Immagini ZIP" +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" +msgstr "" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box non può trovare immagini ROM utilizzabili.\n\nSi prega di scaricare un set di ROM ed estrarlo nella directory \"roms\"." @@ -777,12 +822,39 @@ msgstr "Joystick da 4 assi, 4 pulsanti" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" msgid "Thrustmaster Flight Control System" msgstr "Thrustmaster Flight Control System" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "Nessuno" @@ -792,6 +864,9 @@ msgstr "%1 MB (CHS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "Floppy %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "&Floppy %1 (%2): %3" + msgid "Advanced sector images" msgstr "Immagini da settori avanzati" @@ -813,6 +888,9 @@ msgstr "Impossibile inizializzare GhostPCL" msgid "MO %1 (%2): %3" msgstr "MO %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "&MO %1 (%2): %3" + msgid "MO images" msgstr "Immagini MO" @@ -858,8 +936,8 @@ msgstr "Configurazione invalida" msgid "%1 is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." msgstr "%1 è richiesto per la conversione automatica di file PostScript a file PDF.\n\nQualsiasi documento mandato alla stampante generica PostScript sarà salvato come file PostScript (.ps)." -msgid "%1 is required for automatic conversion of PCL files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as Printer Command Language (.pcl) files." -msgstr "%1 è richiesto per la conversione automatica di file PCL a file PDF.\n\nQualsiasi documento mandato alla stampante generica PCL sarà salvato come file Printer Command Language (.cl)." +msgid "%1 is required for automatic conversion of PCL files to PDF.\n\nAny documents sent to the generic PCL printer will be saved as Printer Command Language (.pcl) files." +msgstr "%1 è richiesto per la conversione automatica di file PCL a file PDF.\n\nQualsiasi documento mandato alla stampante generica PCL sarà salvato come file Printer Command Language (.pcl)." msgid "Don't show this message again" msgstr "Non mostrare più questo messaggio" @@ -897,12 +975,18 @@ msgstr "Continua" msgid "Cassette: %1" msgstr "Cassetta: %1" +msgid "C&assette: %1" +msgstr "C&assetta: %1" + msgid "Cassette images" msgstr "Immagini cassetta" msgid "Cartridge %1: %2" msgstr "Cartuccia %1: %2" +msgid "Car&tridge %1: %2" +msgstr "Car&tuccia %1: %2" + msgid "Cartridge images" msgstr "Immagini cartuccia" @@ -924,6 +1008,9 @@ msgstr "Riavvia" msgid "ACPI shutdown" msgstr "Arresto ACPI" +msgid "ACP&I shutdown" +msgstr "Arresto ACP&I" + msgid "Hard disk (%1)" msgstr "Hard disk (%1)" @@ -1071,6 +1158,9 @@ msgstr "ATAPI" msgid "CD-ROM %1 (%2): %3" msgstr "CD-ROM %1 (%2): %3" +msgid "&CD-ROM %1 (%2): %3" +msgstr "&CD-ROM %1 (%2): %3" + msgid "160 KB" msgstr "160 KB" @@ -1209,41 +1299,41 @@ msgstr "Dispositivi MCA" msgid "List of MCA devices:" msgstr "Elenco dei dispositivi MCA:" -msgid "Tablet tool" +msgid "&Tablet tool" msgstr "Strumento tablet" msgid "Qt (OpenGL &ES)" msgstr "Qt (OpenGL &ES)" -msgid "About Qt" -msgstr "Informazioni su Qt" +msgid "About &Qt" +msgstr "Informazioni su &Qt" -msgid "MCA devices..." +msgid "&MCA devices..." msgstr "Dispositivi MCA..." -msgid "Show non-primary monitors" +msgid "Show non-&primary monitors" msgstr "Mostra i monitor non primari" -msgid "Open screenshots folder..." +msgid "Open screenshots &folder..." msgstr "Aprire la cartella screenshot..." -msgid "Apply fullscreen stretch mode when maximized" +msgid "Appl&y fullscreen stretch mode when maximized" msgstr "Applica la modalità adattamento schermo intero in modalità massimizzata" -msgid "Cursor/Puck" -msgstr "Cursore/Puck" +msgid "&Cursor/Puck" +msgstr "&Cursore/Puck" -msgid "Pen" -msgstr "Penna" +msgid "&Pen" +msgstr "&Penna" -msgid "Host CD/DVD Drive (%1:)" -msgstr "Unità CD/DVD host (%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "&Unità CD/DVD host (%1:)" msgid "&Connected" msgstr "&Connesso" -msgid "Clear image history" -msgstr "Cancella la cronologia delle immagini" +msgid "Clear image &history" +msgstr "Cancella la cr&onologia delle immagini" msgid "Create..." msgstr "Creare..." @@ -1260,6 +1350,9 @@ msgstr "Driver nullo" msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" +msgid "&NIC %1 (%2) %3" +msgstr "&NIC %1 (%2) %3" + msgid "Render behavior" msgstr "Comportamento di rendering" @@ -1365,9 +1458,27 @@ msgstr "Passaggio della porta seriale 3" msgid "Serial port passthrough 4" msgstr "Passaggio della porta seriale 4" -msgid "Renderer options..." +msgid "Renderer &options..." msgstr "Opzioni del renderer..." +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" +msgstr "" + msgid "Logitech/Microsoft Bus Mouse" msgstr "Mouse bus Logitech/Microsoft" @@ -1377,18 +1488,30 @@ msgstr "Mouse bus Microsoft (InPort)" msgid "Mouse Systems Serial Mouse" msgstr "Mouse seriale Mouse Systems" +msgid "Mouse Systems Bus Mouse" +msgstr "" + msgid "Microsoft Serial Mouse" msgstr "Mouse seriale Microsoft" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "Mouse seriale Logitech" msgid "PS/2 Mouse" msgstr "Mouse PS/2" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (seriale)" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] Modem standard conforme a Hayes" @@ -1413,12 +1536,54 @@ msgstr "MIDI di sistema" msgid "MIDI Input Device" msgstr "Dispositivo di ingresso MIDI" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" msgstr "Indirizzo BIOS" +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" +msgstr "" + msgid "Enable BIOS extension ROM Writes" msgstr "Abilita scrittura al ROM dell'estensione del BIOS" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "Indirizzo" @@ -1428,6 +1593,18 @@ msgstr "IRQ" msgid "BIOS Revision" msgstr "Revisione del BIOS" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "Tradurre 26 -> 17" @@ -1443,6 +1620,18 @@ msgstr "Invertire i colori" msgid "BIOS size" msgstr "Dimensione del BIOS" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "Mappa C0000-C7FFF come UMB" @@ -1518,6 +1707,9 @@ msgstr "Livello di riverbero" msgid "Interpolation Method" msgstr "Metodo di interpolazione" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" msgstr "Guadagno dell'uscita del riverbero" @@ -1605,6 +1797,12 @@ msgstr "DMA basso" msgid "Enable Game port" msgstr "Abilita la porta giochi" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "Modulo surround" @@ -1617,6 +1815,9 @@ msgstr "Solleva l'interrupt del CODEC all'impostazione del CODEC (necessario per msgid "SB Address" msgstr "Indirizzo SB" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "IRQ WSS" @@ -1701,9 +1902,15 @@ msgstr "Tipo di RAMDAC" msgid "Blend" msgstr "Miscela" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "Filtraggio bilineare" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "Dithering" @@ -1746,6 +1953,33 @@ msgstr "Velocità di trasferimento" msgid "EMS mode" msgstr "Modalità EMS" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "Indirizzo per > 2 MB" @@ -1764,11 +1998,11 @@ msgstr "Sempre alla velocità selezionata" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "Impostazione BIOS + Tasti di scelta rapida (disattivati durante il POST)" -msgid "64 kB starting from F0000" -msgstr "64 kB a partire da F0000" +msgid "64 KB starting from F0000" +msgstr "64 KB a partire da F0000" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "128 kB a partire da E0000 (indirizzo MSB invertito, prima gli ultimi 64KB)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "128 KB a partire da E0000 (indirizzo MSB invertito, prima gli ultimi 64 KB)" msgid "Sine" msgstr "Sinusoidale" @@ -1902,6 +2136,15 @@ msgstr "Interpolazione sRGB" msgid "Linear interpolation" msgstr "Interpolazione lineare" +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" + msgid "128 KB" msgstr "128 KB" @@ -1935,6 +2178,9 @@ msgstr "Ambra" msgid "Gray" msgstr "Grigio" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "Colore" @@ -1950,6 +2196,12 @@ msgstr "Altre lingue" msgid "Bochs latest" msgstr "Bochs ultima versione" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "Mono non interlacciato" @@ -2031,6 +2283,9 @@ msgstr "Velocità di trasmissione in baud del passaggio" msgid "Named Pipe (Server)" msgstr "Tubo denominato (Server)" +msgid "Named Pipe (Client)" +msgstr "" + msgid "Host Serial Passthrough" msgstr "Passaggio della porta seriale host" @@ -2076,6 +2331,12 @@ msgstr "Clone IBM 8514/A (ISA)" msgid "Vendor" msgstr "Fabricante" +msgid "30 Hz (JMP2 = 1)" +msgstr "" + +msgid "60 Hz (JMP2 = 2)" +msgstr "" + msgid "Generic PC/XT Memory Expansion" msgstr "Espansione di memoria generica PC/XT" @@ -2147,3 +2408,72 @@ msgstr "" msgid "Could not load file %1" msgstr "" + +msgid "Key Bindings:" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" + +#~ msgid "HD Controller:" +#~ msgstr "Controller HD:" + +#~ msgid "ZIP drives:" +#~ msgstr "Unità ZIP:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "Immagini ZIP" diff --git a/src/qt/languages/ja-JP.po b/src/qt/languages/ja-JP.po index 5efd599ed..a43fd4c9e 100644 --- a/src/qt/languages/ja-JP.po +++ b/src/qt/languages/ja-JP.po @@ -27,8 +27,11 @@ msgstr "Ctrl+Alt+Esc(&E)" msgid "&Pause" msgstr "一時停止(&P)" -msgid "E&xit..." -msgstr "終了(&X)..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" +msgstr "終了(&X)" msgid "&View" msgstr "表示(&V)" @@ -60,8 +63,8 @@ msgstr "OpenGL (3.0 Core)(&G)" msgid "&VNC" msgstr "VNC(&V)" -msgid "Specify dimensions..." -msgstr "ディメンションを指定..." +msgid "Specify &dimensions..." +msgstr "ディメンションを指定...(&D)" msgid "F&orce 4:3 display ratio" msgstr "4:3の縦横比を強制表示(&O)" @@ -99,8 +102,8 @@ msgstr "7x(&7)" msgid "&8x" msgstr "8x(&8)" -msgid "Filter method" -msgstr "フィルター方式" +msgid "Fi<er method" +msgstr "フィルター方式(&L)" msgid "&Nearest" msgstr "最近傍補間(&N)" @@ -144,9 +147,15 @@ msgstr "画面タイプ(&T)" msgid "RGB &Color" msgstr "RGB(カラー)(&C)" +msgid "RGB (no brown)" +msgstr "" + msgid "&RGB Grayscale" msgstr "RGB(グレースケール)(&R)" +msgid "Generic RGBI color monitor" +msgstr "" + msgid "&Amber monitor" msgstr "モニター(黄色)(&A)" @@ -384,6 +393,15 @@ msgstr "有効(UTC)" msgid "Dynamic Recompiler" msgstr "動的再コンパイル" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "ビデオカード:" @@ -399,6 +417,9 @@ msgstr "IBM 8514/Aグラフィック" msgid "XGA Graphics" msgstr "XGAグラフィック" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "マウス:" @@ -498,18 +519,21 @@ msgstr "パラレルポート3" msgid "Parallel port 4" msgstr "パラレルポート4" -msgid "HD Controller:" -msgstr "HDDコントローラー:" - msgid "FD Controller:" msgstr "FDDコントローラー:" +msgid "CD-ROM Controller:" +msgstr "" + msgid "Tertiary IDE Controller" msgstr "第三IDEコントローラー" msgid "Quaternary IDE Controller" msgstr "第四IDEコントローラー" +msgid "Hard disk" +msgstr "" + msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "カセット" msgid "Hard disks:" msgstr "ハード ディスク:" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "新規(&N)..." @@ -588,8 +615,8 @@ msgstr "CD-ROMドライブ:" msgid "MO drives:" msgstr "光磁気ドライブ:" -msgid "ZIP drives:" -msgstr "ZIPドライブ:" +msgid "Removable disk drives:" +msgstr "" msgid "ZIP 250" msgstr "ZIP 250" @@ -600,6 +627,9 @@ msgstr "ISA RTCカード:" msgid "ISA Memory Expansion" msgstr "ISAメモリ拡張カード" +msgid "ISA ROM Cards" +msgstr "" + msgid "Card 1:" msgstr "カード1:" @@ -612,6 +642,15 @@ msgstr "カード3:" msgid "Card 4:" msgstr "カード4:" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "ISABuggerデバイス" @@ -633,11 +672,17 @@ msgstr " - 一時停止" msgid "Speed" msgstr "速度" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "" -msgid "ZIP images" -msgstr "ZIPイメージ" +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" +msgstr "" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Boxで使用可能なROMイメージが見つかりません。\n\nROMセットをダウンロードして、roms ディレクトリに解凍してください。" @@ -777,12 +822,39 @@ msgstr "ジョイスティック(4軸、4ボタン)" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinderパッド" msgid "Thrustmaster Flight Control System" msgstr "Thrustmaster飛行制御システム" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "なし" @@ -792,6 +864,9 @@ msgstr "%u MB (CHS値: %i、%i、%i)" msgid "Floppy %1 (%2): %3" msgstr "フロッピー %1 (%2): %3" +msgid "Floppy %1 (%2): %3 (&F)" +msgstr "フロッピー %1 (%2): %3(&F)" + msgid "Advanced sector images" msgstr "アドバンスドセクターイメージ" @@ -813,6 +888,9 @@ msgstr "GhostPCLが初期化できません" msgid "MO %1 (%2): %3" msgstr "光磁気 %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "光磁気 %1 (%2): %3(&M)" + msgid "MO images" msgstr "光磁気イメージ" @@ -897,12 +975,18 @@ msgstr "続行" msgid "Cassette: %1" msgstr "カセット: %1" +msgid "C&assette: %1" +msgstr "カセット: %1(&A)" + msgid "Cassette images" msgstr "カセットイメージ" msgid "Cartridge %1: %2" msgstr "カートリッジ %1: %2" +msgid "Car&tridge %1: %2" +msgstr "カートリッジ %1: %2(&T)" + msgid "Cartridge images" msgstr "カートリッジイメージ" @@ -924,6 +1008,9 @@ msgstr "ハードリセット" msgid "ACPI shutdown" msgstr "ACPIシャットダウン" +msgid "ACP&I shutdown" +msgstr "ACP&Iシャットダウン" + msgid "Hard disk (%1)" msgstr "ハードディスク (%1)" @@ -1071,6 +1158,9 @@ msgstr "ATAPI" msgid "CD-ROM %1 (%2): %3" msgstr "CD-ROM %1 (%2): %3" +msgid "&CD-ROM %1 (%2): %3" +msgstr "&CD-ROM %1 (%2): %3" + msgid "160 KB" msgstr "160 KB" @@ -1209,41 +1299,41 @@ msgstr "MCAデバイス" msgid "List of MCA devices:" msgstr "MCAデバイスのリスト:" -msgid "Tablet tool" -msgstr "タブレットツール" +msgid "&Tablet tool" +msgstr "タブレットツール(&T)" msgid "Qt (OpenGL &ES)" msgstr "Qt (OpenGL &ES)" -msgid "About Qt" -msgstr "Qtについて" +msgid "About &Qt" +msgstr "&Qtについて" -msgid "MCA devices..." -msgstr "MCAデバイス..." +msgid "&MCA devices..." +msgstr "&MCAデバイス..." -msgid "Show non-primary monitors" -msgstr "プライマリーモニター以外のモニターを表示する" +msgid "Show non-&primary monitors" +msgstr "プライマリーモニター以外のモニターを表示する(&P)" -msgid "Open screenshots folder..." -msgstr "スクリーンショットフォルダを開く" +msgid "Open screenshots &folder..." +msgstr "スクリーンショットフォルダを開く(&F)" -msgid "Apply fullscreen stretch mode when maximized" -msgstr "最大化時にフルスクリーンストレッチモードを適用" +msgid "Appl&y fullscreen stretch mode when maximized" +msgstr "最大化時にフルスクリーンストレッチモードを適用(&Y)" -msgid "Cursor/Puck" -msgstr "カーソル/パック" +msgid "&Cursor/Puck" +msgstr "カーソル/パック(&C)" -msgid "Pen" -msgstr "ペン" +msgid "&Pen" +msgstr "ペン(&P)" -msgid "Host CD/DVD Drive (%1:)" -msgstr "ホスト CD/DVD ドライブ (%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "ホスト CD/DVD ドライブ (%1:) (&H)" msgid "&Connected" msgstr "コネクテッド" -msgid "Clear image history" -msgstr "クリア画像履歴" +msgid "Clear image &history" +msgstr "クリア画像履歴(&H)" msgid "Create..." msgstr "作成..." @@ -1260,6 +1350,9 @@ msgstr "ヌル・ドライバー" msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" +msgid "&NIC %1 (%2) %3" +msgstr "&NIC %1 (%2) %3" + msgid "Render behavior" msgstr "レンダリング動作" @@ -1365,8 +1458,26 @@ msgstr "シリアル・ポート・パススルー 3" msgid "Serial port passthrough 4" msgstr "シリアル・ポート・パススルー 4" -msgid "Renderer options..." -msgstr "レンダラー設定..." +msgid "Renderer &options..." +msgstr "レンダラー設定...(&O)" + +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" +msgstr "" msgid "Logitech/Microsoft Bus Mouse" msgstr "Logitech/Microsoft バスマウス" @@ -1377,18 +1488,30 @@ msgstr "Microsoft バスマウス(InPort)" msgid "Mouse Systems Serial Mouse" msgstr "Mouse Systems シリアルマウス" +msgid "Mouse Systems Bus Mouse" +msgstr "" + msgid "Microsoft Serial Mouse" msgstr "Microsoft シリアルマウス" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "Logitech シリアルマウス" msgid "PS/2 Mouse" msgstr "PS/2マウス" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "3Mマイクロタッチ(シリアル)" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] 標準ヘイズ準拠モデム" @@ -1413,12 +1536,54 @@ msgstr "システムMIDI" msgid "MIDI Input Device" msgstr "MIDI入力デバイス" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" msgstr "BIOSアドレス" +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" +msgstr "" + msgid "Enable BIOS extension ROM Writes" msgstr "BIOS拡張ROM書き込みを有効にする" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "アドレス" @@ -1428,6 +1593,18 @@ msgstr "割り込み要求" msgid "BIOS Revision" msgstr "BIOSリビジョン" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "26→17を翻訳" @@ -1443,6 +1620,18 @@ msgstr "色の反転" msgid "BIOS size" msgstr "BIOSサイズ" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "C0000-C7FFFをUMBとしてマップ" @@ -1518,6 +1707,9 @@ msgstr "リバーブ・レベル" msgid "Interpolation Method" msgstr "補間法" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" msgstr "リバーブ出力のゲイン" @@ -1605,6 +1797,12 @@ msgstr "低DMA" msgid "Enable Game port" msgstr "ゲームポートを有効にする" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "サラウンド・モジュール" @@ -1617,6 +1815,9 @@ msgstr "CODECセットアップ時にCODEC割り込みを発生させる(一部 msgid "SB Address" msgstr "SBアドレス" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "WSS IRQ" @@ -1701,9 +1902,15 @@ msgstr "RAMDACタイプ" msgid "Blend" msgstr "ブレンド" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "バイリニア・フィルタリング" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "ディザリング" @@ -1746,6 +1953,33 @@ msgstr "転送速度" msgid "EMS mode" msgstr "EMSモード" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "2MB以上のアドレス" @@ -1764,10 +1998,10 @@ msgstr "常に選択された速度" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "BIOS設定+ホットキー(POST中はオフ)" -msgid "64 kB starting from F0000" +msgid "64 KB starting from F0000" msgstr "F0000から始まる64キロバイト" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" msgstr "E0000から始まる128キロバイト(アドレスMSBが反転、最後の64キロバイトが最初)" msgid "Sine" @@ -1902,6 +2136,15 @@ msgstr "sRGB補間" msgid "Linear interpolation" msgstr "線形補間" +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" + msgid "128 KB" msgstr "128 KB" @@ -1935,6 +2178,9 @@ msgstr "鼈甲色" msgid "Gray" msgstr "ねずみ色" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "カラー" @@ -1950,6 +2196,12 @@ msgstr "その他の言語" msgid "Bochs latest" msgstr "Bochs latest" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "モノラル・ノンインターレース" @@ -2031,6 +2283,9 @@ msgstr "パススルーのボーレート" msgid "Named Pipe (Server)" msgstr "名前付きパイプ(サーバー)" +msgid "Named Pipe (Client)" +msgstr "" + msgid "Host Serial Passthrough" msgstr "ホストシリアルポートのパススルー" @@ -2076,6 +2331,12 @@ msgstr "IBM 8514/A クローン(ISA)" msgid "Vendor" msgstr "業者" +msgid "30 Hz (JMP2 = 1)" +msgstr "" + +msgid "60 Hz (JMP2 = 2)" +msgstr "" + msgid "Generic PC/XT Memory Expansion" msgstr "汎用PC/XTメモリ拡張カード" @@ -2147,3 +2408,72 @@ msgstr "" msgid "Could not load file %1" msgstr "" + +msgid "Key Bindings:" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" + +#~ msgid "HD Controller:" +#~ msgstr "HDDコントローラー:" + +#~ msgid "ZIP drives:" +#~ msgstr "ZIPドライブ:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "ZIPイメージ" diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po index 89dbf5809..8eccf9710 100644 --- a/src/qt/languages/ko-KR.po +++ b/src/qt/languages/ko-KR.po @@ -27,8 +27,11 @@ msgstr "Ctrl+Alt+Esc(&E)" msgid "&Pause" msgstr "일시정지(&P)" -msgid "E&xit..." -msgstr "끝내기(&X)..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" +msgstr "끝내기(&X)" msgid "&View" msgstr "표시(&V)" @@ -60,8 +63,8 @@ msgstr "OpenGL (3.0 Core)(&G)" msgid "&VNC" msgstr "VNC(&V)" -msgid "Specify dimensions..." -msgstr "창 크기 지정하기..." +msgid "Specify &dimensions..." +msgstr "창 크기 지정하기...(&D)" msgid "F&orce 4:3 display ratio" msgstr "화면 비율을 4:3으로 맞추기(&O)" @@ -99,8 +102,8 @@ msgstr "7배(&7)" msgid "&8x" msgstr "8배(&8)" -msgid "Filter method" -msgstr "필터 형식" +msgid "Fi<er method" +msgstr "필터 형식(&L)" msgid "&Nearest" msgstr "최근방 이웃 보간법(&N)" @@ -144,9 +147,15 @@ msgstr "VGA 화면 종류(&T)" msgid "RGB &Color" msgstr "RGB 천연색(&C)" +msgid "RGB (no brown)" +msgstr "" + msgid "&RGB Grayscale" msgstr "RGB 회색조(&R)" +msgid "Generic RGBI color monitor" +msgstr "" + msgid "&Amber monitor" msgstr "주황색 모니터(&A)" @@ -384,10 +393,19 @@ msgstr "사용 (UTC)" msgid "Dynamic Recompiler" msgstr "동적 재컴파일" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "비디오 카드:" -msgid "Video 2:" +msgid "Video #2:" msgstr "비디오 카드 2:" msgid "Voodoo 1 or 2 Graphics" @@ -399,6 +417,9 @@ msgstr "IBM 8514/A 그래픽" msgid "XGA Graphics" msgstr "XGA 그래픽" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "마우스:" @@ -498,18 +519,21 @@ msgstr "병렬 포트 3" msgid "Parallel port 4" msgstr "병렬 포트 4" -msgid "HD Controller:" -msgstr "HD 컨트롤러:" - msgid "FD Controller:" msgstr "FD 컨트롤러:" +msgid "CD-ROM Controller:" +msgstr "" + msgid "Tertiary IDE Controller" msgstr "제3의 IDE 컨트롤러" msgid "Quaternary IDE Controller" msgstr "제4의 IDE 컨트롤러" +msgid "Hard disk" +msgstr "" + msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "카세트 테이프" msgid "Hard disks:" msgstr "하드 디스크:" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "새로 만들기(&N)..." @@ -588,8 +615,8 @@ msgstr "CD-ROM 드라이브:" msgid "MO drives:" msgstr "광자기 드라이브:" -msgid "ZIP drives:" -msgstr "ZIP 드라이브:" +msgid "Removable disk drives:" +msgstr "" msgid "ZIP 250" msgstr "ZIP 250" @@ -600,6 +627,9 @@ msgstr "ISA RTC 카드:" msgid "ISA Memory Expansion" msgstr "ISA 메모리 확장 카드" +msgid "ISA ROM Cards" +msgstr "" + msgid "Card 1:" msgstr "카드 1:" @@ -612,6 +642,15 @@ msgstr "카드 3:" msgid "Card 4:" msgstr "카드 4:" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "ISABugger 장치" @@ -633,11 +672,17 @@ msgstr " - 일시 중지됨" msgid "Speed" msgstr "속도" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "" -msgid "ZIP images" -msgstr "ZIP 이미지" +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" +msgstr "" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box에서 사용 가능한 ROM 이미지를 찾을 수 없습니다.\n\nROM 세트를다운로드 후 \"roms\" 디렉토리에 압축을 풀어 주세요." @@ -777,12 +822,39 @@ msgstr "4축, 4버튼 조이스틱" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" msgid "Thrustmaster Flight Control System" msgstr "Thrustmaster Flight Control System" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "없음" @@ -792,6 +864,9 @@ msgstr "%1 MB (CHS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "플로피 %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "플로피 %1 (%2): %3(&F)" + msgid "Advanced sector images" msgstr "어드밴스드 섹터 이미지" @@ -813,6 +888,9 @@ msgstr "GhostPCL를 초기화할 수 없습니다" msgid "MO %1 (%2): %3" msgstr "광자기 %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "광자기 %1 (%2): %3(&M)" + msgid "MO images" msgstr "광자기 이미지" @@ -897,12 +975,18 @@ msgstr "계속" msgid "Cassette: %1" msgstr "카세트: %1" +msgid "C&assette: %1" +msgstr "카세트: %1(&A)" + msgid "Cassette images" msgstr "카세트 이미지" msgid "Cartridge %1: %2" msgstr "카트리지 %1: %2" +msgid "Car&tridge %1: %2" +msgstr "카트리지 %1: %2(&T)" + msgid "Cartridge images" msgstr "카트리지 이미지" @@ -924,6 +1008,9 @@ msgstr "재시작" msgid "ACPI shutdown" msgstr "ACPI 종료" +msgid "ACP&I shutdown" +msgstr "ACP&I 종료" + msgid "Hard disk (%1)" msgstr "하드 디스크 (%1)" @@ -1209,41 +1296,41 @@ msgstr "MCA 장치" msgid "List of MCA devices:" msgstr "MCA 장치 목록:" -msgid "Tablet tool" -msgstr "태블릿 도구" +msgid "&Tablet tool" +msgstr "태블릿 도구(&T)" msgid "Qt (OpenGL &ES)" msgstr "Qt(OpenGL &ES)" -msgid "About Qt" -msgstr "Qt 소개" +msgid "About &Qt" +msgstr "&Qt 소개" -msgid "MCA devices..." -msgstr "MCA 장치..." +msgid "&MCA devices..." +msgstr "&MCA 장치..." -msgid "Show non-primary monitors" -msgstr "기본 모니터가 아닌 모니터 표시" +msgid "Show non-&primary monitors" +msgstr "기본 모니터가 아닌 모니터 표시(&P)" -msgid "Open screenshots folder..." -msgstr "스크린샷 폴더 열기..." +msgid "Open screenshots &folder..." +msgstr "스크린샷 폴더 열기...(&F)" -msgid "Apply fullscreen stretch mode when maximized" -msgstr "최대화 시 전체 화면 비율 적용" +msgid "Appl&y fullscreen stretch mode when maximized" +msgstr "최대화 시 전체 화면 비율 적용(&Y)" -msgid "Cursor/Puck" -msgstr "커서/퍽" +msgid "&Cursor/Puck" +msgstr "커서/퍽(&P)" -msgid "Pen" -msgstr "펜" +msgid "&Pen" +msgstr "펜(&P)" -msgid "Host CD/DVD Drive (%1:)" -msgstr "호스트 CD/DVD 드라이브(%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "호스트 CD/DVD 드라이브(%1:) (&H)" msgid "&Connected" msgstr "&커넥티드" -msgid "Clear image history" -msgstr "이미지 기록 지우기" +msgid "Clear image &history" +msgstr "이미지 기록 지우기(&H)" msgid "Create..." msgstr "만들기..." @@ -1260,6 +1347,9 @@ msgstr "Null 드라이버" msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" +msgid "&NIC %1 (%2) %3" +msgstr "&NIC %1 (%2) %3" + msgid "Render behavior" msgstr "렌더링 동작" @@ -1365,8 +1455,26 @@ msgstr "직렬 포트 패스스루 3" msgid "Serial port passthrough 4" msgstr "직렬 포트 패스스루 4" -msgid "Renderer options..." -msgstr "렌더러 옵션..." +msgid "Renderer &options..." +msgstr "렌더러 옵션...(&O)" + +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" +msgstr "" msgid "Logitech/Microsoft Bus Mouse" msgstr "로지텍/마이크로소프트 버스 마우스" @@ -1377,18 +1485,30 @@ msgstr "마이크로소프트 버스 마우스(인포트)" msgid "Mouse Systems Serial Mouse" msgstr "마우스 시스템 시리얼 마우스" +msgid "Mouse Systems Bus Mouse" +msgstr "" + msgid "Microsoft Serial Mouse" msgstr "마이크로소프트 직렬 마우스" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "로지텍 직렬 마우스" msgid "PS/2 Mouse" msgstr "PS/2 마우스" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "3M 마이크로터치(직렬)" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] 표준 헤이즈 호환 모뎀" @@ -1413,12 +1533,54 @@ msgstr "시스템 미디" msgid "MIDI Input Device" msgstr "미디 입력 장치" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" msgstr "BIOS 주소" +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" +msgstr "" + msgid "Enable BIOS extension ROM Writes" msgstr "BIOS 확장 ROM 쓰기 활성화" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "주소" @@ -1428,6 +1590,18 @@ msgstr "IRQ" msgid "BIOS Revision" msgstr "BIOS 개정" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "번역 26 -> 17" @@ -1443,6 +1617,18 @@ msgstr "색상 반전" msgid "BIOS size" msgstr "BIOS 크기" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "C0000-C7FFF를 UMB로 매핑하기" @@ -1518,6 +1704,9 @@ msgstr "리버브 레벨" msgid "Interpolation Method" msgstr "보간 방법" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" msgstr "리버브 출력의 게인" @@ -1605,6 +1794,12 @@ msgstr "낮은 DMA" msgid "Enable Game port" msgstr "게임 포트 사용" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "서라운드 모듈" @@ -1617,6 +1812,9 @@ msgstr "코덱 설정 시 코덱 인터럽트 올리기(일부 드라이버에 msgid "SB Address" msgstr "SB 주소" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "WSS IRQ" @@ -1701,9 +1899,15 @@ msgstr "램닥 유형" msgid "Blend" msgstr "블렌드" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "이중선형 필터링" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "디더링" @@ -1746,6 +1950,33 @@ msgstr "전송 속도" msgid "EMS mode" msgstr "EMS 모드" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "2MB 이상의 주소" @@ -1764,11 +1995,11 @@ msgstr "항상 선택한 속도로" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "BIOS 설정 + 핫키(POST 중 꺼짐)" -msgid "64 kB starting from F0000" -msgstr "64kB부터 F0000" +msgid "64 KB starting from F0000" +msgstr "64 KB부터 F0000" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "E0000에서 시작하는 128kB(주소 MSB 반전, 마지막 64KB 먼저)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "E0000에서 시작하는 128KB(주소 MSB 반전, 마지막 64 KB 먼저)" msgid "Sine" msgstr "사인" @@ -1902,6 +2133,15 @@ msgstr "sRGB 보간" msgid "Linear interpolation" msgstr "선형 보간" +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" + msgid "128 KB" msgstr "128 KB" @@ -1935,6 +2175,9 @@ msgstr "Amber" msgid "Gray" msgstr "회색" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "색상" @@ -1950,6 +2193,12 @@ msgstr "기타 언어" msgid "Bochs latest" msgstr "Bochs 최신 정보" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "모노 비인터레이스" @@ -2031,6 +2280,9 @@ msgstr "통과 속도" msgid "Named Pipe (Server)" msgstr "네임드 파이프(서버)" +msgid "Named Pipe (Client)" +msgstr "" + msgid "Host Serial Passthrough" msgstr "호스트 직렬 포트 패스스루" @@ -2076,6 +2328,12 @@ msgstr "IBM 8514/A 클론(ISA)" msgid "Vendor" msgstr "제조사" +msgid "30 Hz (JMP2 = 1)" +msgstr "" + +msgid "60 Hz (JMP2 = 2)" +msgstr "" + msgid "Generic PC/XT Memory Expansion" msgstr "일반 PC/XT 메모리 확장 카드" @@ -2147,3 +2405,72 @@ msgstr "" msgid "Could not load file %1" msgstr "" + +msgid "Key Bindings:" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" + +#~ msgid "HD Controller:" +#~ msgstr "HD 컨트롤러:" + +#~ msgid "ZIP drives:" +#~ msgstr "ZIP 드라이브:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "ZIP 이미지" diff --git a/src/qt/languages/nl-NL.po b/src/qt/languages/nl-NL.po index aa87cd37d..8316f2c42 100644 --- a/src/qt/languages/nl-NL.po +++ b/src/qt/languages/nl-NL.po @@ -27,8 +27,11 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Pauze" -msgid "E&xit..." -msgstr "&Afsluiten..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" +msgstr "&Afsluiten" msgid "&View" msgstr "&Beeld" @@ -60,7 +63,7 @@ msgstr "Open&GL (3.0 Core)" msgid "&VNC" msgstr "&VNC" -msgid "Specify dimensions..." +msgid "Specify &dimensions..." msgstr "Afmetingen opgeven..." msgid "F&orce 4:3 display ratio" @@ -99,7 +102,7 @@ msgstr "&7x" msgid "&8x" msgstr "&8x" -msgid "Filter method" +msgid "Fi<er method" msgstr "Filtermethode" msgid "&Nearest" @@ -144,9 +147,15 @@ msgstr "VGA-scherm &type" msgid "RGB &Color" msgstr "RGB &Kleur" +msgid "RGB (no brown)" +msgstr "" + msgid "&RGB Grayscale" msgstr "&RGB grijstinten" +msgid "Generic RGBI color monitor" +msgstr "" + msgid "&Amber monitor" msgstr "&Amber monitor" @@ -384,6 +393,15 @@ msgstr "Ingeschakeld (UTC)" msgid "Dynamic Recompiler" msgstr "Dynamische Recompiler" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "Video:" @@ -399,6 +417,9 @@ msgstr "IBM 8514/A-graphics" msgid "XGA Graphics" msgstr "XGA Graphics" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "Muis:" @@ -498,18 +519,21 @@ msgstr "Parallelle poort 3" msgid "Parallel port 4" msgstr "Parallelle poort 4" -msgid "HD Controller:" -msgstr "HD-controller:" - msgid "FD Controller:" msgstr "FD-Controller:" +msgid "CD-ROM Controller:" +msgstr "" + msgid "Tertiary IDE Controller" msgstr "Tertiaire IDE-controller" msgid "Quaternary IDE Controller" msgstr "Quaternaire IDE-controller" +msgid "Hard disk" +msgstr "" + msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "Cassette" msgid "Hard disks:" msgstr "Harde schijven:" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "&Nieuw..." @@ -588,8 +615,8 @@ msgstr "CD-ROM-stations:" msgid "MO drives:" msgstr "MO-schijven:" -msgid "ZIP drives:" -msgstr "ZIP-schijven:" +msgid "Removable disk drives:" +msgstr "" msgid "ZIP 250" msgstr "ZIP 250" @@ -600,6 +627,9 @@ msgstr "ISA RTC:" msgid "ISA Memory Expansion" msgstr "ISA-geheugenuitbreiding" +msgid "ISA ROM Cards" +msgstr "" + msgid "Card 1:" msgstr "Kaart 1:" @@ -612,6 +642,15 @@ msgstr "Kaart 3:" msgid "Card 4:" msgstr "Kaart 4:" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "ISABugger-apparaat" @@ -633,11 +672,17 @@ msgstr " - GEPAUZEERD" msgid "Speed" msgstr "Snelheid" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "" -msgid "ZIP images" -msgstr "ZIP-images" +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" +msgstr "" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box kon geen bruikbare ROM images vinden.\n\nDownload een ROM set en pak deze uit in de map \"roms\"." @@ -777,12 +822,39 @@ msgstr "Joystick met 4 assen en 4 knoppen" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" msgid "Thrustmaster Flight Control System" msgstr "Thrustmaster Flight Control systeem" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "Geen" @@ -792,6 +864,9 @@ msgstr "%1 MB (CHS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "Floppy %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "&Floppy %1 (%2): %3" + msgid "Advanced sector images" msgstr "Geavanceerde sector-images" @@ -813,6 +888,9 @@ msgstr "Kan GhostPCL niet initialiseren" msgid "MO %1 (%2): %3" msgstr "MO %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "&MO %1 (%2): %3" + msgid "MO images" msgstr "MO-images" @@ -897,12 +975,18 @@ msgstr "Doorgaan" msgid "Cassette: %1" msgstr "Cassette: %1" +msgid "C&assette: %1" +msgstr "C&assette: %1" + msgid "Cassette images" msgstr "Cassette-images" msgid "Cartridge %1: %2" msgstr "Cartridge %1: %2" +msgid "Car&tridge %1: %2" +msgstr "Car&tridge %1: %2" + msgid "Cartridge images" msgstr "Cartridge-images" @@ -924,6 +1008,9 @@ msgstr "Harde reset" msgid "ACPI shutdown" msgstr "ACPI uitschakeling" +msgid "ACP&I shutdown" +msgstr "ACP&I uitschakeling" + msgid "Hard disk (%1)" msgstr "Harde schijf (%1)" @@ -1071,6 +1158,9 @@ msgstr "ATAPI" msgid "CD-ROM %1 (%2): %3" msgstr "CD-ROM %1 (%2): %3" +msgid "&CD-ROM %1 (%2): %3" +msgstr "&CD-ROM %1 (%2): %3" + msgid "160 KB" msgstr "160 KB" @@ -1209,41 +1299,41 @@ msgstr "MCA-apparaten" msgid "List of MCA devices:" msgstr "Lijst van MCA-apparaten:" -msgid "Tablet tool" +msgid "&Tablet tool" msgstr "Tablet-hulpmiddel" msgid "Qt (OpenGL &ES)" msgstr "Qt (OpenGL &ES)" -msgid "About Qt" -msgstr "Over Qt" +msgid "About &Qt" +msgstr "Over &Qt" -msgid "MCA devices..." +msgid "&MCA devices..." msgstr "MCA-apparaten..." -msgid "Show non-primary monitors" +msgid "Show non-&primary monitors" msgstr "Toon niet-primaire monitors" -msgid "Open screenshots folder..." +msgid "Open screenshots &folder..." msgstr "Map met schermafbeeldingen openen..." -msgid "Apply fullscreen stretch mode when maximized" +msgid "Appl&y fullscreen stretch mode when maximized" msgstr "Schakel de volledig scherm-uitrekmodus in bij maximaliseren" -msgid "Cursor/Puck" -msgstr "Cursor/Puck" +msgid "&Cursor/Puck" +msgstr "&Cursor/Puck" -msgid "Pen" -msgstr "Pen" +msgid "&Pen" +msgstr "&Pen" -msgid "Host CD/DVD Drive (%1:)" -msgstr "Host cd/dvd-station (%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "&Host cd/dvd-station (%1:)" msgid "&Connected" msgstr "&Verbonden" -msgid "Clear image history" -msgstr "Imagegeschiedenis verwijderen" +msgid "Clear image &history" +msgstr "Imagegeschiedenis verwijderen(&H)" msgid "Create..." msgstr "Creëer..." @@ -1260,6 +1350,9 @@ msgstr "Null Driver" msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" +msgid "&NIC %1 (%2) %3" +msgstr "&NIC %1 (%2) %3" + msgid "Render behavior" msgstr "Rendergedrag" @@ -1365,9 +1458,27 @@ msgstr "Seriële poort doorvoer 3" msgid "Serial port passthrough 4" msgstr "Seriële poort doorvoer 4" -msgid "Renderer options..." +msgid "Renderer &options..." msgstr "Renderer-opties..." +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" +msgstr "" + msgid "Logitech/Microsoft Bus Mouse" msgstr "Logitech/Microsoft busmuis" @@ -1377,18 +1488,30 @@ msgstr "Microsoft busmuis (InPort)" msgid "Mouse Systems Serial Mouse" msgstr "Mouse Systems seriële muis" +msgid "Mouse Systems Bus Mouse" +msgstr "" + msgid "Microsoft Serial Mouse" msgstr "Microsoft seriële muis" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "Logitech seriële muis" msgid "PS/2 Mouse" msgstr "PS/2-muis" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (serieel)" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "COM] Standaard Hayes-compatibele modem " @@ -1413,12 +1536,54 @@ msgstr "Systeem MIDI" msgid "MIDI Input Device" msgstr "MIDI-ingangsapparaat" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" msgstr "BIOS-adres" +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" +msgstr "" + msgid "Enable BIOS extension ROM Writes" msgstr "BIOS-extensie ROM Writes inschakelen" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "Adres" @@ -1428,6 +1593,18 @@ msgstr "IRQ" msgid "BIOS Revision" msgstr "BIOS Revisie" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "Vertaal 26 -> 17" @@ -1443,6 +1620,18 @@ msgstr "Kleuren inverteren" msgid "BIOS size" msgstr "BIOS-grootte" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "Geheugenadres C0000-C7FFF toewijzen aan UMB" @@ -1518,6 +1707,9 @@ msgstr "Reverbniveau" msgid "Interpolation Method" msgstr "Interpolatiemethode" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" msgstr "Reverbuitgang Versterking" @@ -1605,6 +1797,12 @@ msgstr "Lage DMA" msgid "Enable Game port" msgstr "Game-poort inschakelen" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "Surroundmodule" @@ -1617,6 +1815,9 @@ msgstr "Verhoog CODEC interrupt bij CODEC setup (nodig voor sommige stuurprogram msgid "SB Address" msgstr "SB-adres" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "WSS IRQ" @@ -1701,9 +1902,15 @@ msgstr "RAMDAC type" msgid "Blend" msgstr "Mengen" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "Bilineaire filtering" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "Dithering" @@ -1746,6 +1953,33 @@ msgstr "Overdrachtssnelheid" msgid "EMS mode" msgstr "EMS-modus" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "Adres voor > 2 MB" @@ -1764,11 +1998,11 @@ msgstr "Altijd op geselecteerde snelheid" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "BIOS-instelling + Sneltoetsen (niet actief tijdens POST)" -msgid "64 kB starting from F0000" -msgstr "64 kB vanaf F0000" +msgid "64 KB starting from F0000" +msgstr "64 KB vanaf F0000" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "128 kB vanaf E0000 (geïnverteerd MSB adres, laatste 64KB eerst)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "128 KB vanaf E0000 (geïnverteerd MSB adres, laatste 64 KB eerst)" msgid "Sine" msgstr "Sinus" @@ -1902,6 +2136,15 @@ msgstr "sRGB-interpolatie" msgid "Linear interpolation" msgstr "Lineaire interpolatie" +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" + msgid "128 KB" msgstr "128 KB" @@ -1935,6 +2178,9 @@ msgstr "Amber" msgid "Gray" msgstr "Grijs" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "Kleur" @@ -1950,6 +2196,12 @@ msgstr "Andere talen" msgid "Bochs latest" msgstr "Bochs nieuwste" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "Mono niet geïnterlaced" @@ -2031,6 +2283,9 @@ msgstr "Baud-snelheid van doorvoer" msgid "Named Pipe (Server)" msgstr "Named Pipe (Server)" +msgid "Named Pipe (Client)" +msgstr "" + msgid "Host Serial Passthrough" msgstr "Host seriële doorgave" @@ -2076,6 +2331,12 @@ msgstr "IBM 8514/A-kloon (ISA)" msgid "Vendor" msgstr "Leverancier" +msgid "30 Hz (JMP2 = 1)" +msgstr "" + +msgid "60 Hz (JMP2 = 2)" +msgstr "" + msgid "Generic PC/XT Memory Expansion" msgstr "Generieke PC/XT geheugenuitbreiding" @@ -2147,3 +2408,72 @@ msgstr "Omlaag verplaatsen" msgid "Could not load file %1" msgstr "Kon bestand %1 niet laden" + +msgid "Key Bindings:" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" + +#~ msgid "HD Controller:" +#~ msgstr "HD-controller:" + +#~ msgid "ZIP drives:" +#~ msgstr "ZIP-schijven:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "ZIP-images" diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po index b161370ed..9dae4e437 100644 --- a/src/qt/languages/pl-PL.po +++ b/src/qt/languages/pl-PL.po @@ -10,13 +10,13 @@ msgid "&Action" msgstr "&Akcje" msgid "&Keyboard requires capture" -msgstr "&Klawaitura wymaga przechwytu myszy" +msgstr "&Klawiatura wymaga przechwytu myszy" msgid "&Right CTRL is left ALT" -msgstr "&Prawy CTRL to lewy ALT" +msgstr "Prawy C&TRL to lewy ALT" msgid "&Hard Reset..." -msgstr "&Twardy reset..." +msgstr "Twardy &reset..." msgid "&Ctrl+Alt+Del" msgstr "&Ctrl+Alt+Del" @@ -27,8 +27,11 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Pauza" -msgid "E&xit..." -msgstr "W&yjdź..." +msgid "Re&sume" +msgstr "&Wznów" + +msgid "E&xit" +msgstr "W&yjście" msgid "&View" msgstr "&Widok" @@ -60,7 +63,7 @@ msgstr "Open&GL (3.0 Core)" msgid "&VNC" msgstr "&VNC" -msgid "Specify dimensions..." +msgid "Specify &dimensions..." msgstr "Określ wymiary..." msgid "F&orce 4:3 display ratio" @@ -99,7 +102,7 @@ msgstr "&7x" msgid "&8x" msgstr "&8x" -msgid "Filter method" +msgid "Fi<er method" msgstr "Metoda filtrowania" msgid "&Nearest" @@ -144,9 +147,15 @@ msgstr "Rodzaj ekranu &VGA" msgid "RGB &Color" msgstr "RGB - &Kolorowy" +msgid "RGB (no brown)" +msgstr "RGB (bez brązowego)" + msgid "&RGB Grayscale" msgstr "&RGB - Skala odcieni szarości" +msgid "Generic RGBI color monitor" +msgstr "Generyczny kolorowy monitor RGBI" + msgid "&Amber monitor" msgstr "&Bursztynowy monitor" @@ -175,7 +184,7 @@ msgid "Change contrast for &monochrome display" msgstr "Zmień kontrast dla ekranu &monochromatycznego" msgid "&Media" -msgstr "&Nośnik" +msgstr "N&ośnik" msgid "&Tools" msgstr "&Narzędzia" @@ -384,6 +393,15 @@ msgstr "Włączona (UTC)" msgid "Dynamic Recompiler" msgstr "Dynamiczny rekompilator" +msgid "CPU frame size" +msgstr "Rozmiar ramki CPU" + +msgid "Larger frames (less smooth)" +msgstr "Większe ramki (mniej płynne)" + +msgid "Smaller frames (smoother)" +msgstr "Mniejsze ramki (płynniejsze)" + msgid "Video:" msgstr "Wideo:" @@ -399,6 +417,9 @@ msgstr "Grafika IBM 8514/A" msgid "XGA Graphics" msgstr "Grafika XGA" +msgid "Keyboard:" +msgstr "Klawiatura:" + msgid "Mouse:" msgstr "Mysz:" @@ -418,16 +439,16 @@ msgid "Joystick 4..." msgstr "Joystick 4..." msgid "Sound card #1:" -msgstr "Karta dźwiękowa 1:" +msgstr "Karta dźwiękowa nr 1:" msgid "Sound card #2:" -msgstr "Karta dźwiękowa 2:" +msgstr "Karta dźwiękowa nr 2:" msgid "Sound card #3:" -msgstr "Karta dźwiękowa 3:" +msgstr "Karta dźwiękowa nr 3:" msgid "Sound card #4:" -msgstr "Karta dźwiękowa 4:" +msgstr "Karta dźwiękowa nr 4:" msgid "MIDI Out Device:" msgstr "Urządzenie wyjściowe MIDI:" @@ -498,18 +519,21 @@ msgstr "Port równoległy 3" msgid "Parallel port 4" msgstr "Port równoległy 4" -msgid "HD Controller:" -msgstr "Kontroler dysku twardego:" - msgid "FD Controller:" msgstr "Kontroler dyskietek:" +msgid "CD-ROM Controller:" +msgstr "Kontroler CD-ROM:" + msgid "Tertiary IDE Controller" msgstr "Trzeciorzędny kontroler IDE" msgid "Quaternary IDE Controller" msgstr "Czwartorzędny kontroler IDE" +msgid "Hard disk" +msgstr "Dysk twardy" + msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "Kaseta" msgid "Hard disks:" msgstr "Dyski twarde:" +msgid "Firmware Version" +msgstr "Wersja firmware'u" + msgid "&New..." msgstr "&Nowy..." @@ -588,8 +615,8 @@ msgstr "Napędy CD-ROM:" msgid "MO drives:" msgstr "Napędy MO:" -msgid "ZIP drives:" -msgstr "Napędy ZIP:" +msgid "Removable disk drives:" +msgstr "Stacje dysków wymiennych:" msgid "ZIP 250" msgstr "ZIP 250" @@ -600,6 +627,9 @@ msgstr "ISA RTC:" msgid "ISA Memory Expansion" msgstr "Rozszerzenie pamięci ISA" +msgid "ISA ROM Cards" +msgstr "Karty ROM ISA" + msgid "Card 1:" msgstr "Karta 1:" @@ -612,6 +642,15 @@ msgstr "Karta 3:" msgid "Card 4:" msgstr "Karta 4:" +msgid "Generic ISA ROM Board" +msgstr "Generyczna płyta ROM ISA" + +msgid "Generic Dual ISA ROM Board" +msgstr "Generyczna podwójna płyta ROM ISA" + +msgid "Generic Quad ISA ROM Board" +msgstr "Generyczna poczwórna płyta ROM ISA" + msgid "ISABugger device" msgstr "Urządzenie ISABugger" @@ -633,11 +672,17 @@ msgstr " - PAUZA" msgid "Speed" msgstr "Szybkość" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "Dysk wymienny %1 (%2): %3" -msgid "ZIP images" -msgstr "Obrazy ZIP" +msgid "&Removable disk %1 (%2): %3" +msgstr "Dysk &wymienny %1 (%2): %3" + +msgid "Removable disk images" +msgstr "Obrazy dysków wymiennych" + +msgid "Image %1" +msgstr "Obraz %1" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box nie może znaleźć obrazów ROM nadających się do użytku.\n\nProszę pobrać zestaw obrazów ROM ze strony download, i rozpakować je do katalogu \"roms\"." @@ -715,10 +760,10 @@ msgid "Click to capture mouse" msgstr "Kliknij, by przechwycić mysz" msgid "Press %1 to release mouse" -msgstr "Naciśnij %1 w celu uwolnienia myszy" +msgstr "Naciśnij %1, by wypuścić mysz" msgid "Press %1 or middle button to release mouse" -msgstr "Naciśnij %1 lub środkowy przycisk w celu uwolnienia myszy" +msgstr "Naciśnij %1 lub środkowy przycisk, by wypuścić mysz" msgid "Bus" msgstr "Magistrala" @@ -777,12 +822,39 @@ msgstr "Joystick 4-osiowy, 4-przyciskowy" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "CH Flightstick Pro + CH Pedals" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" msgid "Thrustmaster Flight Control System" msgstr "Thrustmaster Flight Control System" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "Thrustmaster FCS + Rudder Control System" + +msgid "2-button gamepad(s)" +msgstr "Pad(y) z dwoma przyciskami" + +msgid "2-button flight yoke" +msgstr "Wolant z dwoma przyciskami" + +msgid "4-button gamepad" +msgstr "Pad z czterema przyciskami" + +msgid "4-button flight yoke" +msgstr "Wolant z czterema przyciskami" + +msgid "2-button flight yoke with throttle" +msgstr "Wolant z dwoma przyciskami i przepustnicą" + +msgid "4-button flight yoke with throttle" +msgstr "Wolant z czterema przyciskami i przepustnicą" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "Kierownica Win95 (3 osie, 4 przyciski)" + msgid "None" msgstr "Żaden" @@ -792,6 +864,9 @@ msgstr "%1 MB (CHS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "Dyskietka %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "&Dyskietka %1 (%2): %3" + msgid "Advanced sector images" msgstr "Zaawansowane obrazy sektorów" @@ -813,6 +888,9 @@ msgstr "Nie można zainicjować GhostPCL" msgid "MO %1 (%2): %3" msgstr "MO %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "&MO %1 (%2): %3" + msgid "MO images" msgstr "Obrazy MO" @@ -868,10 +946,10 @@ msgid "Don't exit" msgstr "Nie kończ" msgid "Reset" -msgstr "Przywróć" +msgstr "Resetuj" msgid "Don't reset" -msgstr "Nie przywracaj" +msgstr "Nie resetuj" msgid "CD-ROM images" msgstr "Obrazy CD-ROM" @@ -897,12 +975,18 @@ msgstr "Kontynuuj" msgid "Cassette: %1" msgstr "Kaseta: %1" +msgid "C&assette: %1" +msgstr "K&aseta: %1" + msgid "Cassette images" msgstr "Obrazy kaset" msgid "Cartridge %1: %2" msgstr "Kartridż %1: %2" +msgid "Cart&ridge %1: %2" +msgstr "Kar&tridż %1: %2" + msgid "Cartridge images" msgstr "Obrazy kartridżów" @@ -924,6 +1008,9 @@ msgstr "Twardy reset" msgid "ACPI shutdown" msgstr "Wyłączenie ACPI" +msgid "ACP&I shutdown" +msgstr "Wyłączenie ACP&I" + msgid "Hard disk (%1)" msgstr "Dysk twardy (%1)" @@ -979,7 +1066,7 @@ msgid "Disk image too large" msgstr "Obraz dysku jest za duży" msgid "Remember to partition and format the newly-created drive." -msgstr "Nie zapomnij o partycjonowaniu i sformatowaniu nowo utworzego dysku" +msgstr "Nie zapomnij o partycjonowaniu i sformatowaniu nowo utworzonego dysku." msgid "The selected file will be overwritten. Are you sure you want to use it?" msgstr "Wybrany plik zostanie nadpisany. Czy na pewno chcesz użyć tego pliku?" @@ -1071,6 +1158,9 @@ msgstr "ATAPI" msgid "CD-ROM %1 (%2): %3" msgstr "CD-ROM %1 (%2): %3" +msgid "&CD-ROM %1 (%2): %3" +msgstr "&CD-ROM %1 (%2): %3" + msgid "160 KB" msgstr "160 KB" @@ -1209,41 +1299,41 @@ msgstr "Urządzenia MCA" msgid "List of MCA devices:" msgstr "Lista urządzeń MCA:" -msgid "Tablet tool" +msgid "&Tablet tool" msgstr "Narzędzie do tabletów" msgid "Qt (OpenGL &ES)" msgstr "Qt (OpenGL &ES)" -msgid "About Qt" -msgstr "O Qt" +msgid "About &Qt" +msgstr "O &Qt" -msgid "MCA devices..." +msgid "&MCA devices..." msgstr "Urządzenia MCA..." -msgid "Show non-primary monitors" +msgid "Show non-&primary monitors" msgstr "Pokaż monitory inne niż podstawowe" -msgid "Open screenshots folder..." +msgid "Open screenshots &folder..." msgstr "Otwórz folder zrzutów ekranu..." -msgid "Apply fullscreen stretch mode when maximized" +msgid "Appl&y fullscreen stretch mode when maximized" msgstr "Zastosowanie trybu rozciągania na pełnym ekranie w stanie zmaksymalizowanym" -msgid "Cursor/Puck" -msgstr "Kursor/krążek" +msgid "&Cursor/Puck" +msgstr "&Kursor/krążek" -msgid "Pen" -msgstr "Pióro" +msgid "&Pen" +msgstr "P&ióro" -msgid "Host CD/DVD Drive (%1:)" -msgstr "Napęd CD/DVD hosta (%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "&Napęd CD/DVD hosta (%1:)" msgid "&Connected" -msgstr "" +msgstr "&Podłączone" -msgid "Clear image history" -msgstr "Wyczyść historię obrazów" +msgid "Clear image &history" +msgstr "Wyczyść historię obrazów(&H)" msgid "Create..." msgstr "Stwórz..." @@ -1260,6 +1350,9 @@ msgstr "Null Driver" msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" +msgid "&NIC %1 (%2) %3" +msgstr "&NIC %1 (%2) %3" + msgid "Render behavior" msgstr "Zachowanie renderowania" @@ -1324,16 +1417,16 @@ msgid "MiB" msgstr "MiB" msgid "Network Card #1" -msgstr "Karta sieciowa 1" +msgstr "Karta sieciowa nr 1" msgid "Network Card #2" -msgstr "Karta sieciowa 2" +msgstr "Karta sieciowa nr 2" msgid "Network Card #3" -msgstr "Karta sieciowa 3" +msgstr "Karta sieciowa nr 3" msgid "Network Card #4" -msgstr "Karta sieciowa 4" +msgstr "Karta sieciowa nr 4" msgid "Mode:" msgstr "Tryb:" @@ -1365,9 +1458,27 @@ msgstr "Przelotka portu szeregowego 3" msgid "Serial port passthrough 4" msgstr "Przelotka portu szeregowego 4" -msgid "Renderer options..." +msgid "Renderer &options..." msgstr "Opcje renderowania..." +msgid "PC/XT Keyboard" +msgstr "Klawiatura PC/XT" + +msgid "AT Keyboard" +msgstr "Klawiatura AT" + +msgid "AX Keyboard" +msgstr "Klawiatura AX" + +msgid "PS/2 Keyboard" +msgstr "Klawiatura PS/2" + +msgid "PS/55 Keyboard" +msgstr "Klawiatura PS/55" + +msgid "Keys" +msgstr "Klawisze" + msgid "Logitech/Microsoft Bus Mouse" msgstr "Mysz magistralowa Logitech/Microsoft" @@ -1377,18 +1488,30 @@ msgstr "Mysz magistralowa Microsoft (InPort)" msgid "Mouse Systems Serial Mouse" msgstr "Mysz szeregowa Mouse Systems" +msgid "Mouse Systems Bus Mouse" +msgstr "Mysz magistralowa Mouse Systems" + msgid "Microsoft Serial Mouse" msgstr "Mysz szeregowa Microsoft" +msgid "Microsoft Serial BallPoint" +msgstr "Microsoft Serial BallPoint" + msgid "Logitech Serial Mouse" msgstr "Mysz szeregowa Logitech" msgid "PS/2 Mouse" msgstr "Mysz PS/2" +msgid "PS/2 QuickPort Mouse" +msgstr "PS/2 QuickPort Mouse" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (szeregowy)" +msgid "Default Baud rate" +msgstr "Domyślna szybkość transmisji" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] Standardowy modem zgodny z Hayes" @@ -1413,11 +1536,53 @@ msgstr "System MIDI" msgid "MIDI Input Device" msgstr "Urządzenie wejściowe MIDI" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "Plik BIOS" + +msgid "BIOS file (ROM #1)" +msgstr "Plik BIOS (ROM nr 1)" + +msgid "BIOS file (ROM #2)" +msgstr "Plik BIOS (ROM nr 2)" + +msgid "BIOS file (ROM #3)" +msgstr "Plik BIOS (ROM nr 3)" + +msgid "BIOS file (ROM #4)" +msgstr "Plik BIOS (ROM nr 4)" + +msgid "BIOS address" msgstr "Adres BIOS" +msgid "BIOS address (ROM #1)" +msgstr "Adres BIOS (ROM nr 1)" + +msgid "BIOS address (ROM #2)" +msgstr "Adres BIOS (ROM nr 2)" + +msgid "BIOS address (ROM #3)" +msgstr "Adres BIOS (ROM nr 3)" + +msgid "BIOS address (ROM #4)" +msgstr "Adres BIOS (ROM nr 4)" + msgid "Enable BIOS extension ROM Writes" -msgstr "Włączenie zapisu do pamięci ROM rozszerzenia BIOS" +msgstr "Włącz zapis do pamięci ROM rozszerzenia BIOS" + +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "Włącz zapis do pamięci ROM rozszerzenia BIOS (ROM nr 1)" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "Włącz zapis do pamięci ROM rozszerzenia BIOS (ROM nr 2)" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "Włącz zapis do pamięci ROM rozszerzenia BIOS (ROM nr 3)" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "Włącz zapis do pamięci ROM rozszerzenia BIOS (ROM nr 4)" + +msgid "Linear framebuffer base" +msgstr "Adres bazowy liniowego buforu ramki" msgid "Address" msgstr "Adres" @@ -1426,8 +1591,20 @@ msgid "IRQ" msgstr "IRQ" msgid "BIOS Revision" +msgstr "Rewizja BIOS-u" + +msgid "BIOS Version" msgstr "Wersja BIOS-u" +msgid "BIOS Language" +msgstr "Język BIOS-u" + +msgid "IBM 5161 Expansion Unit" +msgstr "IBM 5161 Expansion Unit" + +msgid "IBM Cassette Basic" +msgstr "IBM Cassette Basic" + msgid "Translate 26 -> 17" msgstr "Przetłumacz 26 -> 17" @@ -1443,6 +1620,18 @@ msgstr "Odwracanie kolorów" msgid "BIOS size" msgstr "Rozmiar BIOS-u" +msgid "BIOS size (ROM #1)" +msgstr "Rozmiar BIOS-u (ROM nr 1)" + +msgid "BIOS size (ROM #2)" +msgstr "Rozmiar BIOS-u (ROM nr 2)" + +msgid "BIOS size (ROM #3)" +msgstr "Rozmiar BIOS-u (ROM nr 3)" + +msgid "BIOS size (ROM #4)" +msgstr "Rozmiar BIOS-u (ROM nr 4)" + msgid "Map C0000-C7FFF as UMB" msgstr "Mapowanie C0000-C7FFF jako UMB" @@ -1518,6 +1707,9 @@ msgstr "Poziom pogłosu" msgid "Interpolation Method" msgstr "Metoda interpolacji" +msgid "Dynamic Sample Loading" +msgstr "Dynamiczne wczytywanie sampli" + msgid "Reverb Output Gain" msgstr "Wzmocnienie sygnału wyjściowego pogłosu" @@ -1605,6 +1797,12 @@ msgstr "Niski poziom DMA" msgid "Enable Game port" msgstr "Włącz port gier" +msgid "SID Model" +msgstr "Model SID" + +msgid "SID Filter Strength" +msgstr "Siła filtra SID" + msgid "Surround module" msgstr "Moduł Surround" @@ -1617,6 +1815,9 @@ msgstr "Podnieś przerwanie CODEC podczas konfiguracji CODEC-a (wymagane przez n msgid "SB Address" msgstr "Adres SB" +msgid "Use EEPROM setting" +msgstr "Użyj ustawień z EEPROM" + msgid "WSS IRQ" msgstr "WSS IRQ" @@ -1701,9 +1902,15 @@ msgstr "Typ RAMDAC" msgid "Blend" msgstr "Mieszanka" +msgid "Font" +msgstr "Font" + msgid "Bilinear filtering" msgstr "Filtrowanie dwuliniowe" +msgid "Video chroma-keying" +msgstr "Chroma-keying obrazu" + msgid "Dithering" msgstr "Dithering" @@ -1746,6 +1953,33 @@ msgstr "Prędkość transferu" msgid "EMS mode" msgstr "Tryb EMS" +msgid "EMS Address" +msgstr "Adres EMS" + +msgid "EMS 1 Address" +msgstr "Adres EMS 1" + +msgid "EMS 2 Address" +msgstr "Adres EMS 2" + +msgid "EMS Memory Size" +msgstr "Rozmiar pamięci EMS" + +msgid "EMS 1 Memory Size" +msgstr "Rozmiar pamięci EMS 1" + +msgid "EMS 2 Memory Size" +msgstr "Rozmiar pamięci EMS 2" + +msgid "Enable EMS" +msgstr "Włącz EMS" + +msgid "Enable EMS 1" +msgstr "Włącz EMS 1" + +msgid "Enable EMS 2" +msgstr "Włącz EMS 2" + msgid "Address for > 2 MB" msgstr "Adres dla > 2 MB" @@ -1764,11 +1998,11 @@ msgstr "Zawsze z wybraną prędkością" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "Ustawienia BIOS + klawisze skrótu (wyłączone podczas testu POST)" -msgid "64 kB starting from F0000" -msgstr "64 kB począwszy od F0000" +msgid "64 KB starting from F0000" +msgstr "64 KB począwszy od F0000" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "128 kB począwszy od E0000 (adres MSB odwrócony, najpierw ostatnie 64KB)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "128 KB począwszy od E0000 (adres MSB odwrócony, najpierw ostatnie 64 KB)" msgid "Sine" msgstr "Sinusoidalny" @@ -1902,6 +2136,15 @@ msgstr "Interpolacja sRGB" msgid "Linear interpolation" msgstr "Interpolacja liniowa" +msgid "Has secondary 8x8 character set" +msgstr "Posiada pomocniczy zestaw znaków 8x8" + +msgid "Has Quadcolor II daughter board" +msgstr "Posiada płytę rozszerzeń Quadcolor II" + +msgid "Alternate monochrome contrast" +msgstr "Alternatywny kontrast monochromatyczny" + msgid "128 KB" msgstr "128 KB" @@ -1935,6 +2178,9 @@ msgstr "Bursztynowy" msgid "Gray" msgstr "Szary" +msgid "Grayscale" +msgstr "Skala odcieni szarości" + msgid "Color" msgstr "Kolorowy" @@ -1950,6 +2196,12 @@ msgstr "Inne języki" msgid "Bochs latest" msgstr "Najnowszy Bochs" +msgid "Apply overscan deltas" +msgstr "Zastosuj delty overscanu" + +msgid "Mono Interlaced" +msgstr "Monochromatyczny z przeplotem" + msgid "Mono Non-Interlaced" msgstr "Monochromatyczny bez przeplotu" @@ -1963,7 +2215,7 @@ msgid "3Dfx Voodoo Graphics" msgstr "Grafika 3Dfx Voodoo" msgid "Obsidian SB50 + Amethyst (2 TMUs)" -msgstr "Obsydian SB50 + Amethyst (2 jednostki TMU)" +msgstr "Obsidian SB50 + Amethyst (2 jednostki TMU)" msgid "8-bit" msgstr "8-bitowy" @@ -2031,6 +2283,9 @@ msgstr "Szybkość transmisji przelotowej" msgid "Named Pipe (Server)" msgstr "Nazwany potok (serwer)" +msgid "Named Pipe (Client)" +msgstr "Nazwany potok (klient)" + msgid "Host Serial Passthrough" msgstr "Przelot przez port szeregowy hosta" @@ -2038,7 +2293,7 @@ msgid "E&ject %1" msgstr "W&yjmij %1" msgid "&Unmute" -msgstr "O&dcisz" +msgstr "&Odcisz" msgid "Softfloat FPU" msgstr "FPU Softfloat" @@ -2076,6 +2331,12 @@ msgstr "Klon IBM 8514/A (ISA)" msgid "Vendor" msgstr "Producent" +msgid "30 Hz (JMP2 = 1)" +msgstr "30 Hz (JMP2 = 1)" + +msgid "60 Hz (JMP2 = 2)" +msgstr "60 Hz (JMP2 = 2)" + msgid "Generic PC/XT Memory Expansion" msgstr "Generyczne rozszerzenie pamięci PC/XT" @@ -2147,3 +2408,60 @@ msgstr "Przesuń w dół" msgid "Could not load file %1" msgstr "Nie można wczytać pliku %1" + +msgid "Key Bindings:" +msgstr "Przypisania klawiszy:" + +msgid "Action" +msgstr "Akcja" + +msgid "Keybind" +msgstr "Przypisane klawisze" + +msgid "Clear binding" +msgstr "Wyczyść przypisanie" + +msgid "Bind" +msgstr "Przypisanie" + +msgid "Bind Key" +msgstr "Przypisanie klawiszy" + +msgid "Enter key combo:" +msgstr "Wciśnij kombinację klawiszy:" + +msgid "Bind conflict" +msgstr "Konflikt przypisań" + +msgid "This key combo is already in use." +msgstr "Ta kombinacja klawiszy jest już w użyciu." + +msgid "Send Control+Alt+Del" +msgstr "Wyślij Control+Alt+Del" + +msgid "Send Control+Alt+Escape" +msgstr "Wyślij Control+Alt+Escape" + +msgid "Toggle fullscreen" +msgstr "Przełącz pełny ekran" + +msgid "Screenshot" +msgstr "Zrzut ekranu" + +msgid "Release mouse pointer" +msgstr "Wypuść wskaźnik myszy" + +msgid "Toggle pause" +msgstr "Przełącz pauzę" + +msgid "Toggle mute" +msgstr "Przełącz wyciszenie" + +msgid "Text files" +msgstr "Pliki tekstowe" + +msgid "ROM files" +msgstr "Pliki ROM" + +msgid "SoundFont files" +msgstr "Pliki SoundFont" diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index 56ef18b15..963ad96d9 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -13,13 +13,13 @@ msgid "&Keyboard requires capture" msgstr "&Teclado requer captura" msgid "&Right CTRL is left ALT" -msgstr "&CTRL direito é o ALT esquerdo" +msgstr "CTR&L direito é o ALT esquerdo" msgid "&Hard Reset..." msgstr "&Reinicialização completa..." msgid "&Ctrl+Alt+Del" -msgstr "&Ctrl+Alt+Del" +msgstr "Ctrl+Alt+&Del" msgid "Ctrl+Alt+&Esc" msgstr "Ctrl+Alt+&Esc" @@ -27,17 +27,20 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Pausar" -msgid "E&xit..." -msgstr "&Sair..." +msgid "Re&sume" +msgstr "&Continuar" + +msgid "E&xit" +msgstr "&Sair" msgid "&View" msgstr "&Exibir" msgid "&Hide status bar" -msgstr "&Ocultar barra de status" +msgstr "Ocultar barra de &status" msgid "Hide &toolbar" -msgstr "Ocultar &barra de ferramenta" +msgstr "Ocultar barra de &ferramenta" msgid "&Resizeable window" msgstr "&Janela redimensionável" @@ -60,14 +63,14 @@ msgstr "Open&GL (Núcleo 3.0)" msgid "&VNC" msgstr "&VNC" -msgid "Specify dimensions..." +msgid "Specify &dimensions..." msgstr "Especificar as dimensões..." msgid "F&orce 4:3 display ratio" msgstr "F&orçar proporção de tela em 4:3" msgid "&Window scale factor" -msgstr "&Fator de redimensionamento da janela" +msgstr "F&ator de redimensionamento da janela" msgid "&0.5x" msgstr "&0,5x" @@ -99,8 +102,8 @@ msgstr "&7x" msgid "&8x" msgstr "&8x" -msgid "Filter method" -msgstr "Método de filtragem" +msgid "Fi<er method" +msgstr "Método d&e filtragem" msgid "&Nearest" msgstr "&Mais próximo" @@ -115,7 +118,7 @@ msgid "&Fullscreen" msgstr "&Tela cheia" msgid "Fullscreen &stretch mode" -msgstr "Modo de &redimensionamento da tela cheia" +msgstr "Modo de redimensionamento da tela &cheia" msgid "&Full screen stretch" msgstr "&Tela cheia redimensionada" @@ -133,7 +136,7 @@ msgid "4:&3 Integer scale" msgstr "Redimensionamento com valores inteiros 4:&3" msgid "E&GA/(S)VGA settings" -msgstr "Configurações de E&GA/(S)VGA" +msgstr "Configurações de EGA/(S)&VGA" msgid "&Inverted VGA monitor" msgstr "Monitor VGA &invertido" @@ -144,6 +147,9 @@ msgstr "&Tipo de tela VGA" msgid "RGB &Color" msgstr "&Cor RGB" +msgid "RGB (no brown)" +msgstr "RGB (sem marrom)" + msgid "&RGB Grayscale" msgstr "Tons de cinza &RGB" @@ -211,7 +217,7 @@ msgid "End trace" msgstr "Finalizar rastreamento" msgid "&Help" -msgstr "&Ajuda" +msgstr "Aj&uda" msgid "&Documentation..." msgstr "&Documentação..." @@ -355,7 +361,7 @@ msgid "CPU type:" msgstr "Tipo de CPU:" msgid "Speed:" -msgstr "Veloc.:" +msgstr "Velocidade:" msgid "Frequency:" msgstr "Frequência:" @@ -411,6 +417,9 @@ msgstr "Gráficos IBM 8514/A" msgid "XGA Graphics" msgstr "Gráficos XGA" +msgid "Keyboard:" +msgstr "Teclado:" + msgid "Mouse:" msgstr "Mouse:" @@ -454,7 +463,7 @@ msgid "Use FLOAT32 sound" msgstr "Usar som FLOAT32" msgid "FM synth driver" -msgstr "Controlador de sint. FM" +msgstr "Driver de sintetizador FM" msgid "Nuked (more accurate)" msgstr "Nuked (mais preciso)" @@ -510,18 +519,21 @@ msgstr "Porta paralela 3" msgid "Parallel port 4" msgstr "Porta paralela 4" -msgid "HD Controller:" -msgstr "Controlador HD:" - msgid "FD Controller:" msgstr "Controlador FD:" +msgid "CD-ROM Controller:" +msgstr "Controlador de CD-ROM:" + msgid "Tertiary IDE Controller" msgstr "Controlador IDE terciário" msgid "Quaternary IDE Controller" msgstr "Controlador IDE quaternário" +msgid "Hard disk" +msgstr "Disco rígido" + msgid "SCSI" msgstr "SCSI" @@ -543,6 +555,9 @@ msgstr "Cassete" msgid "Hard disks:" msgstr "Discos rígidos:" +msgid "Firmware Version" +msgstr "Versão de Firmware" + msgid "&New..." msgstr "&Novo..." @@ -600,8 +615,8 @@ msgstr "Unidades de CD-ROM:" msgid "MO drives:" msgstr "Unidades magneto-ópticas:" -msgid "ZIP drives:" -msgstr "Unidades ZIP:" +msgid "Removable disk drives:" +msgstr "Unidades de disco removível:" msgid "ZIP 250" msgstr "ZIP 250" @@ -627,18 +642,6 @@ msgstr "Placa 3:" msgid "Card 4:" msgstr "Placa 4:" -msgid "Board 1" -msgstr "Placa 1" - -msgid "Board 2" -msgstr "Placa 2" - -msgid "Board 3" -msgstr "Placa 3" - -msgid "Board 4" -msgstr "Placa 4" - msgid "Generic ISA ROM Board" msgstr "Placa ROM ISA Genérica" @@ -669,11 +672,17 @@ msgstr " - PAUSADO" msgid "Speed" msgstr "Velocidade" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "Disco removível %1 (%2): %3" -msgid "ZIP images" -msgstr "Imagens ZIP" +msgid "&Removable disk %1 (%2): %3" +msgstr "Disco &removível %1 (%2): %3" + +msgid "Removable disk images" +msgstr "Imagens de disco removível" + +msgid "Image %1" +msgstr "Imagem %1" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "O 86Box não conseguiu encontrar nenhuma imagem de ROM utilizável.\n\nPor favor, baixe um conjunto de ROM e extraia no diretório \"roms\"." @@ -823,7 +832,7 @@ msgid "Thrustmaster Flight Control System" msgstr "Sistema de Controle de Voo Thrustmaster" msgid "Thrustmaster FCS + Rudder Control System" -msgstr "Thrustmaster SCV + Sistema de Controle de Leme" +msgstr "SCV Thrustmaster + Sistema de Controle de Leme" msgid "2-button gamepad(s)" msgstr "Gamepad(s) de 2 botões" @@ -855,6 +864,9 @@ msgstr "%1 MB (CCS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "Disquete %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "&Disquete %1 (%2): %3" + msgid "Advanced sector images" msgstr "Imagens de setor avançado" @@ -876,6 +888,9 @@ msgstr "Não foi possível inicializar o GhostPCL" msgid "MO %1 (%2): %3" msgstr "Magneto-óptico %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "&Magneto-óptico %1 (%2): %3" + msgid "MO images" msgstr "Imagens magneto-ópticas" @@ -960,12 +975,18 @@ msgstr "Continuar" msgid "Cassette: %1" msgstr "Cassete: %1" +msgid "C&assette: %1" +msgstr "C&assete: %1" + msgid "Cassette images" msgstr "Imagens de cassete" msgid "Cartridge %1: %2" msgstr "Cartucho %1: %2" +msgid "Car&tridge %1: %2" +msgstr "Car&tucho %1: %2" + msgid "Cartridge images" msgstr "Imagens de cartucho" @@ -987,6 +1008,9 @@ msgstr "Reinicialização completa" msgid "ACPI shutdown" msgstr "Desligamento por ACPI" +msgid "ACP&I shutdown" +msgstr "Desligamento por ACP&I" + msgid "Hard disk (%1)" msgstr "Disco rígido (%1)" @@ -1134,6 +1158,9 @@ msgstr "ATAPI" msgid "CD-ROM %1 (%2): %3" msgstr "CD-ROM %1 (%2): %3" +msgid "&CD-ROM %1 (%2): %3" +msgstr "&CD-ROM %1 (%2): %3" + msgid "160 KB" msgstr "160 KB" @@ -1272,41 +1299,41 @@ msgstr "Dispositivos MCA" msgid "List of MCA devices:" msgstr "Lista de dispositivos MCA:" -msgid "Tablet tool" +msgid "&Tablet tool" msgstr "Ferramenta para tablet" msgid "Qt (OpenGL &ES)" msgstr "Qt (OpenGL &ES)" -msgid "About Qt" -msgstr "Sobre o Qt" +msgid "About &Qt" +msgstr "Sobre o &Qt" -msgid "MCA devices..." +msgid "&MCA devices..." msgstr "Dispositivos MCA..." -msgid "Show non-primary monitors" +msgid "Show non-&primary monitors" msgstr "Mostrar monitores não primários" -msgid "Open screenshots folder..." +msgid "Open screenshots &folder..." msgstr "Abrir pasta de capturas de tela..." -msgid "Apply fullscreen stretch mode when maximized" +msgid "Appl&y fullscreen stretch mode when maximized" msgstr "Aplicar modo de ampliação em tela cheia quando maximizado" -msgid "Cursor/Puck" -msgstr "Cursor/Puck" +msgid "&Cursor/Puck" +msgstr "&Cursor/Puck" -msgid "Pen" -msgstr "Caneta" +msgid "&Pen" +msgstr "C&aneta" -msgid "Host CD/DVD Drive (%1:)" -msgstr "Unidade de CD/DVD do anfitrião (%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "&Unidade de CD/DVD do anfitrião (%1:)" msgid "&Connected" msgstr "&Conectado" -msgid "Clear image history" -msgstr "Limpar histórico de imagens" +msgid "Clear image &history" +msgstr "Limpar histórico de imagens(&H)" msgid "Create..." msgstr "Criar..." @@ -1323,6 +1350,9 @@ msgstr "Driver nulo" msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" +msgid "&NIC %1 (%2) %3" +msgstr "&NIC %1 (%2) %3" + msgid "Render behavior" msgstr "Comportamento de renderização" @@ -1428,9 +1458,27 @@ msgstr "Passagem de porta serial 3" msgid "Serial port passthrough 4" msgstr "Passagem de porta serial 4" -msgid "Renderer options..." +msgid "Renderer &options..." msgstr "Opções do renderizador..." +msgid "PC/XT Keyboard" +msgstr "Teclado PC/XT" + +msgid "AT Keyboard" +msgstr "Teclado AT" + +msgid "AX Keyboard" +msgstr "Teclado AX" + +msgid "PS/2 Keyboard" +msgstr "Teclado PS/2" + +msgid "PS/55 Keyboard" +msgstr "Teclado PS/55" + +msgid "Keys" +msgstr "Teclas" + msgid "Logitech/Microsoft Bus Mouse" msgstr "Mouse de barramento Logitech/Microsoft" @@ -1446,15 +1494,24 @@ msgstr "Mouse de barramento Mouse Systems" msgid "Microsoft Serial Mouse" msgstr "Mouse serial Microsoft" +msgid "Microsoft Serial BallPoint" +msgstr "Mouse serial Microsoft BallPoint" + msgid "Logitech Serial Mouse" msgstr "Mouse serial Logitech" msgid "PS/2 Mouse" msgstr "Mouse PS/2" +msgid "PS/2 QuickPort Mouse" +msgstr "Mouse PS/2 QuickPort" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (serial)" +msgid "Default Baud rate" +msgstr "Taxa de transmissão padrão" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] Modem padrão compatível com Hayes" @@ -1494,7 +1551,7 @@ msgstr "Arquivo do BIOS (ROM #3)" msgid "BIOS file (ROM #4)" msgstr "Arquivo do BIOS (ROM #4)" -msgid "BIOS Address" +msgid "BIOS address" msgstr "Endereço do BIOS" msgid "BIOS address (ROM #1)" @@ -1539,9 +1596,6 @@ msgstr "Revisão do BIOS" msgid "BIOS Version" msgstr "Versão do BIOS" -msgid "BIOS Versions" -msgstr "Versões de BIOS" - msgid "BIOS Language" msgstr "Idioma do BIOS" @@ -1663,7 +1717,7 @@ msgid "Reversed stereo" msgstr "Estéreo invertido" msgid "Nice ramp" -msgstr "Bela rampa" +msgstr "Rampa suave" msgid "Hz" msgstr "Hz" @@ -1786,7 +1840,7 @@ msgid "Enable CMS" msgstr "Ativar o CMS" msgid "Mixer" -msgstr "Misturador" +msgstr "Mixer" msgid "High DMA" msgstr "DMA alto" @@ -1854,6 +1908,9 @@ msgstr "Fonte" msgid "Bilinear filtering" msgstr "Filtragem bilinear" +msgid "Video chroma-keying" +msgstr "Chroma-keying de vídeo" + msgid "Dithering" msgstr "Pontilhamento" @@ -1941,11 +1998,11 @@ msgstr "Sempre na velocidade selecionada" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "Configuração do BIOS + teclas de atalho (desativadas durante o POST)" -msgid "64 kB starting from F0000" -msgstr "64 kB a partir de F0000" +msgid "64 KB starting from F0000" +msgstr "64 KB a partir de F0000" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "128 kB a partir de E0000 (endereço MSB invertido, os últimos 64 kB primeiro)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "128 KB a partir de E0000 (endereço MSB invertido, os últimos 64 KB primeiro)" msgid "Sine" msgstr "Senoidal" @@ -2188,7 +2245,7 @@ msgid "Generic Text Printer" msgstr "Impressora de texto genérica" msgid "Generic ESC/P Dot-Matrix Printer" -msgstr "Impressora matricial de pontos ESC/P genérica" +msgstr "Impressora matricial ESC/P genérica" msgid "Generic PostScript Printer" msgstr "Impressora PostScript genérica" @@ -2212,7 +2269,7 @@ msgid "Host Serial Device" msgstr "Dispositivo serial host" msgid "Name of pipe" -msgstr "Nome do tubo" +msgstr "Nome do pipe" msgid "Data bits" msgstr "Bits de dados" @@ -2224,7 +2281,10 @@ msgid "Baud Rate of Passthrough" msgstr "Taxa de transmissão de passagem" msgid "Named Pipe (Server)" -msgstr "Pipe nomeado (servidor)" +msgstr "Pipe nomeado (Servidor)" + +msgid "Named Pipe (Client)" +msgstr "Pipe nomeado (Cliente)" msgid "Host Serial Passthrough" msgstr "Passagem da porta serial do host" @@ -2287,7 +2347,7 @@ msgid "Unable to find Dot-Matrix fonts" msgstr "Não foi possível localizar os fontes matriciais de pontos" msgid "TrueType fonts in the \"roms/printer/fonts\" directory are required for the emulation of the Generic ESC/P Dot-Matrix Printer." -msgstr "As fontes TrueType no diretório \"roms/printer/fonts\" são necessárias para a emulação da impressora matricial de pontos ESC/P genérica." +msgstr "As fontes TrueType no diretório \"roms/printer/fonts\" são necessárias para a emulação da impressora matricial ESC/P genérica." msgid "Inhibit multimedia keys" msgstr "Inibir teclas multimídia" @@ -2370,6 +2430,12 @@ msgstr "Vincular tecla" msgid "Enter key combo:" msgstr "Pressione combinação de teclas:" +msgid "Bind conflict" +msgstr "Conflito de vínculo" + +msgid "This key combo is already in use." +msgstr "Esta combinação de teclas já está em uso." + msgid "Send Control+Alt+Del" msgstr "Enviar Control+Alt+Del" @@ -2394,9 +2460,6 @@ msgstr "Alternar mudo" msgid "Text files" msgstr "Arquivos de texto" -msgid "ROM files (*.bin *.rom)|*.bin,*.rom" -msgstr "Arquivos de ROM (*.bin *.rom)|*.bin,*.rom" - msgid "ROM files" msgstr "Arquivos de ROM" diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po index 795d44e2b..e223d66b3 100644 --- a/src/qt/languages/pt-PT.po +++ b/src/qt/languages/pt-PT.po @@ -27,8 +27,11 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Pausa" -msgid "E&xit..." -msgstr "&Sair..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" +msgstr "&Sair" msgid "&View" msgstr "&Ver" @@ -60,7 +63,7 @@ msgstr "Open&GL (Núcleo 3.0)" msgid "&VNC" msgstr "&VNC" -msgid "Specify dimensions..." +msgid "Specify &dimensions..." msgstr "&Especificar dimensões..." msgid "F&orce 4:3 display ratio" @@ -99,7 +102,7 @@ msgstr "&7x" msgid "&8x" msgstr "&8x" -msgid "Filter method" +msgid "Fi<er method" msgstr "Método de filtragem" msgid "&Nearest" @@ -144,9 +147,15 @@ msgstr "&Tipo de ecrã VGA" msgid "RGB &Color" msgstr "&Cores RGB" +msgid "RGB (no brown)" +msgstr "" + msgid "&RGB Grayscale" msgstr "&RGB em escala de cinzentos" +msgid "Generic RGBI color monitor" +msgstr "" + msgid "&Amber monitor" msgstr "Monitor âmb&ar" @@ -384,6 +393,15 @@ msgstr "Ativada (UTC)" msgid "Dynamic Recompiler" msgstr "Recompilador dinâmico" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "Vídeo:" @@ -399,6 +417,9 @@ msgstr "Gráficos IBM 8514/A" msgid "XGA Graphics" msgstr "Gráficos XGA" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "Rato:" @@ -498,18 +519,21 @@ msgstr "Porta paralela 3" msgid "Parallel port 4" msgstr "Porta paralela 4" -msgid "HD Controller:" -msgstr "Controlador HD:" - msgid "FD Controller:" msgstr "Controlador FD:" +msgid "CD-ROM Controller:" +msgstr "" + msgid "Tertiary IDE Controller" msgstr "Controlador IDE terciário" msgid "Quaternary IDE Controller" msgstr "Controlador IDE quaternário" +msgid "Hard disk" +msgstr "" + msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "Cassete" msgid "Hard disks:" msgstr "Discos rígidos:" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "&Novo..." @@ -588,8 +615,8 @@ msgstr "Unidades CD-ROM:" msgid "MO drives:" msgstr "Unidades magneto-ópticas:" -msgid "ZIP drives:" -msgstr "Unidades ZIP:" +msgid "Removable disk drives:" +msgstr "" msgid "ZIP 250" msgstr "ZIP 250" @@ -600,6 +627,9 @@ msgstr "ISA RTC:" msgid "ISA Memory Expansion" msgstr "Expansão de memória ISA" +msgid "ISA ROM Cards" +msgstr "" + msgid "Card 1:" msgstr "Placa 1:" @@ -612,6 +642,15 @@ msgstr "Placa 3:" msgid "Card 4:" msgstr "Placa 4:" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "Dispositivo ISABugger" @@ -633,11 +672,17 @@ msgstr " - EM PAUSA" msgid "Speed" msgstr "Velocidade" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "" -msgid "ZIP images" -msgstr "Imagens ZIP" +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" +msgstr "" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "O 86Box não conseguiu encontrar nenhuma imagem ROM utilizável.\n\nPor favor, vá a href=\"https://github.com/86Box/roms/releases/latest\">descarregue um pacote ROM e instale-o na pasta \"roms\"." @@ -777,12 +822,39 @@ msgstr "Joystick de 4 eixos, 4 botões" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" msgid "Thrustmaster Flight Control System" msgstr "Thrustmaster Flight Control System" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "Nenhum" @@ -792,6 +864,9 @@ msgstr "%1 MB (CCS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "Disquete %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "&Disquete %1 (%2): %3" + msgid "Advanced sector images" msgstr "Imagens avançadas de sector" @@ -813,6 +888,9 @@ msgstr "Não foi possível inicializar o GhostPCL" msgid "MO %1 (%2): %3" msgstr "Magneto-óptico %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "&Magneto-óptico %1 (%2): %3" + msgid "MO images" msgstr "Imagens magneto-ópticas" @@ -897,12 +975,18 @@ msgstr "Continuar" msgid "Cassette: %1" msgstr "Cassete: %1" +msgid "C&assette: %1" +msgstr "C&assete: %1" + msgid "Cassette images" msgstr "Imagens de cassete" msgid "Cartridge %1: %2" msgstr "Cartucho %1: %2" +msgid "Car&tridge %1: %2" +msgstr "Car&tucho %1: %2" + msgid "Cartridge images" msgstr "Imagens de cartucho" @@ -924,6 +1008,9 @@ msgstr "Reinicialização completa" msgid "ACPI shutdown" msgstr "Encerramento ACPI" +msgid "ACP&I shutdown" +msgstr "Encerramento ACP&I" + msgid "Hard disk (%1)" msgstr "Disco rígido (%1)" @@ -1071,6 +1158,9 @@ msgstr "ATAPI" msgid "CD-ROM %1 (%2): %3" msgstr "CD-ROM %1 (%2): %3" +msgid "&CD-ROM %1 (%2): %3" +msgstr "&CD-ROM %1 (%2): %3" + msgid "160 KB" msgstr "160 KB" @@ -1209,41 +1299,41 @@ msgstr "Dispositivos MCA" msgid "List of MCA devices:" msgstr "Lista de dispositivos MCA:" -msgid "Tablet tool" +msgid "&Tablet tool" msgstr "Ferramenta para tablet" msgid "Qt (OpenGL &ES)" msgstr "Qt (OpenGL &ES)" -msgid "About Qt" -msgstr "Acerca do Qt" +msgid "About &Qt" +msgstr "Acerca do &Qt" -msgid "MCA devices..." +msgid "&MCA devices..." msgstr "Dispositivos MCA..." -msgid "Show non-primary monitors" +msgid "Show non-&primary monitors" msgstr "Mostrar monitores não primários" -msgid "Open screenshots folder..." +msgid "Open screenshots &folder..." msgstr "Abrir a pasta de capturas de ecrã..." -msgid "Apply fullscreen stretch mode when maximized" +msgid "Appl&y fullscreen stretch mode when maximized" msgstr "Aplicar o modo de estiramento na tela cheia quando maximizado" -msgid "Cursor/Puck" -msgstr "Cursor/Puck" +msgid "&Cursor/Puck" +msgstr "&Cursor/Puck" -msgid "Pen" -msgstr "Caneta" +msgid "&Pen" +msgstr "C&aneta" -msgid "Host CD/DVD Drive (%1:)" -msgstr "Unidade de CD/DVD do anfitrião (%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "&Unidade de CD/DVD do anfitrião (%1:)" msgid "&Connected" msgstr "&Conectado" -msgid "Clear image history" -msgstr "Limpar o histórico de imagens" +msgid "Clear image &history" +msgstr "Limpar o histórico de imagens(&H)" msgid "Create..." msgstr "Criar..." @@ -1260,6 +1350,9 @@ msgstr "Condutor nulo" msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" +msgid "&NIC %1 (%2) %3" +msgstr "&NIC %1 (%2) %3" + msgid "Render behavior" msgstr "Comportamento de renderização" @@ -1365,9 +1458,27 @@ msgstr "Passagem da porta de série 3" msgid "Serial port passthrough 4" msgstr "Passagem da porta de série 4" -msgid "Renderer options..." +msgid "Renderer &options..." msgstr "Opções do renderizador..." +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" +msgstr "" + msgid "Logitech/Microsoft Bus Mouse" msgstr "Rato Logitech/Microsoft Bus" @@ -1377,18 +1488,30 @@ msgstr "Rato Microsoft Bus (InPort)" msgid "Mouse Systems Serial Mouse" msgstr "Sistemas de ratos Rato de série" +msgid "Mouse Systems Bus Mouse" +msgstr "" + msgid "Microsoft Serial Mouse" msgstr "Rato de série Microsoft" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "Rato de série Logitech" msgid "PS/2 Mouse" msgstr "Rato PS/2" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (série)" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] Modem padrão compatível com Hayes" @@ -1413,12 +1536,54 @@ msgstr "Sistema MIDI" msgid "MIDI Input Device" msgstr "Dispositivo de entrada MIDI" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" msgstr "Endereço da BIOS" +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" +msgstr "" + msgid "Enable BIOS extension ROM Writes" msgstr "Ativar as escritas de ROM de extensão da BIOS" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "Endereço" @@ -1428,6 +1593,18 @@ msgstr "IRQ" msgid "BIOS Revision" msgstr "Revisão da BIOS" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "Traduzir 26 -> 17" @@ -1443,6 +1620,18 @@ msgstr "Inverter cores" msgid "BIOS size" msgstr "Tamanho da BIOS" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "Mapear C0000-C7FFF como UMB" @@ -1518,6 +1707,9 @@ msgstr "Nível de reverberação" msgid "Interpolation Method" msgstr "Método de interpolação" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" msgstr "Ganho da saída do reverb" @@ -1605,6 +1797,12 @@ msgstr "DMA baixo" msgid "Enable Game port" msgstr "Ativar a porta de jogos" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "Módulo Surround" @@ -1617,6 +1815,9 @@ msgstr "Ativar a interrupção do CODEC na configuração do CODEC (necessário msgid "SB Address" msgstr "Endereço SB" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "WSS IRQ" @@ -1701,9 +1902,15 @@ msgstr "Tipo de RAMDAC" msgid "Blend" msgstr "Mistura" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "Filtragem bilinear" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "Dithering" @@ -1746,6 +1953,33 @@ msgstr "Velocidade de transferência" msgid "EMS mode" msgstr "Modo EMS" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "Endereço para > 2 MB" @@ -1764,11 +1998,11 @@ msgstr "Sempre à velocidade selecionada" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "Definição da BIOS + Teclas de atalho (desligadas durante o POST)" -msgid "64 kB starting from F0000" -msgstr "64 kB a partir de F0000" +msgid "64 KB starting from F0000" +msgstr "64 KB a partir de F0000" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "128 kB a partir de E0000 (endereço MSB invertido, os últimos 64KB primeiro)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "128 KB a partir de E0000 (endereço MSB invertido, os últimos 64 KB primeiro)" msgid "Sine" msgstr "Sinusoidal" @@ -1902,6 +2136,15 @@ msgstr "interpolação sRGB" msgid "Linear interpolation" msgstr "Interpolação linear" +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" + msgid "128 KB" msgstr "128 KB" @@ -1935,6 +2178,9 @@ msgstr "Âmbar" msgid "Gray" msgstr "Cinzento" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "Cor" @@ -1950,6 +2196,12 @@ msgstr "Outros idiomas" msgid "Bochs latest" msgstr "Bochs mais recente" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "Monocromático não entrelaçado" @@ -2031,6 +2283,9 @@ msgstr "Taxa de transmissão de passagem" msgid "Named Pipe (Server)" msgstr "Tubo nomeado (servidor)" +msgid "Named Pipe (Client)" +msgstr "" + msgid "Host Serial Passthrough" msgstr "Passagem da porta de série do anfitrião" @@ -2076,6 +2331,12 @@ msgstr "Clone IBM 8514/A (ISA)" msgid "Vendor" msgstr "Fabricante" +msgid "30 Hz (JMP2 = 1)" +msgstr "" + +msgid "60 Hz (JMP2 = 2)" +msgstr "" + msgid "Generic PC/XT Memory Expansion" msgstr "Expansão de memória genérica PC/XT" @@ -2147,3 +2408,72 @@ msgstr "" msgid "Could not load file %1" msgstr "" + +msgid "Key Bindings:" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" + +#~ msgid "HD Controller:" +#~ msgstr "Controlador HD:" + +#~ msgid "ZIP drives:" +#~ msgstr "Unidades ZIP:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "Imagens ZIP" diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po index fe961cc60..e8ab0b429 100644 --- a/src/qt/languages/ru-RU.po +++ b/src/qt/languages/ru-RU.po @@ -27,8 +27,11 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Пауза" -msgid "E&xit..." -msgstr "&Выход..." +msgid "Re&sume" +msgstr "В&озобновить" + +msgid "E&xit" +msgstr "&Выход" msgid "&View" msgstr "&Вид" @@ -60,7 +63,7 @@ msgstr "Open&GL (3.0 Core)" msgid "&VNC" msgstr "&VNC" -msgid "Specify dimensions..." +msgid "Specify &dimensions..." msgstr "&Указать размеры главного окна..." msgid "F&orce 4:3 display ratio" @@ -99,8 +102,8 @@ msgstr "&7x" msgid "&8x" msgstr "&8x" -msgid "Filter method" -msgstr "Метод фильтрации" +msgid "Fi<er method" +msgstr "Метод &фильтрации" msgid "&Nearest" msgstr "&Ближайший" @@ -144,12 +147,12 @@ msgstr "&Тип экрана VGA" msgid "RGB &Color" msgstr "RGB &цветной" -msgid "&RGB Grayscale" -msgstr "&RGB монохромный" - msgid "RGB (no brown)" msgstr "RGB (без коричневого)" +msgid "&RGB Grayscale" +msgstr "&RGB монохромный" + msgid "Generic RGBI color monitor" msgstr "Стандартный цветной монитор RGBI" @@ -214,7 +217,7 @@ msgid "End trace" msgstr "Завершить трассировку" msgid "&Help" -msgstr "&Помощь" +msgstr "&Справка" msgid "&Documentation..." msgstr "&Документация..." @@ -414,6 +417,9 @@ msgstr "Ускоритель IBM 8514/A" msgid "XGA Graphics" msgstr "Ускоритель XGA" +msgid "Keyboard:" +msgstr "Клавиатура:" + msgid "Mouse:" msgstr "Мышь:" @@ -513,18 +519,21 @@ msgstr "Параллельный порт LPT3" msgid "Parallel port 4" msgstr "Параллельный порт LPT4" -msgid "HD Controller:" -msgstr "Контроллер HD:" - msgid "FD Controller:" msgstr "Контроллер FD:" +msgid "CD-ROM Controller:" +msgstr "Контроллер CD-ROM:" + msgid "Tertiary IDE Controller" msgstr "Третичный IDE контроллер" msgid "Quaternary IDE Controller" msgstr "Четвертичный IDE контроллер" +msgid "Hard disk" +msgstr "Жёсткий диск" + msgid "SCSI" msgstr "SCSI" @@ -546,6 +555,9 @@ msgstr "Кассета" msgid "Hard disks:" msgstr "Жёсткие диски:" +msgid "Firmware Version" +msgstr "Версия прошивки" + msgid "&New..." msgstr "&Создать..." @@ -603,8 +615,8 @@ msgstr "Дисководы CD-ROM:" msgid "MO drives:" msgstr "Магнитооптические дисководы:" -msgid "ZIP drives:" -msgstr "ZIP дисководы:" +msgid "Removable disk drives:" +msgstr "Дисководы съёмных дисков:" msgid "ZIP 250" msgstr "ZIP 250" @@ -630,6 +642,15 @@ msgstr "Карта 3:" msgid "Card 4:" msgstr "Карта 4:" +msgid "Generic ISA ROM Board" +msgstr "Стандартная плата ПЗУ ISA" + +msgid "Generic Dual ISA ROM Board" +msgstr "Стандартная плата на 2 ПЗУ ISA" + +msgid "Generic Quad ISA ROM Board" +msgstr "Стандартная плата на 4 ПЗУ ISA" + msgid "ISABugger device" msgstr "Устройство ISABugger" @@ -651,11 +672,17 @@ msgstr " - ПАУЗА" msgid "Speed" msgstr "Скорость" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "Съёмный диск %1 (%2): %3" -msgid "ZIP images" -msgstr "Образы ZIP" +msgid "&Removable disk %1 (%2): %3" +msgstr "&Съёмный диск %1 (%2): %3" + +msgid "Removable disk images" +msgstr "Образы съёмных дисков" + +msgid "Image %1" +msgstr "Образ %1" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box не смог найти ни одного подходящего для использования файла с ПЗУ.\n\nПожалуйста скачайте набор ПЗУ и извлеките его в каталог \"roms\"." @@ -774,21 +801,9 @@ msgstr "Неверное устройство PCap" msgid "2-axis, 2-button joystick(s)" msgstr "2-осевой, 2-кнопочный джойстик" -msgid "2-button gamepad(s)" -msgstr "2-кнопочный геймпад" - -msgid "2-button flight yoke" -msgstr "2-кнопочный flight yoke" - msgid "2-axis, 4-button joystick" msgstr "2-осевой, 4-кнопочный джойстик" -msgid "4-button gamepad" -msgstr "4-кнопочный геймпад" - -msgid "4-button flight yoke" -msgstr "4-кнопочный flight yoke" - msgid "2-axis, 6-button joystick" msgstr "2-осевой, 6-кнопочный джойстик" @@ -798,18 +813,9 @@ msgstr "2-осевой, 8-кнопочный джойстик" msgid "3-axis, 2-button joystick" msgstr "3-осевой, 2-кнопочный джойстик" -msgid "2-button flight yoke with throttle" -msgstr "2-кнопочный flight yoke с дросселем" - msgid "3-axis, 4-button joystick" msgstr "3-осевой, 4-кнопочный джойстик" -msgid "Win95 Steering Wheel (3-axis, 4-button)" -msgstr "Руль Win95 (3-осевой, 4-кнопочный)" - -msgid "4-button flight yoke with throttle" -msgstr "4-кнопочный flight yoke с дросселем" - msgid "4-axis, 4-button joystick" msgstr "4-осевой, 4-кнопочный джойстик" @@ -828,6 +834,27 @@ msgstr "Система управления полётом Thrustmaster" msgid "Thrustmaster FCS + Rudder Control System" msgstr "Thrustmaster FCS + Система управления рулем" +msgid "2-button gamepad(s)" +msgstr "2-кнопочный геймпад" + +msgid "2-button flight yoke" +msgstr "2-кнопочный flight yoke" + +msgid "4-button gamepad" +msgstr "4-кнопочный геймпад" + +msgid "4-button flight yoke" +msgstr "4-кнопочный flight yoke" + +msgid "2-button flight yoke with throttle" +msgstr "2-кнопочный flight yoke с дросселем" + +msgid "4-button flight yoke with throttle" +msgstr "4-кнопочный flight yoke с дросселем" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "Руль Win95 (3-осевой, 4-кнопочный)" + msgid "None" msgstr "Нет" @@ -837,6 +864,9 @@ msgstr "%1 МБ (CHS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "Дисковод %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "&Дисковод %1 (%2): %3" + msgid "Advanced sector images" msgstr "Расширенные образы секторов" @@ -858,6 +888,9 @@ msgstr "Невозможно инициализировать GhostPCL" msgid "MO %1 (%2): %3" msgstr "Магнитооптический %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "&Магнитооптический %1 (%2): %3" + msgid "MO images" msgstr "Образы магнитооптических дисков" @@ -942,12 +975,18 @@ msgstr "Продолжить" msgid "Cassette: %1" msgstr "Кассета: %1" +msgid "C&assette: %1" +msgstr "&Кассета: %1" + msgid "Cassette images" msgstr "Образы кассет" msgid "Cartridge %1: %2" msgstr "Картридж %1: %2" +msgid "Car&tridge %1: %2" +msgstr "Кар&тридж %1: %2" + msgid "Cartridge images" msgstr "Образы картриджей" @@ -969,6 +1008,9 @@ msgstr "Холодная перезагрузка" msgid "ACPI shutdown" msgstr "Сигнал завершения ACPI" +msgid "ACP&I shutdown" +msgstr "Сигнал завершения ACP&I" + msgid "Hard disk (%1)" msgstr "Жёсткий диск (%1)" @@ -1116,6 +1158,9 @@ msgstr "ATAPI" msgid "CD-ROM %1 (%2): %3" msgstr "CD-ROM %1 (%2): %3" +msgid "&CD-ROM %1 (%2): %3" +msgstr "&CD-ROM %1 (%2): %3" + msgid "160 KB" msgstr "160 КБ" @@ -1254,41 +1299,41 @@ msgstr "Устройства MCA" msgid "List of MCA devices:" msgstr "Список устройств MCA:" -msgid "Tablet tool" -msgstr "Планшетный инструмент" +msgid "&Tablet tool" +msgstr "Планшетный &инструмент" msgid "Qt (OpenGL &ES)" msgstr "Qt (OpenGL &ES)" -msgid "About Qt" -msgstr "О Qt" +msgid "About &Qt" +msgstr "О &Qt" -msgid "MCA devices..." -msgstr "Устройства MCA..." +msgid "&MCA devices..." +msgstr "Устройства &MCA..." -msgid "Show non-primary monitors" +msgid "Show non-&primary monitors" msgstr "&Показывать неосновные мониторы" -msgid "Open screenshots folder..." -msgstr "Открыть папку скриншотов..." +msgid "Open screenshots &folder..." +msgstr "Открыть папку &скриншотов..." -msgid "Apply fullscreen stretch mode when maximized" -msgstr "Применить полноэкранный режим растяжения при разворачивании окна" +msgid "Appl&y fullscreen stretch mode when maximized" +msgstr "Применить полно&экранный режим растяжения при разворачивании окна" -msgid "Cursor/Puck" -msgstr "Курсор/шайба" +msgid "&Cursor/Puck" +msgstr "&Курсор/шайба" -msgid "Pen" -msgstr "Ручка" +msgid "&Pen" +msgstr "&Ручка" -msgid "Host CD/DVD Drive (%1:)" -msgstr "CD/DVD Привод хоста (%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "CD/DVD Привод &хоста (%1:)" msgid "&Connected" msgstr "&Кабель подключен" -msgid "Clear image history" -msgstr "Очистить историю образов" +msgid "Clear image &history" +msgstr "Очистить &историю образов" msgid "Create..." msgstr "Создать..." @@ -1305,6 +1350,9 @@ msgstr "Нулевой драйвер" msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" +msgid "&NIC %1 (%2) %3" +msgstr "&NIC %1 (%2) %3" + msgid "Render behavior" msgstr "Режим рендеринга" @@ -1410,8 +1458,26 @@ msgstr "Сквозной последовательный порт COM3" msgid "Serial port passthrough 4" msgstr "Сквозной последовательный порт COM4" -msgid "Renderer options..." -msgstr "Параметры рендеринга..." +msgid "Renderer &options..." +msgstr "Параметры &рендеринга..." + +msgid "PC/XT Keyboard" +msgstr "Клавиатура PC/XT" + +msgid "AT Keyboard" +msgstr "Клавиатура AT" + +msgid "AX Keyboard" +msgstr "Клавиатура AX" + +msgid "PS/2 Keyboard" +msgstr "Клавиатура PS/2" + +msgid "PS/55 Keyboard" +msgstr "Клавиатура PS/55" + +msgid "Keys" +msgstr "Клавиши" msgid "Logitech/Microsoft Bus Mouse" msgstr "Bus-мышь Logitech/Microsoft" @@ -1428,15 +1494,24 @@ msgstr "Bus-мышь Mouse Systems" msgid "Microsoft Serial Mouse" msgstr "COM-мышь Microsoft" +msgid "Microsoft Serial BallPoint" +msgstr "COM-мышь Microsoft BallPoint" + msgid "Logitech Serial Mouse" msgstr "COM-мышь Logitech" msgid "PS/2 Mouse" msgstr "Мышь PS/2" +msgid "PS/2 QuickPort Mouse" +msgstr "Мышь PS/2 QuickPort" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (последовательный)" +msgid "Default Baud rate" +msgstr "Скорость передачи данных по умолчанию" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] Стандартный Hayes-совместимый модем" @@ -1476,7 +1551,7 @@ msgstr "Файл BIOS (ПЗУ #3)" msgid "BIOS file (ROM #4)" msgstr "Файл BIOS (ПЗУ #4)" -msgid "BIOS Address" +msgid "BIOS address" msgstr "Адрес BIOS" msgid "BIOS address (ROM #1)" @@ -1521,9 +1596,6 @@ msgstr "Версия BIOS" msgid "BIOS Version" msgstr "Версия BIOS" -msgid "BIOS Versions" -msgstr "Версии BIOS" - msgid "BIOS Language" msgstr "Язык BIOS" @@ -1833,21 +1905,12 @@ msgstr "Смесь" msgid "Font" msgstr "Шрифт" -msgid "Has secondary 8x8 character set" -msgstr "Вторичный набор символов 8x8" - -msgid "Has Quadcolor II daughter board" -msgstr "Дочерняя плата Quadcolor II" - -msgid "Alternate monochrome contrast" -msgstr "Альтернативный монохромный контраст" +msgid "Bilinear filtering" +msgstr "Билинейная фильтрация" msgid "Video chroma-keying" msgstr "Видео хромакеинг" -msgid "Bilinear filtering" -msgstr "Билинейная фильтрация" - msgid "Dithering" msgstr "Дизеринг" @@ -1935,10 +1998,10 @@ msgstr "Всегда на выбранной скорости" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "Настройка BIOS + горячие клавиши (отключается во время POST)" -msgid "64 kB starting from F0000" +msgid "64 KB starting from F0000" msgstr "64 КБ, начиная с F0000" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" msgstr "128 КБ, начиная с E0000 (адрес MSB инвертирован, сначала последние 64 КБ)" msgid "Sine" @@ -2073,6 +2136,15 @@ msgstr "Интерполяция sRGB" msgid "Linear interpolation" msgstr "Линейная интерполяция" +msgid "Has secondary 8x8 character set" +msgstr "Вторичный набор символов 8x8" + +msgid "Has Quadcolor II daughter board" +msgstr "Дочерняя плата Quadcolor II" + +msgid "Alternate monochrome contrast" +msgstr "Альтернативный монохромный контраст" + msgid "128 KB" msgstr "128 КБ" @@ -2358,6 +2430,12 @@ msgstr "Привязать клавишу" msgid "Enter key combo:" msgstr "Введите комбинацию клавиш:" +msgid "Bind conflict" +msgstr "Конфликт привязки" + +msgid "This key combo is already in use." +msgstr "Эта комбинация клавиш уже используется." + msgid "Send Control+Alt+Del" msgstr "Отправить Control+Alt+Del" @@ -2387,3 +2465,15 @@ msgstr "Файлы ПЗУ" msgid "SoundFont files" msgstr "Файлы SoundFont" + +#~ msgid "HD Controller:" +#~ msgstr "Контроллер HD:" + +#~ msgid "ZIP drives:" +#~ msgstr "ZIP дисководы:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "Образы ZIP" diff --git a/src/qt/languages/sk-SK.po b/src/qt/languages/sk-SK.po index ef89f831a..3faa2e972 100644 --- a/src/qt/languages/sk-SK.po +++ b/src/qt/languages/sk-SK.po @@ -27,7 +27,10 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "P&ozastaviť" -msgid "E&xit..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" msgstr "&Ukončiť" msgid "&View" @@ -60,7 +63,7 @@ msgstr "Open&GL (3.0 Core)" msgid "&VNC" msgstr "&VNC" -msgid "Specify dimensions..." +msgid "Specify &dimensions..." msgstr "&Zadať veľkosť..." msgid "F&orce 4:3 display ratio" @@ -99,7 +102,7 @@ msgstr "&7x" msgid "&8x" msgstr "&8x" -msgid "Filter method" +msgid "Fi<er method" msgstr "Spôsob &filtrovania" msgid "&Nearest" @@ -144,9 +147,15 @@ msgstr "&Typ monitora VGA" msgid "RGB &Color" msgstr "RGB &farebný" +msgid "RGB (no brown)" +msgstr "" + msgid "&RGB Grayscale" msgstr "&Odtiene sivej" +msgid "Generic RGBI color monitor" +msgstr "" + msgid "&Amber monitor" msgstr "&Jantárová obrazovka" @@ -384,6 +393,15 @@ msgstr "Zapnutá (UTC)" msgid "Dynamic Recompiler" msgstr "Dynamický prekladač" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "Grafika:" @@ -399,6 +417,9 @@ msgstr "Grafika IBM 8514/A" msgid "XGA Graphics" msgstr "Grafika XGA" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "Myš:" @@ -498,18 +519,21 @@ msgstr "Povoliť port LPT3" msgid "Parallel port 4" msgstr "Povoliť port LPT4" -msgid "HD Controller:" -msgstr "Radič disku:" - msgid "FD Controller:" msgstr "Disketový radič:" +msgid "CD-ROM Controller:" +msgstr "" + msgid "Tertiary IDE Controller" msgstr "Tretí radič IDE" msgid "Quaternary IDE Controller" msgstr "Štvrtý radič IDE" +msgid "Hard disk" +msgstr "" + msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "Kazeta" msgid "Hard disks:" msgstr "Pevné disky:" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "&Nový..." @@ -588,8 +615,8 @@ msgstr "Mechaniky CD-ROM:" msgid "MO drives:" msgstr "Magnetooptické mechaniky:" -msgid "ZIP drives:" -msgstr "Mechaniky ZIP:" +msgid "Removable disk drives:" +msgstr "" msgid "ZIP 250" msgstr "ZIP 250" @@ -600,6 +627,9 @@ msgstr "ISA hodiny:" msgid "ISA Memory Expansion" msgstr "ISA rozšírenie pamäte" +msgid "ISA ROM Cards" +msgstr "" + msgid "Card 1:" msgstr "Karta 1:" @@ -612,6 +642,15 @@ msgstr "Karta 3:" msgid "Card 4:" msgstr "Karta 4:" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "Zariadenie ISABugger" @@ -633,11 +672,17 @@ msgstr " - POZASTAVENÝ" msgid "Speed" msgstr "Rýchlosť" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "" -msgid "ZIP images" -msgstr "Obrazy ZIP diskov" +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" +msgstr "" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box nenašiel žiadne použiteľné imidž pamätí ROM.\n\nStiahnite sadu obrazov ROM a extrahujte ju do zložky \"roms\"." @@ -777,12 +822,39 @@ msgstr "4-osový, 4-tlačidlový joystick" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" msgid "Thrustmaster Flight Control System" msgstr "Thrustmaster Flight Control System" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "Žiadne" @@ -792,6 +864,9 @@ msgstr "%1 MB (CHS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "Disketová mechanika %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "&Disketová mechanika %1 (%2): %3" + msgid "Advanced sector images" msgstr "Rozšírené sektorové obrazy" @@ -813,6 +888,9 @@ msgstr "Nastala chyba pri inicializácii knižnice GhostPCL" msgid "MO %1 (%2): %3" msgstr "MO %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "&MO %1 (%2): %3" + msgid "MO images" msgstr "Obrazy MO" @@ -849,7 +927,7 @@ msgstr "Emulátor starých počítačov\n\nAutori: Miran Grča (OBattler), Richa msgid "Hardware not available" msgstr "Hardvér nie je dostupný" -msgid "Make sure %1 is installed and that you are on a libpcap-compatible network connection." +msgid "Make sure %1 is installed and that you are on a %1-compatible network connection." msgstr "Uistite sa, že je nainštalovaný %1 a používate sieťové pripojenie s ním kompatibilné." msgid "Invalid configuration" @@ -858,7 +936,7 @@ msgstr "Neplatná konfigurácia" msgid "%1 is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." msgstr "%1 je potrebná pre automatický prevod PostScript dokumentov do PDF.\n\nAkékoľvek dokumenty vytlačené cez všeobecnú PostScriptovú tlačiareň budú uložené ako PostScript (.ps) súbory." -msgid "%1 is required for automatic conversion of PCL files to PDF.\n\nAny documents sent to the generic PCL printer will be saved as Printer Command Lnaugage (.pcl) files." +msgid "%1 is required for automatic conversion of PCL files to PDF.\n\nAny documents sent to the generic PCL printer will be saved as Printer Command Language (.pcl) files." msgstr "%1 je potrebná pre automatický prevod PCL dokumentov do PDF.\n\nAkékoľvek dokumenty vytlačené cez všeobecnú PCLovú tlačiareň budú uložené ako Printer Command Language (.pcl) súbory." msgid "Don't show this message again" @@ -897,12 +975,18 @@ msgstr "Pokračovať" msgid "Cassette: %1" msgstr "Kazeta: %1" +msgid "C&assette: %1" +msgstr "K&azeta: %1" + msgid "Cassette images" msgstr "Kazetové nahrávky" msgid "Cartridge %1: %2" msgstr "Cartridge %1: %2" +msgid "Car&tridge %1: %2" +msgstr "Car&tridge %1: %2" + msgid "Cartridge images" msgstr "Obrazy cartridge" @@ -924,6 +1008,9 @@ msgstr "Resetovať" msgid "ACPI shutdown" msgstr "Vypnúť cez rozhranie ACPI" +msgid "ACP&I shutdown" +msgstr "Vypnúť cez rozhranie ACP&I" + msgid "Hard disk (%1)" msgstr "Pevný disk (%1)" @@ -1209,40 +1296,40 @@ msgstr "Zariadenia MCA" msgid "List of MCA devices:" msgstr "Zoznam zariadení MCA:" -msgid "Tablet tool" +msgid "&Tablet tool" msgstr "Nástroj pre tablety" msgid "Qt (OpenGL &ES)" msgstr "Qt (OpenGL &ES)" -msgid "About Qt" -msgstr "O Qt" +msgid "About &Qt" +msgstr "O &Qt" -msgid "MCA devices..." +msgid "&MCA devices..." msgstr "Zariadenia MCA..." -msgid "Show non-primary monitors" +msgid "Show non-&primary monitors" msgstr "Zobrazenie iných ako primárnych monitorov" -msgid "Open screenshots folder..." +msgid "Open screenshots &folder..." msgstr "Otvorte priečinok so snímkami obrazovky..." -msgid "Apply fullscreen stretch mode when maximized" +msgid "Appl&y fullscreen stretch mode when maximized" msgstr "Použitie režimu roztiahnutia na celú obrazovku pri maximalizácii" -msgid "Cursor/Puck" -msgstr "Kurzor/Puck" +msgid "&Cursor/Puck" +msgstr "&Kurzor/Puck" -msgid "Pen" -msgstr "Pero" +msgid "&Pen" +msgstr "&Pero" -msgid "Host CD/DVD Drive (%1:)" -msgstr "Hostiteľská jednotka CD/DVD (%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "&Hostiteľská jednotka CD/DVD (%1:)" msgid "&Connected" msgstr "" -msgid "Clear image history" +msgid "Clear image &history" msgstr "Vymazanie histórie obrázkov" msgid "Create..." @@ -1260,7 +1347,6 @@ msgstr "Nulový ovládač" msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" - msgid "Render behavior" msgstr "Správanie pri vykresľovaní" @@ -1366,9 +1452,27 @@ msgstr "Priechod sériového portu 3" msgid "Serial port passthrough 4" msgstr "Priechod cez sériový port 4" -msgid "Renderer options..." +msgid "Renderer &options..." msgstr "Možnosti vykresľovača..." +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" +msgstr "" + msgid "Logitech/Microsoft Bus Mouse" msgstr "Zbernicová myš Logitech/Microsoft" @@ -1378,18 +1482,30 @@ msgstr "Zbernicová myš Microsoft (InPort)" msgid "Mouse Systems Serial Mouse" msgstr "Zbernicová myš Mouse Systems" +msgid "Mouse Systems Bus Mouse" +msgstr "" + msgid "Microsoft Serial Mouse" msgstr "Sériová myš Microsoft" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "Sériová myš Logitech" msgid "PS/2 Mouse" msgstr "Myš PS/2" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (sériová)" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] Štandardný modem kompatibilný s Hayesom" @@ -1414,12 +1530,54 @@ msgstr "Systém MIDI" msgid "MIDI Input Device" msgstr "Vstupné zariadenie MIDI" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" msgstr "Adresa BIOS" +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" +msgstr "" + msgid "Enable BIOS extension ROM Writes" msgstr "Povolenie zápisu do pamäte ROM s rozšírením BIOS" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "Adresa" @@ -1429,6 +1587,18 @@ msgstr "IRQ" msgid "BIOS Revision" msgstr "Revízia systému BIOS" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "Preložiť 26 -> 17" @@ -1444,6 +1614,18 @@ msgstr "Invertovanie farieb" msgid "BIOS size" msgstr "Veľkosť systému BIOS" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "Mapa C0000-C7FFF ako UMB" @@ -1519,6 +1701,9 @@ msgstr "Úroveň dozvuku" msgid "Interpolation Method" msgstr "Metóda interpolácie" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" msgstr "Zosilnenie výstupu dozvuku" @@ -1606,6 +1791,12 @@ msgstr "Nízka hodnota DMA" msgid "Enable Game port" msgstr "Povolenie herného portu" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "Surround modul" @@ -1618,6 +1809,9 @@ msgstr "Zvýšenie prerušenia CODEC pri nastavení CODEC (potrebné v niektorý msgid "SB Address" msgstr "Adresa SB" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "WSS IRQ" @@ -1702,9 +1896,15 @@ msgstr "Typ RAMDAC" msgid "Blend" msgstr "Zmes" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "Bilineárne filtrovanie" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "Dithering" @@ -1747,6 +1947,33 @@ msgstr "Rýchlosť prenosu" msgid "EMS mode" msgstr "Režim EMS" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "Adresa pre > 2 MB" @@ -1765,11 +1992,11 @@ msgstr "Vždy pri zvolenej rýchlosti" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "Nastavenie BIOS + klávesové skratky (vypnuté počas POST)" -msgid "64 kB starting from F0000" -msgstr "64 kB od F0000" +msgid "64 KB starting from F0000" +msgstr "64 KB od F0000" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "128 kB od E0000 (adresa MSB invertovaná, najprv posledných 64 kB)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "128 KB od E0000 (adresa MSB invertovaná, najprv posledných 64 KB)" msgid "Sine" msgstr "Sinusový" @@ -1903,6 +2130,15 @@ msgstr "Interpolácia sRGB" msgid "Linear interpolation" msgstr "Lineárna interpolácia" +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" + msgid "128 KB" msgstr "128 KB" @@ -1936,6 +2172,9 @@ msgstr "Oranžový" msgid "Gray" msgstr "Šedý" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "Farebný" @@ -1951,6 +2190,12 @@ msgstr "Ostatné jazyky" msgid "Bochs latest" msgstr "Bochs najnovšie" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "Mono bez prelínania" @@ -2032,6 +2277,9 @@ msgstr "Prenosová rýchlosť priechodu" msgid "Named Pipe (Server)" msgstr "Pomenované potrubie (server)" +msgid "Named Pipe (Client)" +msgstr "" + msgid "Host Serial Passthrough" msgstr "Priechod sériového portu hostiteľa" @@ -2077,6 +2325,12 @@ msgstr "Klon IBM 8514/A (ISA)" msgid "Vendor" msgstr "Výrobca" +msgid "30 Hz (JMP2 = 1)" +msgstr "" + +msgid "60 Hz (JMP2 = 2)" +msgstr "" + msgid "Generic PC/XT Memory Expansion" msgstr "Všeobecné rozšírenie pamäte PC/XT" @@ -2148,3 +2402,72 @@ msgstr "" msgid "Could not load file %1" msgstr "" + +msgid "Key Bindings:" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" + +#~ msgid "HD Controller:" +#~ msgstr "Radič disku:" + +#~ msgid "ZIP drives:" +#~ msgstr "Mechaniky ZIP:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "Obrazy ZIP diskov" diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po index d4fd10e43..0f99dab68 100644 --- a/src/qt/languages/sl-SI.po +++ b/src/qt/languages/sl-SI.po @@ -27,8 +27,11 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Premor" -msgid "E&xit..." -msgstr "Iz&hod..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" +msgstr "Iz&hod" msgid "&View" msgstr "&Pogled" @@ -60,7 +63,7 @@ msgstr "Open&GL (jedro 3.0)" msgid "&VNC" msgstr "&VNC" -msgid "Specify dimensions..." +msgid "Specify &dimensions..." msgstr "&Določi velikost..." msgid "F&orce 4:3 display ratio" @@ -99,7 +102,7 @@ msgstr "&7x" msgid "&8x" msgstr "&8x" -msgid "Filter method" +msgid "Fi<er method" msgstr "&Vrsta filtriranja" msgid "&Nearest" @@ -144,9 +147,15 @@ msgstr "&Vrsta zaslona VGA" msgid "RGB &Color" msgstr "&Barvni RGB" +msgid "RGB (no brown)" +msgstr "" + msgid "&RGB Grayscale" msgstr "&Sivinski RGB" +msgid "Generic RGBI color monitor" +msgstr "" + msgid "&Amber monitor" msgstr "&Rumeni zaslon" @@ -384,6 +393,15 @@ msgstr "Omogočeno (UTC)" msgid "Dynamic Recompiler" msgstr "Dinamični prevajalnik" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "Video:" @@ -399,6 +417,9 @@ msgstr "Grafika IBM 8514/A" msgid "XGA Graphics" msgstr "Grafika XGA" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "Miška:" @@ -498,18 +519,21 @@ msgstr "Vzporedna vrata 3" msgid "Parallel port 4" msgstr "Vzporedna vrata 4" -msgid "HD Controller:" -msgstr "Krmilnik trdega diska:" - msgid "FD Controller:" msgstr "Disketni krmilnik:" +msgid "CD-ROM Controller:" +msgstr "" + msgid "Tertiary IDE Controller" msgstr "Terciarni krmilnik IDE" msgid "Quaternary IDE Controller" msgstr "Kvartarni krmilnik IDE" +msgid "Hard disk" +msgstr "" + msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "Kasetnik" msgid "Hard disks:" msgstr "Trdi diski:" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "Nov..." @@ -588,8 +615,8 @@ msgstr "Pogoni CD-ROM:" msgid "MO drives:" msgstr "Magnetno-optični pogoni:" -msgid "ZIP drives:" -msgstr "Pogoni ZIP:" +msgid "Removable disk drives:" +msgstr "" msgid "ZIP 250" msgstr "ZIP 250" @@ -600,6 +627,9 @@ msgstr "Ura realnega časa ISA:" msgid "ISA Memory Expansion" msgstr "Razširitev pomnilnika ISA" +msgid "ISA ROM Cards" +msgstr "" + msgid "Card 1:" msgstr "Kartica 1:" @@ -612,6 +642,15 @@ msgstr "Kartica 3:" msgid "Card 4:" msgstr "Kartica 4:" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "Naprava ISABugger" @@ -633,11 +672,17 @@ msgstr " - ZAUSTAVLJEN" msgid "Speed" msgstr "Hitrost" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "" -msgid "ZIP images" -msgstr "ZIP slike" +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" +msgstr "" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box ni našel nobenih uporabnih ROM slik.\n\nProsim prenesite komplet ROM-ov in ga razširite v mapo \"roms\"." @@ -777,12 +822,39 @@ msgstr "Igralna palica z 4 osmi, 4 gumbi" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" msgid "Thrustmaster Flight Control System" msgstr "Thrustmaster Flight Control System" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "Brez" @@ -792,6 +864,9 @@ msgstr "%1 MB (CHS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "Disketa %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "&Disketa %1 (%2): %3" + msgid "Advanced sector images" msgstr "Napredne sektorske slike" @@ -813,6 +888,9 @@ msgstr "GhostPCL-ja ni bilo mogoče inicializirati" msgid "MO %1 (%2): %3" msgstr "MO %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "&MO %1 (%2): %3" + msgid "MO images" msgstr "Slike MO" @@ -849,8 +927,8 @@ msgstr "Emulator starih računalnikov\n\nAvtorji: Miran Grča (OBattler), Richar msgid "Hardware not available" msgstr "Strojna oprema ni na voljo" -msgid "Make sure %1 is installed and that you are on a libpcap-compatible network connection." -msgstr "Prepičajte se, da je nameščen %1 in da ste na omrežni povezavi, združljivi z libpcap." +msgid "Make sure %1 is installed and that you are on a %1-compatible network connection." +msgstr "Prepičajte se, da je nameščen %1 in da ste na omrežni povezavi, združljivi z %1." msgid "Invalid configuration" msgstr "Neveljavna konfiguracija" @@ -858,7 +936,7 @@ msgstr "Neveljavna konfiguracija" msgid "%1 is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." msgstr "%1 je potreben za samodejno pretvorbo datotek PostScript v PDF.\n\nVsi dokumenti, poslani generičnemu tiskalniku PostScript bodo shranjeni kot datoteke PostScript (.ps)." -msgid "%1 is required for automatic conversion of PCL files to PDF.\n\nAny documents sent to the generic PCL printer will be saved as Printer Command Lnaugage (.pcl) files." +msgid "%1 is required for automatic conversion of PCL files to PDF.\n\nAny documents sent to the generic PCL printer will be saved as Printer Command Language (.pcl) files." msgstr "%1 je potreben za samodejno pretvorbo datotek PCL v PDF.\n\nVsi dokumenti, poslani generičnemu tiskalniku PCL bodo shranjeni kot datoteke Printer Command Language (.pcl)." msgid "Don't show this message again" @@ -897,12 +975,18 @@ msgstr "Nadaljuj" msgid "Cassette: %1" msgstr "Kaseta: %1" +msgid "C&assette: %1" +msgstr "K&aseta: %1" + msgid "Cassette images" msgstr "Slike kaset" msgid "Cartridge %1: %2" msgstr "Spominski vložek %1: %2" +msgid "Car&tridge %1: %2" +msgstr "S&pominski vložek %1: %2" + msgid "Cartridge images" msgstr "Slike spominskega vložka" @@ -924,6 +1008,9 @@ msgstr "Ponovni zagon" msgid "ACPI shutdown" msgstr "Zaustavitev ACPI" +msgid "ACP&I shutdown" +msgstr "Zaustavitev ACP&I" + msgid "Hard disk (%1)" msgstr "Trdi disk (%1)" @@ -1209,40 +1296,40 @@ msgstr "Naprave MCA" msgid "List of MCA devices:" msgstr "Seznam naprav MCA:" -msgid "Tablet tool" +msgid "&Tablet tool" msgstr "Orodje za tablico" msgid "Qt (OpenGL &ES)" msgstr "Qt (OpenGL &ES)" -msgid "About Qt" -msgstr "O programu Qt" +msgid "About &Qt" +msgstr "O programu &Qt" -msgid "MCA devices..." +msgid "&MCA devices..." msgstr "Naprave MCA..." -msgid "Show non-primary monitors" +msgid "Show non-&primary monitors" msgstr "Prikaži neprimarne monitorje" -msgid "Open screenshots folder..." +msgid "Open screenshots &folder..." msgstr "Odprite mapo s posnetki zaslona..." -msgid "Apply fullscreen stretch mode when maximized" +msgid "Appl&y fullscreen stretch mode when maximized" msgstr "Uporabi način celozaslonskega raztezanja v maksimiranem stanju" -msgid "Cursor/Puck" -msgstr "Kazalec/ključ" +msgid "&Cursor/Puck" +msgstr "&Kazalec/ključ" -msgid "Pen" -msgstr "Pisalo" +msgid "&Pen" +msgstr "&Pisalo" -msgid "Host CD/DVD Drive (%1:)" -msgstr "Gostiteljski pogon CD/DVD (%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "&Gostiteljski pogon CD/DVD (%1:)" msgid "&Connected" msgstr "&Povezan" -msgid "Clear image history" +msgid "Clear image &history" msgstr "Počisti zgodovino slik" msgid "Create..." @@ -1365,9 +1452,27 @@ msgstr "Prepust za serijska vrata 3" msgid "Serial port passthrough 4" msgstr "Prepust za serijska vrata 4" -msgid "Renderer options..." +msgid "Renderer &options..." msgstr "Možnosti sistema za upodabljanje..." +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" +msgstr "" + msgid "Logitech/Microsoft Bus Mouse" msgstr "Miška na vodilu Logitech/Microsoft" @@ -1377,18 +1482,30 @@ msgstr "Miška na vodilu Microsoft (InPort)" msgid "Mouse Systems Serial Mouse" msgstr "Serijska miška Mouse Systems" +msgid "Mouse Systems Bus Mouse" +msgstr "" + msgid "Microsoft Serial Mouse" msgstr "Serijska miška Microsoft" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "Serijska miška Logitech" msgid "PS/2 Mouse" msgstr "Miška PS/2" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (serijska)" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] Standardni modem v skladen s Hayes" @@ -1413,12 +1530,54 @@ msgstr "Sistemski MIDI" msgid "MIDI Input Device" msgstr "Vhodna naprava MIDI" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" msgstr "Naslov BIOS-a" +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" +msgstr "" + msgid "Enable BIOS extension ROM Writes" msgstr "Omogoči zapisovanje razširitev BIOS ROM-a" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "Naslov" @@ -1428,6 +1587,18 @@ msgstr "IRQ" msgid "BIOS Revision" msgstr "Revizija BIOS-a" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "Prevedi 26 -> 17" @@ -1443,6 +1614,18 @@ msgstr "Invertiraj barve" msgid "BIOS size" msgstr "Velikost BIOS-a" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "Preslikaj C0000-C7FFF kot UMB" @@ -1518,6 +1701,9 @@ msgstr "Raven odmeva" msgid "Interpolation Method" msgstr "Metoda interpolacije" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" msgstr "Ojačanje izhoda odmeva" @@ -1605,6 +1791,12 @@ msgstr "Nizki DMA" msgid "Enable Game port" msgstr "Omogočanje igralnih vrat" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "Prostorski modul" @@ -1617,6 +1809,9 @@ msgstr "Dvigni prekinitev za CODEC ob nastavitvi CODEC-a (to potrebujejo nekater msgid "SB Address" msgstr "Naslov SB" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "IRQ WSS" @@ -1701,9 +1896,15 @@ msgstr "Vrsta RAMDAC" msgid "Blend" msgstr "Mešanica" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "Bilinearno filtriranje" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "Barvno stresanje" @@ -1746,6 +1947,33 @@ msgstr "Hitrost prenosa" msgid "EMS mode" msgstr "Način EMS" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "Naslov za > 2 MB" @@ -1764,11 +1992,11 @@ msgstr "Vedno pri izbrani hitrosti" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "Nastavitev BIOS-a + Vroče tipke (izklopljeno med POST)" -msgid "64 kB starting from F0000" -msgstr "64 kB od F0000" +msgid "64 KB starting from F0000" +msgstr "64 KB od F0000" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "128 kB od E0000 (MSB naslova invertiran, najprej zadnjih 64 kB)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "128 KB od E0000 (MSB naslova invertiran, najprej zadnjih 64 KB)" msgid "Sine" msgstr "Sinusna" @@ -1902,6 +2130,15 @@ msgstr "Interpolacija sRGB" msgid "Linear interpolation" msgstr "Linearna interpolacija" +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" + msgid "128 KB" msgstr "128 KB" @@ -1935,6 +2172,9 @@ msgstr "Jantarni" msgid "Gray" msgstr "Sivi" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "Barvni" @@ -1950,6 +2190,12 @@ msgstr "Drugi jeziki" msgid "Bochs latest" msgstr "Bochs najnovejše" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "Enobarvni brez prepletanja" @@ -2031,6 +2277,9 @@ msgstr "Baudna hitrost prepusta" msgid "Named Pipe (Server)" msgstr "Poimenovana cev (Strežnik)" +msgid "Named Pipe (Client)" +msgstr "" + msgid "Host Serial Passthrough" msgstr "Prepust serijskih vrat gostitelja" @@ -2076,6 +2325,12 @@ msgstr "Klon IBM 8514/A (ISA)" msgid "Vendor" msgstr "Proizvajalec" +msgid "30 Hz (JMP2 = 1)" +msgstr "" + +msgid "60 Hz (JMP2 = 2)" +msgstr "" + msgid "Generic PC/XT Memory Expansion" msgstr "Generična razširitev pomnilnika PC/XT" @@ -2147,3 +2402,72 @@ msgstr "Premakni dol" msgid "Could not load file %1" msgstr "Ni bilo mogoče naložiti datoteke %1" + +msgid "Key Bindings:" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" + +#~ msgid "HD Controller:" +#~ msgstr "Krmilnik trdega diska:" + +#~ msgid "ZIP drives:" +#~ msgstr "Pogoni ZIP:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "ZIP slike" diff --git a/src/qt/languages/sv-SE.po b/src/qt/languages/sv-SE.po index efbfab7eb..ed26e56e8 100644 --- a/src/qt/languages/sv-SE.po +++ b/src/qt/languages/sv-SE.po @@ -27,8 +27,11 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Pausa" -msgid "E&xit..." -msgstr "A&vsluta..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" +msgstr "A&vsluta" msgid "&View" msgstr "&Visa" @@ -60,7 +63,7 @@ msgstr "Open&GL (3.0 Core)" msgid "&VNC" msgstr "&VNC" -msgid "Specify dimensions..." +msgid "Specify &dimensions..." msgstr "Ange mått..." msgid "F&orce 4:3 display ratio" @@ -99,7 +102,7 @@ msgstr "&7x" msgid "&8x" msgstr "&8x" -msgid "Filter method" +msgid "Fi<er method" msgstr "Filtermetod" msgid "&Nearest" @@ -144,9 +147,15 @@ msgstr "Skärmtyp för &VGA" msgid "RGB &Color" msgstr "RGB &färg" +msgid "RGB (no brown)" +msgstr "" + msgid "&RGB Grayscale" msgstr "&RGB gråskala" +msgid "Generic RGBI color monitor" +msgstr "" + msgid "&Amber monitor" msgstr "&Bärnstensfärgad skärm" @@ -384,6 +393,15 @@ msgstr "Aktiverad (UTC)" msgid "Dynamic Recompiler" msgstr "Dynamisk omkompilering" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "Bildskärmskort:" @@ -399,6 +417,9 @@ msgstr "IBM 8514/A-grafik" msgid "XGA Graphics" msgstr "XGA-grafik" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "Mus:" @@ -498,18 +519,21 @@ msgstr "Parallellport 3" msgid "Parallel port 4" msgstr "Parallellport 4" -msgid "HD Controller:" -msgstr "Styrenhet för hårddisk:" - msgid "FD Controller:" msgstr "Styrenhet för diskett:" +msgid "CD-ROM Controller:" +msgstr "" + msgid "Tertiary IDE Controller" msgstr "Tertiär IDE-kontroller" msgid "Quaternary IDE Controller" msgstr "Kvartär IDE-kontroller" +msgid "Hard disk" +msgstr "" + msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "Kassettband" msgid "Hard disks:" msgstr "Hårddiskar:" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "&Ny..." @@ -588,8 +615,8 @@ msgstr "CD-ROM-enheter:" msgid "MO drives:" msgstr "MO-enheter:" -msgid "ZIP drives:" -msgstr "Zip-enheter:" +msgid "Removable disk drives:" +msgstr "" msgid "ZIP 250" msgstr "ZIP 250" @@ -600,6 +627,9 @@ msgstr "ISA realtidsklocka:" msgid "ISA Memory Expansion" msgstr "ISA minnesexpansion" +msgid "ISA ROM Cards" +msgstr "" + msgid "Card 1:" msgstr "Kort 1:" @@ -612,6 +642,15 @@ msgstr "Kort 3:" msgid "Card 4:" msgstr "Kort 4:" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "ISABugger-enhet" @@ -633,11 +672,17 @@ msgstr " - PAUSAD" msgid "Speed" msgstr "Hastighet" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "" -msgid "ZIP images" -msgstr "Zip-avbildningar" +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" +msgstr "" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box kunde inte hitta några användbara ROM-avbildningar.\n\nVänligen ladda ner en ROM-uppsättning och extrahera den till mappen \"roms\"." @@ -777,12 +822,39 @@ msgstr "Styrspak med 4 axlar och 4 knappar" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" msgid "Thrustmaster Flight Control System" msgstr "Thrustmaster Flight Control System" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "Ingen" @@ -792,6 +864,9 @@ msgstr "%1 MB (CHS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "Diskett %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "&Diskett %1 (%2): %3" + msgid "Advanced sector images" msgstr "Avancerade sektoravbildningar" @@ -813,6 +888,9 @@ msgstr "Ej möjligt att initialisera GhostPCL" msgid "MO %1 (%2): %3" msgstr "MO %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "&MO %1 (%2): %3" + msgid "MO images" msgstr "MO-avbildningar" @@ -897,12 +975,18 @@ msgstr "Fortsätt" msgid "Cassette: %1" msgstr "Kassettband: %1" +msgid "C&assette: %1" +msgstr "K&assettband: %1" + msgid "Cassette images" msgstr "Kassettbandsavbildningar" msgid "Cartridge %1: %2" msgstr "Kassett %1: %2" +msgid "Car&tridge %1: %2" +msgstr "Ka&ssett %1: %2" + msgid "Cartridge images" msgstr "Kassettavbildningar" @@ -924,6 +1008,9 @@ msgstr "Hård omstart" msgid "ACPI shutdown" msgstr "ACPI-avstängning" +msgid "ACP&I shutdown" +msgstr "ACP&I-avstängning" + msgid "Hard disk (%1)" msgstr "Hårddisk (%1)" @@ -1209,40 +1296,40 @@ msgstr "MCA-enheter" msgid "List of MCA devices:" msgstr "Lista på MCA-enheter:" -msgid "Tablet tool" +msgid "&Tablet tool" msgstr "Plattverktyg" msgid "Qt (OpenGL &ES)" msgstr "Qt (OpenGL &ES)" -msgid "About Qt" -msgstr "Om Qt" +msgid "About &Qt" +msgstr "Om &Qt" -msgid "MCA devices..." +msgid "&MCA devices..." msgstr "MCA-enheter..." -msgid "Show non-primary monitors" +msgid "Show non-&primary monitors" msgstr "Visa icke-primära skärmar" -msgid "Open screenshots folder..." +msgid "Open screenshots &folder..." msgstr "Öppna skärmbildsmappen..." -msgid "Apply fullscreen stretch mode when maximized" +msgid "Appl&y fullscreen stretch mode when maximized" msgstr "Tillämpa sträckläge för helskärm när den är maximerad" -msgid "Cursor/Puck" -msgstr "Pekare/puck" +msgid "&Cursor/Puck" +msgstr "&Pekare/puck" -msgid "Pen" -msgstr "Penna" +msgid "&Pen" +msgstr "P&enna" -msgid "Host CD/DVD Drive (%1:)" -msgstr "Värdenhet för CD/DVD (%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "&Värdenhet för CD/DVD (%1:)" msgid "&Connected" msgstr "&Ansluten" -msgid "Clear image history" +msgid "Clear image &history" msgstr "Rensa historik för avbildningar" msgid "Create..." @@ -1365,9 +1452,27 @@ msgstr "Serieport passthrough 3" msgid "Serial port passthrough 4" msgstr "Serieport passthrough 4" -msgid "Renderer options..." +msgid "Renderer &options..." msgstr "Renderingsalternativ..." +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" +msgstr "" + msgid "Logitech/Microsoft Bus Mouse" msgstr "Logitech/Microsoft-buss-mus" @@ -1377,18 +1482,30 @@ msgstr "Microsoft-buss-mus (InPort)" msgid "Mouse Systems Serial Mouse" msgstr "Mouse Systems seriemus" +msgid "Mouse Systems Bus Mouse" +msgstr "" + msgid "Microsoft Serial Mouse" msgstr "Microsoft seriemus" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "Logitech seriemus" msgid "PS/2 Mouse" msgstr "PS/2-mus" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (serie)" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] Standard Hayes-kompatibelt modem" @@ -1413,12 +1530,54 @@ msgstr "System-MIDI" msgid "MIDI Input Device" msgstr "Indataenhet för MIDI" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" msgstr "BIOS-adress" +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" +msgstr "" + msgid "Enable BIOS extension ROM Writes" msgstr "Aktivera ROM-skrivningar för utökat BIOS" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "Adress" @@ -1428,6 +1587,18 @@ msgstr "IRQ" msgid "BIOS Revision" msgstr "BIOS revision" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "Översätt 26 -> 17" @@ -1443,6 +1614,18 @@ msgstr "Invertera färger" msgid "BIOS size" msgstr "Storlek på BIOS" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "Kartlägg C0000-C7FFF som UMB" @@ -1518,6 +1701,9 @@ msgstr "Reverb nivå" msgid "Interpolation Method" msgstr "Interpoleringsmetod" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" msgstr "Reverb utmatningsförstärkning" @@ -1605,6 +1791,12 @@ msgstr "Låg DMA" msgid "Enable Game port" msgstr "Aktivera spelport" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "Sorround-modul" @@ -1617,6 +1809,9 @@ msgstr "Öka avbrottsnummer för CODEC vid CODEC-installation (krävs av vissa d msgid "SB Address" msgstr "Adress för SB" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "WSS IRQ" @@ -1701,9 +1896,15 @@ msgstr "RAMDAC-typ" msgid "Blend" msgstr "Blanda" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "Bilinjär filtrering" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "Dithering" @@ -1746,6 +1947,33 @@ msgstr "Överföringshastighet" msgid "EMS mode" msgstr "EMS-läge" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "Adress till > 2 MB" @@ -1764,11 +1992,11 @@ msgstr "Alltid vid den valda hastigheten" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "BIOS-inställningar + Snabbtangenter (av under POST)" -msgid "64 kB starting from F0000" -msgstr "64 kB som börjar från F0000" +msgid "64 KB starting from F0000" +msgstr "64 KB som börjar från F0000" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "128 kB som börjar från E0000 (adress MSB inverterad, de sista 64KB först)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "128 KB som börjar från E0000 (adress MSB inverterad, de sista 64 KB först)" msgid "Sine" msgstr "Sinus" @@ -1902,6 +2130,15 @@ msgstr "sRGB-interpolering" msgid "Linear interpolation" msgstr "Linjär interpolering" +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" + msgid "128 KB" msgstr "128 KB" @@ -1935,6 +2172,9 @@ msgstr "Bärnstensfärgad" msgid "Gray" msgstr "Grå" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "Färg" @@ -1950,6 +2190,12 @@ msgstr "Andra språk" msgid "Bochs latest" msgstr "Bochs senaste" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "Ej sammanflätad monokrom" @@ -2031,6 +2277,9 @@ msgstr "Passthroughns Baudhastighet" msgid "Named Pipe (Server)" msgstr "Namngiven pipe (server)" +msgid "Named Pipe (Client)" +msgstr "" + msgid "Host Serial Passthrough" msgstr "Värd-seriepassthrough" @@ -2153,3 +2402,72 @@ msgstr "Flytta ner" msgid "Could not load file %1" msgstr "Kunde inte ladda fil %1" + +msgid "Key Bindings:" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" + +#~ msgid "HD Controller:" +#~ msgstr "Styrenhet för hårddisk:" + +#~ msgid "ZIP drives:" +#~ msgstr "Zip-enheter:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "Zip-avbildningar" diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po index d2a0bc84b..dfe2c519e 100644 --- a/src/qt/languages/tr-TR.po +++ b/src/qt/languages/tr-TR.po @@ -27,8 +27,11 @@ msgstr "Ctrl+&Alt+Esc" msgid "&Pause" msgstr "&Duraklat" -msgid "E&xit..." -msgstr "&Çıkış yap..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" +msgstr "&Çıkış yap" msgid "&View" msgstr "&Görünüm" @@ -60,7 +63,7 @@ msgstr "OpenG&L (Sürüm 3.0)" msgid "&VNC" msgstr "&VNC" -msgid "Specify dimensions..." +msgid "Specify &dimensions..." msgstr "Pencere &boyutunu belirle..." msgid "F&orce 4:3 display ratio" @@ -99,7 +102,7 @@ msgstr "&7x" msgid "&8x" msgstr "&8x" -msgid "Filter method" +msgid "Fi<er method" msgstr "&Filtreleme yöntemi" msgid "&Nearest" @@ -144,9 +147,15 @@ msgstr "VGA ekran &tipi" msgid "RGB &Color" msgstr "RGB (&Çok renkli)" +msgid "RGB (no brown)" +msgstr "" + msgid "&RGB Grayscale" msgstr "RGB (&Gri tonlu)" +msgid "Generic RGBI color monitor" +msgstr "" + msgid "&Amber monitor" msgstr "&Kehribar monitör" @@ -189,15 +198,15 @@ msgstr "Durum &çubuğu simgelerini güncelle" msgid "Take s&creenshot" msgstr "&Ekran görüntüsü al" +msgid "S&ound" +msgstr "&Ses" + msgid "&Preferences..." msgstr "&Tercihler..." msgid "Enable &Discord integration" msgstr "&Discord entegrasyonunu etkinleştir" -msgid "S&ound" -msgstr "&Ses" - msgid "Sound &gain..." msgstr "&Sesi artır..." @@ -384,6 +393,15 @@ msgstr "Etkin (UTC)" msgid "Dynamic Recompiler" msgstr "Dinamik Derleyici" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "Ekran kartı:" @@ -399,6 +417,9 @@ msgstr "IBM 8514/A Grafikleri" msgid "XGA Graphics" msgstr "XGA Grafikleri" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "Fare:" @@ -498,18 +519,21 @@ msgstr "3. Paralel Port" msgid "Parallel port 4" msgstr "4. Paralel Port" -msgid "HD Controller:" -msgstr "Hard Disk Denetleyicisi:" - msgid "FD Controller:" msgstr "Disket Denetleyicisi:" +msgid "CD-ROM Controller:" +msgstr "" + msgid "Tertiary IDE Controller" msgstr "Üçlü IDE Denetleyici" msgid "Quaternary IDE Controller" msgstr "Dörtlü IDE Denetleyici" +msgid "Hard disk" +msgstr "" + msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "Kaset" msgid "Hard disks:" msgstr "Hard diskler:" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "&Yeni imaj oluştur" @@ -588,8 +615,8 @@ msgstr "CD-ROM sürücüleri:" msgid "MO drives:" msgstr "MO sürücüleri:" -msgid "ZIP drives:" -msgstr "ZIP sürücüleri:" +msgid "Removable disk drives:" +msgstr "" msgid "ZIP 250" msgstr "ZIP 250" @@ -600,6 +627,9 @@ msgstr "ISA RTC:" msgid "ISA Memory Expansion" msgstr "ISA Bellek Artırıcı" +msgid "ISA ROM Cards" +msgstr "" + msgid "Card 1:" msgstr "Kart 1:" @@ -612,6 +642,15 @@ msgstr "Kart 3:" msgid "Card 4:" msgstr "Kart 4:" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "ISABugger cihazı" @@ -633,20 +672,20 @@ msgstr " - DURAKLATILDI" msgid "Speed" msgstr "Hız" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" - -msgid "ZIP images" -msgstr "ZIP imajları" - -msgid "" -"86Box could not find any usable ROM images.\n" -"\n" -"Please download a ROM set and extract it into the \"roms\" directory." +msgid "Removable disk %1 (%2): %3" msgstr "" -"86Box kullanılabilir hiçbir ROM dosyası bulamadı.\n" -"\n" -"Lütfen bir ROM seti indirip \"roms\" klasörüne çıkarın." + +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" +msgstr "" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box kullanılabilir hiçbir ROM dosyası bulamadı.\n\nLütfen bir ROM seti indirip \"roms\" klasörüne çıkarın." msgid "(empty)" msgstr "(boş)" @@ -783,12 +822,39 @@ msgstr "4 eksenli, 4 düğmeli oyun kolu" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" msgid "Thrustmaster Flight Control System" msgstr "Thrustmaster Flight Control System" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "Hiçbiri" @@ -798,6 +864,9 @@ msgstr "%1 MB (CHS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "Disket %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "&Disket %1 (%2): %3" + msgid "Advanced sector images" msgstr "Gelişmiş sektör imajları" @@ -819,6 +888,9 @@ msgstr "GhostPCL başlatılamadı" msgid "MO %1 (%2): %3" msgstr "MO %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "&MO %1 (%2): %3" + msgid "MO images" msgstr "MO imajları" @@ -849,49 +921,23 @@ msgstr "86Box hakkında" msgid "86Box v" msgstr "86Box v" -msgid "" -"An emulator of old computers\n" -"\n" -"Authors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n" -"\n" -"With previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n" -"\n" -"Released under the GNU General Public License version 2 or later. See LICENSE for more information." -msgstr "" -"Bir eski bilgisayar emülatörü\n" -"\n" -"Yapımcılar: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne ve diğerleri.\n" -"\n" -"Sarah Walker, leilei, JohnElliott, greatpsycho, ve diğerlerinin önceki katkılarıyla birlikte.\n" -"\n" -"GNU Genel Kamu Lisansı versiyon 2 veya sonrası altında yayınlanmıştır. Daha fazla bilgi için LICENSE kısmını gözden geçirin." +msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Bir eski bilgisayar emülatörü\n\nYapımcılar: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne ve diğerleri.\n\nSarah Walker, leilei, JohnElliott, greatpsycho, ve diğerlerinin önceki katkılarıyla birlikte.\n\nGNU Genel Kamu Lisansı versiyon 2 veya sonrası altında yayınlanmıştır. Daha fazla bilgi için LICENSE kısmını gözden geçirin." msgid "Hardware not available" msgstr "Cihaz mevcut değil" -msgid "Make sure %1 is installed and that you are on a libpcap-compatible network connection." -msgstr "%1 kurulu olduğundan ve libpcap uyumlu bir internet ağı kullandığınızdan emin olun." +msgid "Make sure %1 is installed and that you are on a %1-compatible network connection." +msgstr "%1 kurulu olduğundan ve %1 uyumlu bir internet ağı kullandığınızdan emin olun." msgid "Invalid configuration" msgstr "Geçersiz yapılandırma" -msgid "" -"%1 is required for automatic conversion of PostScript files to PDF.\n" -"\n" -"Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." -msgstr "" -"%1 PostScript dosyalarının otomatik olarak PDF dosyasına çevirilmesi için gereklidir.\n" -"\n" -"Genel PostScript yazıcısına gönderilen tüm dökümanlar PostScript (.ps) dosyası olarak kaydedilecektir." +msgid "%1 is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr "%1 PostScript dosyalarının otomatik olarak PDF dosyasına çevirilmesi için gereklidir.\n\nGenel PostScript yazıcısına gönderilen tüm dökümanlar PostScript (.ps) dosyası olarak kaydedilecektir." -msgid "" -"%1 is required for automatic conversion of PCL files to PDF.\n" -"\n" -"Any documents sent to the generic PostScript printer will be saved as Printer Command Language (.pcl) files." -msgstr "" -"%1 PCL dosyalarının otomatik olarak PDF dosyasına çevirilmesi için gereklidir.\n" -"\n" -"Genel PostScript yazıcısına gönderilen tüm dökümanlar Printer Command Language (.pcl) dosyası olarak kaydedilecektir." +msgid "%1 is required for automatic conversion of PCL files to PDF.\n\nAny documents sent to the generic PCL printer will be saved as Printer Command Language (.pcl) files." +msgstr "%1 PCL dosyalarının otomatik olarak PDF dosyasına çevirilmesi için gereklidir.\n\nGenel PCL yazıcısına gönderilen tüm dökümanlar Printer Command Language (.pcl) dosyası olarak kaydedilecektir." msgid "Don't show this message again" msgstr "Bu mesajı bir daha gösterme" @@ -920,18 +966,8 @@ msgstr "GLSL gölgelendiricileri" msgid "You are loading an unsupported configuration" msgstr "Desteklenmeyen bir yapılandırma kullanıyorsunuz" -msgid "" -"CPU type filtering based on selected machine is disabled for this emulated machine.\n" -"\n" -"This makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n" -"\n" -"Enabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "" -"Seçtiğiniz makineyle uygun işlemci filtresi bu yapılandırma için devre dışı bırakıldı.\n" -"\n" -"Bu durum seçili makine ile uyumsuz bir işlemci kullanmanızı mümkün kılmaktadır. Ancak bundan dolayı makinenin BIOS'unda veya çalıştırılan diğer yazılımlarda uyumsuzluk sorunları meydana gelebilir.\n" -"\n" -"İşlemci filtresinin devre dışı bırakılması resmi olarak desteklenmemektedir ve bu esnada açtığınız hata raporları geçersiz sayılabilir." +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "Seçtiğiniz makineyle uygun işlemci filtresi bu yapılandırma için devre dışı bırakıldı.\n\nBu durum seçili makine ile uyumsuz bir işlemci kullanmanızı mümkün kılmaktadır. Ancak bundan dolayı makinenin BIOS'unda veya çalıştırılan diğer yazılımlarda uyumsuzluk sorunları meydana gelebilir.\n\nİşlemci filtresinin devre dışı bırakılması resmi olarak desteklenmemektedir ve bu esnada açtığınız hata raporları geçersiz sayılabilir." msgid "Continue" msgstr "Devam et" @@ -939,12 +975,18 @@ msgstr "Devam et" msgid "Cassette: %1" msgstr "Kaset: %1" +msgid "C&assette: %1" +msgstr "K&aset: %1" + msgid "Cassette images" msgstr "Kaset imajları" msgid "Cartridge %1: %2" msgstr "Kartuş %1: %2" +msgid "Car&tridge %1: %2" +msgstr "Kar&tuş %1: %2" + msgid "Cartridge images" msgstr "Kartuş imajları" @@ -966,6 +1008,9 @@ msgstr "Makineyi yeniden başlat" msgid "ACPI shutdown" msgstr "Makineyi ACPI kullanarak kapat" +msgid "ACP&I shutdown" +msgstr "Makineyi ACP&I kullanarak kapat" + msgid "Hard disk (%1)" msgstr "Hard disk (%1)" @@ -1086,18 +1131,8 @@ msgstr "VHD dosyaları" msgid "Select the parent VHD" msgstr "Ana VHD dosyasını seçin" -msgid "" -"This could mean that the parent image was modified after the differencing image was created.\n" -"\n" -"It can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n" -"\n" -"Do you want to fix the timestamps?" -msgstr "" -"Bu, farklandırmış imaj dosyası oluşturulduktan sonra ana imaj dosyasında bir değişiklik yapıldığı anlamına geliyor olabilir.\n" -"\n" -"Bu durum ayrıca imaj dosyalarının kopyalanmasından, yerlerinin değiştirilmesinden veya dosyaları oluşturan programdaki bir hatadan dolayı da meydana gelmiş olabilir.\n" -"\n" -"Zaman damgalarını düzeltmek ister misiniz?" +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Bu, farklandırmış imaj dosyası oluşturulduktan sonra ana imaj dosyasında bir değişiklik yapıldığı anlamına geliyor olabilir.\n\nBu durum ayrıca imaj dosyalarının kopyalanmasından, yerlerinin değiştirilmesinden veya dosyaları oluşturan programdaki bir hatadan dolayı da meydana gelmiş olabilir.\n\nZaman damgalarını düzeltmek ister misiniz?" msgid "Parent and child disk timestamps do not match" msgstr "Ana ve ek disklerin zaman damgaları uyuşmuyor" @@ -1237,18 +1272,8 @@ msgstr "Pencereye &odaklanmıyorken duraklat" msgid "WinBox is no longer supported" msgstr "WinBox artık desteklenmemektedir" -msgid "" -"Development of the WinBox manager stopped in 2022 due to a lack of maintainers. As we direct our efforts towards making 86Box even better, we have made the decision to no longer support WinBox as a manager.\n" -"\n" -"No further updates will be provided through WinBox, and you may encounter incorrect behavior should you continue using it with newer versions of 86Box. Any bug reports related to WinBox behavior will be closed as invalid.\n" -"\n" -"Go to 86box.net for a list of other managers you can use." -msgstr "" -"WinBox yöneticisinin geliştirilmesi geliştirici eksikliği nedeniyle 2022 yılında durduruldu. 86Box'ı daha iyi hale getirmeye odaklanmak amacıyla bu yöneticiyi artık desteklememe kararı aldık.\n" -"\n" -"Artık WinBox aracılığıyla güncellemeler yayınlanmayacaktır ve bu yöneticiyi 86Box'ın yeni sürümleriyle kullanmanız halinde hatalarla karşılaşabilirsiniz. WinBox'ın kullanımıyla ilgili tüm hata raporları geçersiz sayılacaktır.\n" -"\n" -"Kullanabileceğiniz diğer yöneticilerin bir listesi için lütfen 86box.net adresini ziyaret edin." +msgid "Development of the WinBox manager stopped in 2022 due to a lack of maintainers. As we direct our efforts towards making 86Box even better, we have made the decision to no longer support WinBox as a manager.\n\nNo further updates will be provided through WinBox, and you may encounter incorrect behavior should you continue using it with newer versions of 86Box. Any bug reports related to WinBox behavior will be closed as invalid.\n\nGo to 86box.net for a list of other managers you can use." +msgstr "WinBox yöneticisinin geliştirilmesi geliştirici eksikliği nedeniyle 2022 yılında durduruldu. 86Box'ı daha iyi hale getirmeye odaklanmak amacıyla bu yöneticiyi artık desteklememe kararı aldık.\n\nArtık WinBox aracılığıyla güncellemeler yayınlanmayacaktır ve bu yöneticiyi 86Box'ın yeni sürümleriyle kullanmanız halinde hatalarla karşılaşabilirsiniz. WinBox'ın kullanımıyla ilgili tüm hata raporları geçersiz sayılacaktır.\n\nKullanabileceğiniz diğer yöneticilerin bir listesi için lütfen 86box.net adresini ziyaret edin." msgid "Generate" msgstr "Oluştur" @@ -1271,40 +1296,40 @@ msgstr "MCA cihazları" msgid "List of MCA devices:" msgstr "MCA cihazlarının listesi:" -msgid "Tablet tool" +msgid "&Tablet tool" msgstr "Tablet aracı" msgid "Qt (OpenGL &ES)" msgstr "Qt (OpenGL &ES)" -msgid "About Qt" -msgstr "Qt hakkında" +msgid "About &Qt" +msgstr "&Qt hakkında" -msgid "MCA devices..." +msgid "&MCA devices..." msgstr "MCA cihazları..." -msgid "Show non-primary monitors" +msgid "Show non-&primary monitors" msgstr "Birincil olmayan monitörleri göster" -msgid "Open screenshots folder..." +msgid "Open screenshots &folder..." msgstr "Ekran görüntüsü klasörünü aç..." -msgid "Apply fullscreen stretch mode when maximized" +msgid "Appl&y fullscreen stretch mode when maximized" msgstr "Büyütüldüğünde tam ekran germe modunu uygula" -msgid "Cursor/Puck" -msgstr "İmleç/Puck" +msgid "&Cursor/Puck" +msgstr "&İmleç/Puck" -msgid "Pen" -msgstr "Kalem" +msgid "&Pen" +msgstr "&Kalem" -msgid "Host CD/DVD Drive (%1:)" -msgstr "Ana Sistemin CD/DVD Sürücüsü (%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "&Ana Sistemin CD/DVD Sürücüsü (%1:)" msgid "&Connected" msgstr "&Bağlı" -msgid "Clear image history" +msgid "Clear image &history" msgstr "İmaj geçmişini temizle" msgid "Create..." @@ -1358,12 +1383,8 @@ msgstr "OpenGL sürüm 3.0 veya üstü gereklidir. Geçerli sürüm %1.%2" msgid "Error initializing OpenGL" msgstr "OpenGL başlatılırken hata oluştu" -msgid "" -"\n" -"Falling back to software rendering." -msgstr "" -"\n" -"Yazılım derleyicisine geri dönülüyor." +msgid "\nFalling back to software rendering." +msgstr "\nYazılım derleyicisine geri dönülüyor." msgid "

When selecting media images (CD-ROM, floppy, etc.) the open dialog will start in the same directory as the 86Box configuration file. This setting will likely only make a difference on macOS.

" msgstr "

Medya görüntüsü (CD-ROM, disket, vb.) seçme diyaloğu 86Box yapılandırma dosyasının bulunduğu dizinde başlayacaktır. Bu ayar muhtemelen sadece macOS üzerinde bir değişiklik meydana getirecektir.

" @@ -1371,14 +1392,8 @@ msgstr "

Medya görüntüsü (CD-ROM, disket, vb.) seçme d msgid "This machine might have been moved or copied." msgstr "Bu makine taşınmış veya kopyalanmış olabilir." -msgid "" -"In order to ensure proper networking functionality, 86Box needs to know if this machine was moved or copied.\n" -"\n" -"Select \"I Copied It\" if you are not sure." -msgstr "" -"Ağ bağlantısı özelliğinin doğru bir şekilde çalışması için 86Box'ın bu makinenin başka bir konuma taşındığını mı yoksa kopyalandığını mı belirlemesi gerekmektedir.\n" -"\n" -"Bundan emin değilseniz \"Kopyalandı\" seçeneğini seçin." +msgid "In order to ensure proper networking functionality, 86Box needs to know if this machine was moved or copied.\n\nSelect \"I Copied It\" if you are not sure." +msgstr "Ağ bağlantısı özelliğinin doğru bir şekilde çalışması için 86Box'ın bu makinenin başka bir konuma taşındığını mı yoksa kopyalandığını mı belirlemesi gerekmektedir.\n\nBundan emin değilseniz \"Kopyalandı\" seçeneğini seçin." msgid "I Moved It" msgstr "Taşındı" @@ -1437,9 +1452,27 @@ msgstr "3. Seri Port geçişi" msgid "Serial port passthrough 4" msgstr "4. Seri Port geçişi" -msgid "Renderer options..." +msgid "Renderer &options..." msgstr "Derleyici seçenekleri..." +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" +msgstr "" + msgid "Logitech/Microsoft Bus Mouse" msgstr "Logitech/Microsoft Bus Fare" @@ -1455,15 +1488,24 @@ msgstr "Mouse Systems Bus Fare" msgid "Microsoft Serial Mouse" msgstr "Microsoft Seri Fare" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "Logitech Seri Fare" msgid "PS/2 Mouse" msgstr "PS/2 fare" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (seri)" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] Standart Hayes Uyumlu Modem" @@ -1488,12 +1530,54 @@ msgstr "Sistem MIDI'si" msgid "MIDI Input Device" msgstr "MIDI Giriş Cihazı" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" msgstr "BIOS Adresi" +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" +msgstr "" + msgid "Enable BIOS extension ROM Writes" msgstr "BIOS uzantı ROM yazımlarını etkinleştir" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "Adres" @@ -1503,6 +1587,18 @@ msgstr "IRQ" msgid "BIOS Revision" msgstr "BIOS Sürümü" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "26 -> 17 olarak çevir" @@ -1518,6 +1614,18 @@ msgstr "Renkleri tersine çevir" msgid "BIOS size" msgstr "BIOS boyutu" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "C0000-C7FFF'yi UMB olarak eşle" @@ -1593,6 +1701,9 @@ msgstr "Yankı Seviyesi" msgid "Interpolation Method" msgstr "İnterpolasyon Yöntemi" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" msgstr "Yankı Çıkış Sesi Artışı" @@ -1680,6 +1791,12 @@ msgstr "Düşük DMA" msgid "Enable Game port" msgstr "Gameport'ı etkinleştir" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "Surround modülü" @@ -1692,6 +1809,9 @@ msgstr "CODEC kurulumunda CODEC kesmesini yükselt (bazı sürücüler tarafınd msgid "SB Address" msgstr "SB adresi" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "WSS IRQ" @@ -1776,9 +1896,15 @@ msgstr "RAMDAC türü" msgid "Blend" msgstr "Karışım" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "Bilineer filtreleme" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "Dithering" @@ -1821,6 +1947,33 @@ msgstr "Transfer hızı" msgid "EMS mode" msgstr "EMS modu" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "> 2 MB için adres" @@ -1839,11 +1992,11 @@ msgstr "Her zaman seçilen hızda" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "BIOS ayarı + Kısayol tuşları (POST sırasında kapalı)" -msgid "64 kB starting from F0000" +msgid "64 KB starting from F0000" msgstr "F0000'dan başlayarak 64 KB" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "E0000'dan başlayarak 128 kB (adresin MSB'si ters çevirilmiş, önce sondaki 64KB)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "E0000'dan başlayarak 128 KB (adresin MSB'si ters çevirilmiş, önce sondaki 64 KB)" msgid "Sine" msgstr "Sinüs" @@ -1977,6 +2130,15 @@ msgstr "sRGB interpolasyonu" msgid "Linear interpolation" msgstr "Doğrusal interpolasyon" +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" + msgid "128 KB" msgstr "128 KB" @@ -2010,6 +2172,9 @@ msgstr "Kehribar" msgid "Gray" msgstr "Gri" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "Renk" @@ -2025,6 +2190,12 @@ msgstr "Diğer diller" msgid "Bochs latest" msgstr "Bochs'un en son sürümü" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "Tek Renkli (Geçiş Taramasız)" @@ -2067,8 +2238,8 @@ msgstr "Stereo LPT DAC" msgid "Generic Text Printer" msgstr "Genel Metin Yazıcı" -msgid "Generic ESC/P Dot-Matrix" -msgstr "Genel ESC/P Dot-Matrix" +msgid "Generic ESC/P Dot-Matrix Printer" +msgstr "Genel ESC/P Dot-Matrix Yazıcı" msgid "Generic PostScript Printer" msgstr "Genel PostScript Yazıcı" @@ -2106,6 +2277,9 @@ msgstr "Geçişin Baud Hızı" msgid "Named Pipe (Server)" msgstr "Adlandırılmış Boru (Sunucu)" +msgid "Named Pipe (Client)" +msgstr "" + msgid "Host Serial Passthrough" msgstr "Ana Sistem Seri Geçişi" @@ -2151,6 +2325,12 @@ msgstr "IBM 8514/A klonu (ISA)" msgid "Vendor" msgstr "Üretici" +msgid "30 Hz (JMP2 = 1)" +msgstr "" + +msgid "60 Hz (JMP2 = 2)" +msgstr "" + msgid "Generic PC/XT Memory Expansion" msgstr "Genel PC/XT Bellek Artırıcı" @@ -2199,16 +2379,10 @@ msgstr "OpenGL sürüm 3.0 veya daha yükseği gereklidir. Şu anki GLSL sürüm msgid "Could not load texture: %1" msgstr "%1 dokusu yüklenemedi" -msgid "" -"Could not compile shader:\n" -"\n" -"%1" +msgid "Could not compile shader:\n\n%1" msgstr "%1 gölgelendiricisi derlenemedi" -msgid "" -"Program not linked:\n" -"\n" -"%1" +msgid "Program not linked:\n\n%1" msgstr "%1 programı bağlanamadı" msgid "Shader Manager" @@ -2227,4 +2401,73 @@ msgid "Move down" msgstr "Aşağı taşı" msgid "Could not load file %1" -msgstr "%1 dosyası yüklenemedi" \ No newline at end of file +msgstr "%1 dosyası yüklenemedi" + +msgid "Key Bindings:" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" + +#~ msgid "HD Controller:" +#~ msgstr "Hard Disk Denetleyicisi:" + +#~ msgid "ZIP drives:" +#~ msgstr "ZIP sürücüleri:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "ZIP imajları" diff --git a/src/qt/languages/uk-UA.po b/src/qt/languages/uk-UA.po index 49a8acf00..0b3360999 100644 --- a/src/qt/languages/uk-UA.po +++ b/src/qt/languages/uk-UA.po @@ -27,8 +27,11 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Пауза" -msgid "E&xit..." -msgstr "&Вихід..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" +msgstr "&Вихід" msgid "&View" msgstr "&Вигляд" @@ -60,7 +63,7 @@ msgstr "Open&GL (3.0)" msgid "&VNC" msgstr "&VNC" -msgid "Specify dimensions..." +msgid "Specify &dimensions..." msgstr "&Вказати розміри..." msgid "F&orce 4:3 display ratio" @@ -99,7 +102,7 @@ msgstr "&7x" msgid "&8x" msgstr "&8x" -msgid "Filter method" +msgid "Fi<er method" msgstr "Метод фільтрації" msgid "&Nearest" @@ -144,9 +147,15 @@ msgstr "&Тип екрана VGA" msgid "RGB &Color" msgstr "RGB &кольоровий" +msgid "RGB (no brown)" +msgstr "" + msgid "&RGB Grayscale" msgstr "&RGB монохромний" +msgid "Generic RGBI color monitor" +msgstr "" + msgid "&Amber monitor" msgstr "&Бурштиновий відтінок" @@ -384,6 +393,15 @@ msgstr "Увімкнути (UTC)" msgid "Dynamic Recompiler" msgstr "Динамічний рекомпілятор" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "Відеокарта:" @@ -399,6 +417,9 @@ msgstr "Прискорювач IBM 8514/A" msgid "XGA Graphics" msgstr "Прискорювач XGA" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "Миша:" @@ -498,18 +519,21 @@ msgstr "Паралельний порт LPT3" msgid "Parallel port 4" msgstr "Паралельний порт LPT4" -msgid "HD Controller:" -msgstr "Контролер HD:" - msgid "FD Controller:" msgstr "Контролер FD:" +msgid "CD-ROM Controller:" +msgstr "" + msgid "Tertiary IDE Controller" msgstr "Третинний IDE контролер" msgid "Quaternary IDE Controller" msgstr "Четвертинний IDE контролер" +msgid "Hard disk" +msgstr "" + msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "Касета" msgid "Hard disks:" msgstr "Жорсткі диски:" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "&Створити..." @@ -588,8 +615,8 @@ msgstr "Дисководи CD-ROM:" msgid "MO drives:" msgstr "Магнітооптичні дисководи:" -msgid "ZIP drives:" -msgstr "ZIP дисководи:" +msgid "Removable disk drives:" +msgstr "" msgid "ZIP 250" msgstr "ZIP 250" @@ -600,6 +627,9 @@ msgstr "ISA RTC:" msgid "ISA Memory Expansion" msgstr "Карта розширення пам'яті (ISA)" +msgid "ISA ROM Cards" +msgstr "" + msgid "Card 1:" msgstr "Карта 1:" @@ -612,6 +642,15 @@ msgstr "Карта 3:" msgid "Card 4:" msgstr "Карта 4:" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "Пристрій ISABugger" @@ -633,11 +672,17 @@ msgstr " - ПРИЗУПИНЕННЯ" msgid "Speed" msgstr "Швидкість" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "" -msgid "ZIP images" -msgstr "Образи ZIP" +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" +msgstr "" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box не зміг знайти жодного відповідного для використання файлу з ПЗУ.\n\nБудь ласка завантажте набір ПЗУ і витягніть його в каталог \"roms\"." @@ -777,12 +822,39 @@ msgstr "4-осьовий, 4-кнопковий джойстик" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" msgid "Thrustmaster Flight Control System" msgstr "Система управління польотом Thrustmaster" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "Ні" @@ -792,6 +864,9 @@ msgstr "%1 МБ (CHS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "Дисковод %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "&Дисковод %1 (%2): %3" + msgid "Advanced sector images" msgstr "Розширені образи секторів" @@ -813,6 +888,9 @@ msgstr "Неможливо ініціалізувати GhostPCL" msgid "MO %1 (%2): %3" msgstr "Магнітооптичний %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "&Магнітооптичний %1 (%2): %3" + msgid "MO images" msgstr "Образи магнітооптичних дисків" @@ -849,8 +927,8 @@ msgstr "Емулятор старих комп'ютерів\n\nАвтори: Mir msgid "Hardware not available" msgstr "Обладнання недоступне" -msgid "Make sure %1 is installed and that you are on a libpcap-compatible network connection." -msgstr "Переконайтесь, що %1 встановлений і ваше мережеве з'єднання, сумісне з libpcap." +msgid "Make sure %1 is installed and that you are on a %1-compatible network connection." +msgstr "Переконайтесь, що %1 встановлений і ваше мережеве з'єднання, сумісне з %1." msgid "Invalid configuration" msgstr "Неприпустима конфігурація" @@ -897,12 +975,18 @@ msgstr "Продовжити" msgid "Cassette: %1" msgstr "Касета: %1" +msgid "C&assette: %1" +msgstr "К&асета: %1" + msgid "Cassette images" msgstr "Образи касет" msgid "Cartridge %1: %2" msgstr "Картридж %1: %2" +msgid "Car&tridge %1: %2" +msgstr "Кар&тридж %1: %2" + msgid "Cartridge images" msgstr "Образи картриджів" @@ -924,6 +1008,9 @@ msgstr "Холодне перезавантаження" msgid "ACPI shutdown" msgstr "Сигнал завершення ACPI" +msgid "ACP&I shutdown" +msgstr "Сигнал завершення ACP&I" + msgid "Hard disk (%1)" msgstr "Жорсткий диск (%1)" @@ -1045,7 +1132,10 @@ msgid "Select the parent VHD" msgstr "Виберіть батьківський VHD" msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" -msgstr "Це може означати, що батьківський образ був змінений після того, як було створено диференційований образ.\n\nЦе також може статися, якщо файли зображення були переміщені або скопійовані, або через помилку в програмі, що створила цей диск.\n \nВи хочете виправити тимчасові позначки?" +msgstr "" +"Це може означати, що батьківський образ був змінений після того, як було створено диференційований образ.\n\nЦе також може статися, якщо файли зображення були переміщені або скопійовані, або через помилку в програмі, що створила цей диск.\n" +" \n" +"Ви хочете виправити тимчасові позначки?" msgid "Parent and child disk timestamps do not match" msgstr "Тимчасові мітки батьківського та дочірнього дисків не співпадають" @@ -1209,40 +1299,40 @@ msgstr "Пристрої MCA" msgid "List of MCA devices:" msgstr "Список пристроїв MCA:" -msgid "Tablet tool" +msgid "&Tablet tool" msgstr "Інструмент для планшета" msgid "Qt (OpenGL &ES)" msgstr "Qt (OpenGL &ES)" -msgid "About Qt" -msgstr "Про Qt" +msgid "About &Qt" +msgstr "Про &Qt" -msgid "MCA devices..." -msgstr "Пристрої MCA..." +msgid "&MCA devices..." +msgstr "Пристрої &MCA..." -msgid "Show non-primary monitors" +msgid "Show non-&primary monitors" msgstr "Показати неосновні монітори" -msgid "Open screenshots folder..." +msgid "Open screenshots &folder..." msgstr "Відкрийте папку скріншотів..." -msgid "Apply fullscreen stretch mode when maximized" +msgid "Appl&y fullscreen stretch mode when maximized" msgstr "Застосовувати розстягування у повноекранному режимі у максимізованому стані" -msgid "Cursor/Puck" -msgstr "Курсор/шайба" +msgid "&Cursor/Puck" +msgstr "&Курсор/шайба" -msgid "Pen" -msgstr "Ручка" +msgid "&Pen" +msgstr "&Ручка" -msgid "Host CD/DVD Drive (%1:)" -msgstr "CD/DVD привід хоста (%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "CD/DVD &привід хоста (%1:)" msgid "&Connected" msgstr "&Підключено" -msgid "Clear image history" +msgid "Clear image &history" msgstr "Очистити історію образів" msgid "Create..." @@ -1365,9 +1455,27 @@ msgstr "Пропуск послідовного порту 3" msgid "Serial port passthrough 4" msgstr "Пропуск послідовного порту 4" -msgid "Renderer options..." +msgid "Renderer &options..." msgstr "Параметри рендерингу..." +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" +msgstr "" + msgid "Logitech/Microsoft Bus Mouse" msgstr "Шинна миша Logitech/Microsoft" @@ -1377,18 +1485,30 @@ msgstr "Шинна миша Microsoft (InPort)" msgid "Mouse Systems Serial Mouse" msgstr "Послідовна миша Mouse Systems" +msgid "Mouse Systems Bus Mouse" +msgstr "" + msgid "Microsoft Serial Mouse" msgstr "Послідовна миша Microsoft" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "Послідовна миша Logitech" msgid "PS/2 Mouse" msgstr "Миша PS/2" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (послідовна)" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] Стандартний модем, сумісний зі стандартом Hayes" @@ -1413,12 +1533,54 @@ msgstr "MIDI системи" msgid "MIDI Input Device" msgstr "Пристрій введення MIDI" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" msgstr "Адреса BIOS" +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" +msgstr "" + msgid "Enable BIOS extension ROM Writes" msgstr "Увімкнути розширення BIOS Записи в ПЗУ" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "Адреса" @@ -1428,6 +1590,18 @@ msgstr "IRQ" msgid "BIOS Revision" msgstr "Ревізія BIOS" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "Перекладіть 26 -> 17" @@ -1443,6 +1617,18 @@ msgstr "Інвертувати кольори" msgid "BIOS size" msgstr "Розмір BIOS" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "Зіставлення C0000-C7FFF як UMB" @@ -1518,6 +1704,9 @@ msgstr "Рівень реверберації" msgid "Interpolation Method" msgstr "Метод інтерполяції" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" msgstr "Посилення виходу реверберації" @@ -1605,6 +1794,12 @@ msgstr "Низький рівень DMA" msgid "Enable Game port" msgstr "Увімкнути ігровий порт" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "Модуль об'ємного звучання" @@ -1617,6 +1812,9 @@ msgstr "Піднімати переривання CODEC під час встан msgid "SB Address" msgstr "Адреса SB" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "IRQ WSS" @@ -1701,9 +1899,15 @@ msgstr "Тип RAMDAC" msgid "Blend" msgstr "Суміш" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "Білінійна фільтрація" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "Дизеринг" @@ -1746,6 +1950,33 @@ msgstr "Швидкість передачі даних" msgid "EMS mode" msgstr "Режим EMS" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "Адреса для > 2 МБ" @@ -1764,11 +1995,11 @@ msgstr "Завжди на обраній швидкості" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "Налаштування BIOS + Гарячі клавіші (вимкнено під час POST)" -msgid "64 kB starting from F0000" -msgstr "64 кБ, починаючи з F0000" +msgid "64 KB starting from F0000" +msgstr "64 KБ, починаючи з F0000" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "128 кБ, починаючи з E0000 (адреса MSB інвертована, останні 64 кБ першими)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "128 KБ, починаючи з E0000 (адреса MSB інвертована, останні 64 KБ першими)" msgid "Sine" msgstr "Синусоїдальна" @@ -1902,6 +2133,15 @@ msgstr "sRGB інтерполяція" msgid "Linear interpolation" msgstr "Лінійна інтерполяція" +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" + msgid "128 KB" msgstr "128 КБ" @@ -1935,6 +2175,9 @@ msgstr "Бурштиновий" msgid "Gray" msgstr "Сірий" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "Кольоровий" @@ -1950,6 +2193,12 @@ msgstr "Інші мови" msgid "Bochs latest" msgstr "Bochs останній" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "Монохромний неінтерлейсний" @@ -2031,6 +2280,9 @@ msgstr "Швидкість передачі даних пропуску" msgid "Named Pipe (Server)" msgstr "Іменований пайп (сервер)" +msgid "Named Pipe (Client)" +msgstr "" + msgid "Host Serial Passthrough" msgstr "Пропуск послідовного порту хоста" @@ -2153,3 +2405,72 @@ msgstr "" msgid "Could not load file %1" msgstr "" + +msgid "Key Bindings:" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" + +#~ msgid "HD Controller:" +#~ msgstr "Контролер HD:" + +#~ msgid "ZIP drives:" +#~ msgstr "ZIP дисководи:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "Образи ZIP" diff --git a/src/qt/languages/vi-VN.po b/src/qt/languages/vi-VN.po index 9fed36393..053c01639 100644 --- a/src/qt/languages/vi-VN.po +++ b/src/qt/languages/vi-VN.po @@ -27,8 +27,11 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "Tạm &dừng" -msgid "E&xit..." -msgstr "Th&oát..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" +msgstr "Th&oát" msgid "&View" msgstr "&Xem" @@ -60,7 +63,7 @@ msgstr "Open&GL (3.0 Core)" msgid "&VNC" msgstr "&VNC" -msgid "Specify dimensions..." +msgid "Specify &dimensions..." msgstr "Tự nhập độ &phân giải..." msgid "F&orce 4:3 display ratio" @@ -99,7 +102,7 @@ msgstr "&7x" msgid "&8x" msgstr "&8x" -msgid "Filter method" +msgid "Fi<er method" msgstr "&Bộ lọc hình ảnh" msgid "&Nearest" @@ -144,9 +147,15 @@ msgstr "L&oại màn VGA" msgid "RGB &Color" msgstr "Màu R&GB" +msgid "RGB (no brown)" +msgstr "" + msgid "&RGB Grayscale" msgstr "Thang xám RG&B" +msgid "Generic RGBI color monitor" +msgstr "" + msgid "&Amber monitor" msgstr "Màn hình vàng hổ phách (amber)" @@ -384,6 +393,15 @@ msgstr "Bật (UTC)" msgid "Dynamic Recompiler" msgstr "Bộ tái biên dịch động (Dynamic Recompiler)" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "Video:" @@ -399,6 +417,9 @@ msgstr "Đồ họa IBM 8514/A" msgid "XGA Graphics" msgstr "Đồ họa XGA" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "Chuột:" @@ -498,18 +519,21 @@ msgstr "Cổng parallel 3" msgid "Parallel port 4" msgstr "Cổng parallel 4" -msgid "HD Controller:" -msgstr "Bộ điều khiển ổ cứng:" - msgid "FD Controller:" msgstr "Bộ điều khiển ổ mềm:" +msgid "CD-ROM Controller:" +msgstr "" + msgid "Tertiary IDE Controller" msgstr "Bộ điều khiển IDE thứ ba" msgid "Quaternary IDE Controller" msgstr "Bộ điều khiển IDE thứ tư" +msgid "Hard disk" +msgstr "" + msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "Cassette" msgid "Hard disks:" msgstr "Đĩa cứng:" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "Tạ&o mới..." @@ -588,8 +615,8 @@ msgstr "Ổ đĩa CD-ROM:" msgid "MO drives:" msgstr "Ổ đĩa MO:" -msgid "ZIP drives:" -msgstr "Ổ đĩa ZIP:" +msgid "Removable disk drives:" +msgstr "" msgid "ZIP 250" msgstr "ZIP 250" @@ -600,6 +627,9 @@ msgstr "ISA RTC:" msgid "ISA Memory Expansion" msgstr "Mở rộng bộ nhớ qua ISA" +msgid "ISA ROM Cards" +msgstr "" + msgid "Card 1:" msgstr "Thẻ 1:" @@ -612,6 +642,15 @@ msgstr "Thẻ 3:" msgid "Card 4:" msgstr "Thẻ 4:" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "Thiết bị ISABugger" @@ -633,11 +672,17 @@ msgstr " - TẠM DỪNG" msgid "Speed" msgstr "Vận tốc" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "" -msgid "ZIP images" -msgstr "Ảnh đĩa ZIP" +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" +msgstr "" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box không tìm được bản ROM nào.\n\nVui lòng tải về bộ ROM và trích xuất về thư mục \"roms\"." @@ -777,12 +822,39 @@ msgstr "Cần điều khiển bốn trục, bốn nút" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" msgid "Thrustmaster Flight Control System" msgstr "Thrustmaster Flight Control System" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "Không có" @@ -792,6 +864,9 @@ msgstr "%1 MB (CHS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "Đĩa mềm %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "Đĩa &mềm %1 (%2): %3" + msgid "Advanced sector images" msgstr "Ảnh (đĩa) sector nâng cao" @@ -813,6 +888,9 @@ msgstr "Không thể khởi tạo GhostPCL" msgid "MO %1 (%2): %3" msgstr "MO %1 (%2): %3" +msgid "M&O %1 (%2): %3" +msgstr "M&O %1 (%2): %3" + msgid "MO images" msgstr "Ảnh đĩa MO" @@ -897,12 +975,18 @@ msgstr "Tiếp tục" msgid "Cassette: %1" msgstr "Cassette: %1" +msgid "C&assette: %1" +msgstr "C&assette: %1" + msgid "Cassette images" msgstr "Ảnh đĩa Cassette" msgid "Cartridge %1: %2" msgstr "Băng cartridge %1: %2" +msgid "Car&tridge %1: %2" +msgstr "Băng car&tridge %1: %2" + msgid "Cartridge images" msgstr "Ảnh đĩa băng cartridge" @@ -924,6 +1008,9 @@ msgstr "Buộc khởi động lại" msgid "ACPI shutdown" msgstr "Tắt máy theo ACPI" +msgid "ACP&I shutdown" +msgstr "Tắt máy theo ACP&I" + msgid "Hard disk (%1)" msgstr "Ổ cứng (%1)" @@ -1209,40 +1296,40 @@ msgstr "Thiết bị MCA" msgid "List of MCA devices:" msgstr "Danh sách các thiết bị MCA:" -msgid "Tablet tool" +msgid "&Tablet tool" msgstr "Công cụ bảng nhập liệu" msgid "Qt (OpenGL &ES)" msgstr "QT (OpenGL &ES)" -msgid "About Qt" -msgstr "Về qt" +msgid "About &Qt" +msgstr "Về &qt" -msgid "MCA devices..." +msgid "&MCA devices..." msgstr "Thiết bị MCA..." -msgid "Show non-primary monitors" +msgid "Show non-&primary monitors" msgstr "Hiển thị các màn hình phụ" -msgid "Open screenshots folder..." +msgid "Open screenshots &folder..." msgstr "Mở thư mục ảnh chụp màn hình..." -msgid "Apply fullscreen stretch mode when maximized" +msgid "Appl&y fullscreen stretch mode when maximized" msgstr "Co giãn toàn màn hình khi cực đại hóa cửa sổ" -msgid "Cursor/Puck" -msgstr "Con trỏ/puck" +msgid "&Cursor/Puck" +msgstr "&Con trỏ/puck" -msgid "Pen" -msgstr "Bút" +msgid "&Pen" +msgstr "&Bút" -msgid "Host CD/DVD Drive (%1:)" -msgstr "Máy chủ CD/DVD ổ đĩa (%1 :)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "&Máy chủ CD/DVD ổ đĩa (%1 :)" msgid "&Connected" msgstr "&Đã kết nối" -msgid "Clear image history" +msgid "Clear image &history" msgstr "Xóa lịch sử ảnh đĩa" msgid "Create..." @@ -1365,9 +1452,27 @@ msgstr "Thông qua cổng serial 3" msgid "Serial port passthrough 4" msgstr "Thông qua cổng serial 4" -msgid "Renderer options..." +msgid "Renderer &options..." msgstr "Tùy chọn kết xuất ..." +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" +msgstr "" + msgid "Logitech/Microsoft Bus Mouse" msgstr "Chuột bus Logitech/Microsoft" @@ -1377,18 +1482,30 @@ msgstr "Chuột bus Microsoft (INPORT)" msgid "Mouse Systems Serial Mouse" msgstr "Chuột serial Mouse Systems" +msgid "Mouse Systems Bus Mouse" +msgstr "" + msgid "Microsoft Serial Mouse" msgstr "Chuột serial Microsoft" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "Chuột serial Logitech" msgid "PS/2 Mouse" msgstr "Chuột PS/2" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (Serial)" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] Modem tuân thủ tiêu chuẩn Hayes" @@ -1413,12 +1530,54 @@ msgstr "MIDI của hệ thống" msgid "MIDI Input Device" msgstr "Thiết bị nhập MIDI" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" msgstr "Địa chỉ BIOS" +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" +msgstr "" + msgid "Enable BIOS extension ROM Writes" msgstr "Kích hoạt ghi ROM mở rộng BIOS" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "Địa chỉ" @@ -1428,6 +1587,18 @@ msgstr "IRQ" msgid "BIOS Revision" msgstr "Sửa đổi BIOS" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "Dịch 26 -> 17" @@ -1443,6 +1614,18 @@ msgstr "Đảo ngược màu sắc" msgid "BIOS size" msgstr "Kích thước BIOS" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "Map C0000-C7FFF dưới dạng UMB" @@ -1518,6 +1701,9 @@ msgstr "Mức độ hồi âm" msgid "Interpolation Method" msgstr "Phương pháp nội suy" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" msgstr "Tăng đầu ra hồi âm" @@ -1605,6 +1791,12 @@ msgstr "DMA thấp" msgid "Enable Game port" msgstr "Bật cổng trò chơi" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "Mô đun vòm" @@ -1617,6 +1809,9 @@ msgstr "Tăng ngắt CODEC trên thiết lập CODEC (cần bởi một số tr msgid "SB Address" msgstr "Địa chỉ SB" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "WSS IRQ" @@ -1701,9 +1896,15 @@ msgstr "Loại RAMDAC" msgid "Blend" msgstr "Trộn" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "Lọc song tuyến" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "Ngân tán" @@ -1746,6 +1947,33 @@ msgstr "Tốc độ truyền tải" msgid "EMS mode" msgstr "Chế độ EMS" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "Địa chỉ cho > 2 MB" @@ -1764,11 +1992,11 @@ msgstr "Luôn ở tốc độ đã chọn" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "Cài đặt BIOS + phím nóng (TẮT trong POST)" -msgid "64 kB starting from F0000" -msgstr "64 kb bắt đầu từ f0000" +msgid "64 KB starting from F0000" +msgstr "64 KB bắt đầu từ f0000" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "128 kb bắt đầu từ E0000 (địa chỉ MSB đảo ngược, 64kb cuối cùng)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "128 KB bắt đầu từ E0000 (địa chỉ MSB đảo ngược, 64 KB cuối cùng)" msgid "Sine" msgstr "Sin" @@ -1902,6 +2130,15 @@ msgstr "Nội suy SRGB" msgid "Linear interpolation" msgstr "Nội suy tuyến tính" +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" + msgid "128 KB" msgstr "128 KB" @@ -1935,6 +2172,9 @@ msgstr "Màu hổ phách" msgid "Gray" msgstr "Màu xám" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "Màu sắc" @@ -1950,6 +2190,12 @@ msgstr "Các ngôn ngữ khác" msgid "Bochs latest" msgstr "Bochs mới nhất" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "Đơn sắc không xen kẽ" @@ -2031,6 +2277,9 @@ msgstr "Tốc độ baud của đường thông" msgid "Named Pipe (Server)" msgstr "Đường ống có tên (máy chủ)" +msgid "Named Pipe (Client)" +msgstr "" + msgid "Host Serial Passthrough" msgstr "Thông qua cổng serial của máy chủ" @@ -2076,6 +2325,12 @@ msgstr "IBM 8514/A bản nhái (ISA)" msgid "Vendor" msgstr "Nhà sản xuất" +msgid "30 Hz (JMP2 = 1)" +msgstr "" + +msgid "60 Hz (JMP2 = 2)" +msgstr "" + msgid "Generic PC/XT Memory Expansion" msgstr "Chung mở rộng bộ nhớ qua PC/XT" @@ -2147,3 +2402,72 @@ msgstr "" msgid "Could not load file %1" msgstr "" + +msgid "Key Bindings:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" + +#~ msgid "HD Controller:" +#~ msgstr "Bộ điều khiển ổ cứng:" + +#~ msgid "ZIP drives:" +#~ msgstr "Ổ đĩa ZIP:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "Ảnh đĩa ZIP" diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po index 2af5abef9..ba3477e57 100644 --- a/src/qt/languages/zh-CN.po +++ b/src/qt/languages/zh-CN.po @@ -27,8 +27,11 @@ msgstr "Ctrl+Alt+Esc(&E)" msgid "&Pause" msgstr "暂停(&P)" -msgid "E&xit..." -msgstr "退出(&X)..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" +msgstr "退出(&X)" msgid "&View" msgstr "查看(&V)" @@ -60,8 +63,8 @@ msgstr "OpenGL (3.0 Core)(&G)" msgid "&VNC" msgstr "VNC(&V)" -msgid "Specify dimensions..." -msgstr "指定窗口大小..." +msgid "Specify &dimensions..." +msgstr "指定窗口大小...(&D)" msgid "F&orce 4:3 display ratio" msgstr "强制 4:3 显示比例(&O)" @@ -99,8 +102,8 @@ msgstr "7x(&7)" msgid "&8x" msgstr "8x(&8)" -msgid "Filter method" -msgstr "过滤方式" +msgid "Fi<er method" +msgstr "过滤方式(&L)" msgid "&Nearest" msgstr "邻近(&N)" @@ -144,9 +147,15 @@ msgstr "VGA 屏幕类型(&T)" msgid "RGB &Color" msgstr "RGB 彩色(&C)" +msgid "RGB (no brown)" +msgstr "" + msgid "&RGB Grayscale" msgstr "RGB 灰度(&R)" +msgid "Generic RGBI color monitor" +msgstr "" + msgid "&Amber monitor" msgstr "琥珀色单色显示器(&A)" @@ -384,6 +393,15 @@ msgstr "启用 (UTC)" msgid "Dynamic Recompiler" msgstr "动态重编译器" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "显卡:" @@ -399,6 +417,9 @@ msgstr "IBM 8514/A 图形" msgid "XGA Graphics" msgstr "XGA 图形" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "鼠标:" @@ -498,18 +519,21 @@ msgstr "并口 3" msgid "Parallel port 4" msgstr "并口 4" -msgid "HD Controller:" -msgstr "硬盘控制器:" - msgid "FD Controller:" msgstr "软盘控制器:" +msgid "CD-ROM Controller:" +msgstr "" + msgid "Tertiary IDE Controller" msgstr "第三 IDE 控制器" msgid "Quaternary IDE Controller" msgstr "第四 IDE 控制器" +msgid "Hard disk" +msgstr "" + msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "磁带" msgid "Hard disks:" msgstr "硬盘:" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "新建(&N)..." @@ -588,8 +615,8 @@ msgstr "光盘驱动器:" msgid "MO drives:" msgstr "磁光盘驱动器:" -msgid "ZIP drives:" -msgstr "ZIP 驱动器:" +msgid "Removable disk drives:" +msgstr "" msgid "ZIP 250" msgstr "ZIP 250" @@ -600,6 +627,9 @@ msgstr "ISA 实时时钟:" msgid "ISA Memory Expansion" msgstr "ISA 内存扩展" +msgid "ISA ROM Cards" +msgstr "" + msgid "Card 1:" msgstr "扩展卡 1:" @@ -612,6 +642,15 @@ msgstr "扩展卡 3:" msgid "Card 4:" msgstr "扩展卡 4:" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "ISABugger 设备" @@ -633,11 +672,17 @@ msgstr " - 已暂停" msgid "Speed" msgstr "速度" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "" -msgid "ZIP images" -msgstr "ZIP 映像" +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" +msgstr "" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box 找不到任何可用的 ROM 映像。\n\n请下载 ROM 包并将其解压到 \"roms\" 文件夹中。" @@ -777,12 +822,39 @@ msgstr "4 轴, 4 键操纵杆" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" msgid "Thrustmaster Flight Control System" msgstr "Thrustmaster Flight Control System" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "无" @@ -792,6 +864,9 @@ msgstr "%1 MB (CHS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "软盘 %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "软盘 %1 (%2): %3(&F)" + msgid "Advanced sector images" msgstr "高级扇区映像" @@ -813,6 +888,9 @@ msgstr "无法初始化 GhostPCL" msgid "MO %1 (%2): %3" msgstr "磁光盘 %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "磁光盘 %1 (%2): %3(&M)" + msgid "MO images" msgstr "磁光盘映像" @@ -897,12 +975,18 @@ msgstr "继续" msgid "Cassette: %1" msgstr "磁带: %1" +msgid "C&assette: %1" +msgstr "磁带: %1(&A)" + msgid "Cassette images" msgstr "磁带映像" msgid "Cartridge %1: %2" msgstr "卡带 %1: %2" +msgid "Car&tridge %1: %2" +msgstr "卡带 %1: %2(&A)" + msgid "Cartridge images" msgstr "卡带映像" @@ -924,6 +1008,9 @@ msgstr "硬重置" msgid "ACPI shutdown" msgstr "ACPI 关机" +msgid "ACP&I shutdown" +msgstr "ACP&I 关机" + msgid "Hard disk (%1)" msgstr "硬盘 (%1)" @@ -1209,41 +1296,41 @@ msgstr "MCA 设备" msgid "List of MCA devices:" msgstr "MCA 设备清单:" -msgid "Tablet tool" -msgstr "平板工具" +msgid "&Tablet tool" +msgstr "平板工具(&T)" msgid "Qt (OpenGL &ES)" msgstr "Qt(OpenGL &ES)" -msgid "About Qt" -msgstr "关于 Qt" +msgid "About &Qt" +msgstr "关于 &Qt" -msgid "MCA devices..." -msgstr "MCA 设备..." +msgid "&MCA devices..." +msgstr "&MCA 设备..." -msgid "Show non-primary monitors" -msgstr "显示非主要显示器" +msgid "Show non-&primary monitors" +msgstr "显示非主要显示器(&P)" -msgid "Open screenshots folder..." -msgstr "打开屏幕截图文件夹..." +msgid "Open screenshots &folder..." +msgstr "打开屏幕截图文件夹...(&F)" -msgid "Apply fullscreen stretch mode when maximized" -msgstr "最大化时应用全屏拉伸模式" +msgid "Appl&y fullscreen stretch mode when maximized" +msgstr "最大化时应用全屏拉伸模式(&Y)" -msgid "Cursor/Puck" -msgstr "光标/冰球" +msgid "&Cursor/Puck" +msgstr "光标/冰球(&C)" -msgid "Pen" -msgstr "笔" +msgid "&Pen" +msgstr "笔(&P)" -msgid "Host CD/DVD Drive (%1:)" -msgstr "主机 CD/DVD 驱动器 (%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "主机 CD/DVD 驱动器 (%1:) (&H)" msgid "&Connected" msgstr "已连接(&C)" -msgid "Clear image history" -msgstr "清除映像历史记录" +msgid "Clear image &history" +msgstr "清除映像历史记录(&H)" msgid "Create..." msgstr "创建..." @@ -1365,8 +1452,26 @@ msgstr "串行端口直通 3" msgid "Serial port passthrough 4" msgstr "串行端口直通 4" -msgid "Renderer options..." -msgstr "渲染器选项..." +msgid "Renderer &options..." +msgstr "渲染器选项...(&O)" + +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" +msgstr "" msgid "Logitech/Microsoft Bus Mouse" msgstr "Logitech/Microsoft 总线鼠标" @@ -1377,18 +1482,30 @@ msgstr "Microsoft 总线鼠标(InPort)" msgid "Mouse Systems Serial Mouse" msgstr "Mouse Systems 串行鼠标" +msgid "Mouse Systems Bus Mouse" +msgstr "" + msgid "Microsoft Serial Mouse" msgstr "Microsoft 串行鼠标" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "Logitech 串行鼠标" msgid "PS/2 Mouse" msgstr "PS/2 鼠标" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (串行)" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] 标准 Hayes 兼容调制解调器" @@ -1413,12 +1530,54 @@ msgstr "系统 MIDI" msgid "MIDI Input Device" msgstr "MIDI 输入设备" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" msgstr "BIOS 地址" +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" +msgstr "" + msgid "Enable BIOS extension ROM Writes" msgstr "启用 BIOS 扩展 ROM 写入功能" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "地址" @@ -1428,6 +1587,18 @@ msgstr "IRQ" msgid "BIOS Revision" msgstr "BIOS 修订版" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "翻译 26 -> 17" @@ -1443,6 +1614,18 @@ msgstr "反转颜色" msgid "BIOS size" msgstr "BIOS 大小" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "将 C0000-C7FFF 映射为 UMB" @@ -1518,6 +1701,9 @@ msgstr "混响电平" msgid "Interpolation Method" msgstr "插值法" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" msgstr "混响输出的增益" @@ -1605,6 +1791,12 @@ msgstr "低 DMA" msgid "Enable Game port" msgstr "启用游戏端口" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "环绕声模块" @@ -1617,6 +1809,9 @@ msgstr "在 CODEC 设置时引发 CODEC 中断(某些驱动程序需要)。" msgid "SB Address" msgstr "SB 地址" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "WSS IRQ" @@ -1701,9 +1896,15 @@ msgstr "RAMDAC 类型" msgid "Blend" msgstr "混合" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "双线性滤波" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "抖动" @@ -1746,6 +1947,33 @@ msgstr "传输速度" msgid "EMS mode" msgstr "EMS (扩展内存)模式" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "地址 > 2 MB" @@ -1764,11 +1992,11 @@ msgstr "始终保持选定速度" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "BIOS 设置 + 热键 (开机自检期间关闭)" -msgid "64 kB starting from F0000" -msgstr "64 kB,从 F0000 开始" +msgid "64 KB starting from F0000" +msgstr "64 KB,从 F0000 开始" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "128 kB,从 E0000 开始 (地址 MSB 反相,最后 64KB 优先)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "128 KB,从 E0000 开始 (地址 MSB 反相,最后 64 KB 优先)" msgid "Sine" msgstr "正弦" @@ -1902,6 +2130,15 @@ msgstr "sRGB 插值" msgid "Linear interpolation" msgstr "线性插值" +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" + msgid "128 KB" msgstr "128 KB" @@ -1935,6 +2172,9 @@ msgstr "琥珀色" msgid "Gray" msgstr "灰色" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "彩色" @@ -1950,6 +2190,12 @@ msgstr "其他语言" msgid "Bochs latest" msgstr "Bochs 最新版本" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "单色非隔行扫描" @@ -2031,6 +2277,9 @@ msgstr "直通波特率" msgid "Named Pipe (Server)" msgstr "命名管道(服务器)" +msgid "Named Pipe (Client)" +msgstr "" + msgid "Host Serial Passthrough" msgstr "主机串行端口直通" @@ -2153,3 +2402,72 @@ msgstr "下移" msgid "Could not load file %1" msgstr "无法加载文件 %1" + +msgid "Key Bindings:" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" + +#~ msgid "HD Controller:" +#~ msgstr "硬盘控制器:" + +#~ msgid "ZIP drives:" +#~ msgstr "ZIP 驱动器:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "ZIP 映像" diff --git a/src/qt/languages/zh-TW.po b/src/qt/languages/zh-TW.po index 9d082a9af..f500aa3b9 100644 --- a/src/qt/languages/zh-TW.po +++ b/src/qt/languages/zh-TW.po @@ -27,8 +27,11 @@ msgstr "Ctrl+Alt+Esc(&E)" msgid "&Pause" msgstr "暫停(&P)" -msgid "E&xit..." -msgstr "退出(&X)..." +msgid "Re&sume" +msgstr "" + +msgid "E&xit" +msgstr "退出(&X)" msgid "&View" msgstr "檢視(&V)" @@ -60,8 +63,8 @@ msgstr "OpenGL (3.0 Core)(&G)" msgid "&VNC" msgstr "VNC(&V)" -msgid "Specify dimensions..." -msgstr "指定視窗大小..." +msgid "Specify &dimensions..." +msgstr "指定視窗大小...(&D)" msgid "F&orce 4:3 display ratio" msgstr "強制 4:3 顯示比例(&O)" @@ -99,8 +102,8 @@ msgstr "7x(&7)" msgid "&8x" msgstr "8x(&8)" -msgid "Filter method" -msgstr "過濾方式" +msgid "Fi<er method" +msgstr "過濾方式(&L)" msgid "&Nearest" msgstr "鄰近(&N)" @@ -144,9 +147,15 @@ msgstr "VGA 螢幕類型(&T)" msgid "RGB &Color" msgstr "RGB 彩色(&C)" +msgid "RGB (no brown)" +msgstr "" + msgid "&RGB Grayscale" msgstr "RGB 灰度(&R)" +msgid "Generic RGBI color monitor" +msgstr "" + msgid "&Amber monitor" msgstr "琥珀色單色顯示器(&A)" @@ -384,6 +393,15 @@ msgstr "啟用 (UTC)" msgid "Dynamic Recompiler" msgstr "動態重編譯器" +msgid "CPU frame size" +msgstr "" + +msgid "Larger frames (less smooth)" +msgstr "" + +msgid "Smaller frames (smoother)" +msgstr "" + msgid "Video:" msgstr "顯示卡:" @@ -399,6 +417,9 @@ msgstr "IBM 8514/A Graphics" msgid "XGA Graphics" msgstr "XGA Graphics" +msgid "Keyboard:" +msgstr "" + msgid "Mouse:" msgstr "滑鼠:" @@ -498,18 +519,21 @@ msgstr "並列埠 3" msgid "Parallel port 4" msgstr "並列埠 4" -msgid "HD Controller:" -msgstr "硬碟控制器:" - msgid "FD Controller:" msgstr "軟碟控制器:" +msgid "CD-ROM Controller:" +msgstr "" + msgid "Tertiary IDE Controller" msgstr "第三 IDE 控制器" msgid "Quaternary IDE Controller" msgstr "第四 IDE 控制器" +msgid "Hard disk" +msgstr "" + msgid "SCSI" msgstr "SCSI" @@ -531,6 +555,9 @@ msgstr "磁帶" msgid "Hard disks:" msgstr "硬碟:" +msgid "Firmware Version" +msgstr "" + msgid "&New..." msgstr "新增(&N)..." @@ -588,8 +615,8 @@ msgstr "光碟機:" msgid "MO drives:" msgstr "磁光碟機:" -msgid "ZIP drives:" -msgstr "ZIP 磁碟機:" +msgid "Removable disk drives:" +msgstr "" msgid "ZIP 250" msgstr "ZIP 250" @@ -600,6 +627,9 @@ msgstr "ISA 實時時鐘:" msgid "ISA Memory Expansion" msgstr "ISA 記憶體擴充" +msgid "ISA ROM Cards" +msgstr "" + msgid "Card 1:" msgstr "擴充卡 1:" @@ -612,6 +642,15 @@ msgstr "擴充卡 3:" msgid "Card 4:" msgstr "擴充卡 4:" +msgid "Generic ISA ROM Board" +msgstr "" + +msgid "Generic Dual ISA ROM Board" +msgstr "" + +msgid "Generic Quad ISA ROM Board" +msgstr "" + msgid "ISABugger device" msgstr "ISABugger 裝置" @@ -633,11 +672,17 @@ msgstr " - 已暫停" msgid "Speed" msgstr "速度" -msgid "ZIP %1 %2 (%3): %4" -msgstr "ZIP %1 %2 (%3): %4" +msgid "Removable disk %1 (%2): %3" +msgstr "" -msgid "ZIP images" -msgstr "ZIP 映像" +msgid "&Removable disk %1 (%2): %3" +msgstr "" + +msgid "Removable disk images" +msgstr "" + +msgid "Image %1" +msgstr "" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box 找不到任何可用的 ROM 映像。\n\n請下載 ROM 套件並將其解壓到 \"roms\" 資料夾。" @@ -777,12 +822,39 @@ msgstr "4 軸, 4 鍵搖桿" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" +msgid "CH Flightstick Pro + CH Pedals" +msgstr "" + msgid "Microsoft SideWinder Pad" msgstr "Microsoft SideWinder Pad" msgid "Thrustmaster Flight Control System" msgstr "Thrustmaster Flight Control System" +msgid "Thrustmaster FCS + Rudder Control System" +msgstr "" + +msgid "2-button gamepad(s)" +msgstr "" + +msgid "2-button flight yoke" +msgstr "" + +msgid "4-button gamepad" +msgstr "" + +msgid "4-button flight yoke" +msgstr "" + +msgid "2-button flight yoke with throttle" +msgstr "" + +msgid "4-button flight yoke with throttle" +msgstr "" + +msgid "Win95 Steering Wheel (3-axis, 4-button)" +msgstr "" + msgid "None" msgstr "無" @@ -792,6 +864,9 @@ msgstr "%1 MB (CHS: %2, %3, %4)" msgid "Floppy %1 (%2): %3" msgstr "軟碟 %1 (%2): %3" +msgid "&Floppy %1 (%2): %3" +msgstr "軟碟 %1 (%2): %3(&F)" + msgid "Advanced sector images" msgstr "進階磁區映像" @@ -813,6 +888,9 @@ msgstr "無法初始化 GhostPCL" msgid "MO %1 (%2): %3" msgstr "磁光碟 %1 (%2): %3" +msgid "&MO %1 (%2): %3" +msgstr "磁光碟 %1 (%2): %3(&M)" + msgid "MO images" msgstr "磁光碟映像" @@ -849,8 +927,8 @@ msgstr "一個舊式電腦模擬器\n\n作者: Miran Grča (OBattler)、RichardG msgid "Hardware not available" msgstr "硬體不可用" -msgid "Make sure %1 is installed and that you are on a libpcap-compatible network connection." -msgstr "請確認 %1 已安裝且使用相容 libpcap 的網路連線。" +msgid "Make sure %1 is installed and that you are on a %1-compatible network connection." +msgstr "請確認 %1 已安裝且使用相容 %1 的網路連線。" msgid "Invalid configuration" msgstr "無效設定" @@ -897,12 +975,18 @@ msgstr "繼續" msgid "Cassette: %1" msgstr "磁帶: %1" +msgid "C&assette: %1" +msgstr "磁帶: %1(&A)" + msgid "Cassette images" msgstr "磁帶映像" msgid "Cartridge %1: %2" msgstr "卡帶 %1: %2" +msgid "Car&tridge %1: %2" +msgstr "卡帶 %1: %2(&A)" + msgid "Cartridge images" msgstr "卡帶映像" @@ -924,6 +1008,9 @@ msgstr "硬重設" msgid "ACPI shutdown" msgstr "ACPI 關機" +msgid "ACP&I shutdown" +msgstr "ACP&I 關機" + msgid "Hard disk (%1)" msgstr "硬碟 (%1)" @@ -1209,41 +1296,41 @@ msgstr "MCA 裝置" msgid "List of MCA devices:" msgstr "MCA 裝置清單:" -msgid "Tablet tool" -msgstr "平板工具" +msgid "&Tablet tool" +msgstr "平板工具(&T)" msgid "Qt (OpenGL &ES)" msgstr "Qt (OpenGL &ES)" -msgid "About Qt" -msgstr "關於 Qt" +msgid "About &Qt" +msgstr "關於 &Qt" -msgid "MCA devices..." -msgstr "MCA 裝置..." +msgid "&MCA devices..." +msgstr "&MCA 裝置..." -msgid "Show non-primary monitors" -msgstr "顯示非主要顯示器" +msgid "Show non-&primary monitors" +msgstr "顯示非主要顯示器(&P)" -msgid "Open screenshots folder..." -msgstr "開啟螢幕截圖資料夾..." +msgid "Open screenshots &folder..." +msgstr "開啟螢幕截圖資料夾...(&F)" -msgid "Apply fullscreen stretch mode when maximized" -msgstr "最大化時套用全螢幕拉伸模式" +msgid "Appl&y fullscreen stretch mode when maximized" +msgstr "最大化時套用全螢幕拉伸模式(&Y)" -msgid "Cursor/Puck" -msgstr "游標/球棒" +msgid "&Cursor/Puck" +msgstr "游標/球棒(&C)" -msgid "Pen" -msgstr "筆" +msgid "&Pen" +msgstr "筆(&P)" -msgid "Host CD/DVD Drive (%1:)" -msgstr "主機 CD/DVD 光碟機 (%1:)" +msgid "&Host CD/DVD Drive (%1:)" +msgstr "主機 CD/DVD 光碟機 (%1:) (&H)" msgid "&Connected" msgstr "已連線" -msgid "Clear image history" -msgstr "清除映像歷史記錄" +msgid "Clear image &history" +msgstr "清除映像歷史記錄(&H)" msgid "Create..." msgstr "建立..." @@ -1365,8 +1452,26 @@ msgstr "序列埠的直通 3" msgid "Serial port passthrough 4" msgstr "序列埠的直通 4" -msgid "Renderer options..." -msgstr "渲染器選項..." +msgid "Renderer &options..." +msgstr "渲染器選項...(&O)" + +msgid "PC/XT Keyboard" +msgstr "" + +msgid "AT Keyboard" +msgstr "" + +msgid "AX Keyboard" +msgstr "" + +msgid "PS/2 Keyboard" +msgstr "" + +msgid "PS/55 Keyboard" +msgstr "" + +msgid "Keys" +msgstr "" msgid "Logitech/Microsoft Bus Mouse" msgstr "Logitech/Microsoft 匯流排滑鼠" @@ -1377,18 +1482,30 @@ msgstr "Microsoft 匯流排滑鼠 (InPort)" msgid "Mouse Systems Serial Mouse" msgstr "Mouse Systems 序列滑鼠" +msgid "Mouse Systems Bus Mouse" +msgstr "" + msgid "Microsoft Serial Mouse" msgstr "Microsoft 序列滑鼠" +msgid "Microsoft Serial BallPoint" +msgstr "" + msgid "Logitech Serial Mouse" msgstr "Logitech 序列滑鼠" msgid "PS/2 Mouse" msgstr "PS/2 滑鼠" +msgid "PS/2 QuickPort Mouse" +msgstr "" + msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (序列)" +msgid "Default Baud rate" +msgstr "" + msgid "[COM] Standard Hayes-compliant Modem" msgstr "[COM] 標準 Hayes 相容的數據機" @@ -1413,12 +1530,54 @@ msgstr "系統的 MIDI" msgid "MIDI Input Device" msgstr "MIDI 輸入裝置" -msgid "BIOS Address" +msgid "BIOS file" +msgstr "" + +msgid "BIOS file (ROM #1)" +msgstr "" + +msgid "BIOS file (ROM #2)" +msgstr "" + +msgid "BIOS file (ROM #3)" +msgstr "" + +msgid "BIOS file (ROM #4)" +msgstr "" + +msgid "BIOS address" msgstr "BIOS 位址" +msgid "BIOS address (ROM #1)" +msgstr "" + +msgid "BIOS address (ROM #2)" +msgstr "" + +msgid "BIOS address (ROM #3)" +msgstr "" + +msgid "BIOS address (ROM #4)" +msgstr "" + msgid "Enable BIOS extension ROM Writes" msgstr "啟用 BIOS 擴充 ROM 寫入" +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "" + +msgid "Linear framebuffer base" +msgstr "" + msgid "Address" msgstr "位址" @@ -1428,6 +1587,18 @@ msgstr "IRQ" msgid "BIOS Revision" msgstr "BIOS 版本" +msgid "BIOS Version" +msgstr "" + +msgid "BIOS Language" +msgstr "" + +msgid "IBM 5161 Expansion Unit" +msgstr "" + +msgid "IBM Cassette Basic" +msgstr "" + msgid "Translate 26 -> 17" msgstr "轉換 26 -> 17" @@ -1443,6 +1614,18 @@ msgstr "反轉顏色" msgid "BIOS size" msgstr "BIOS 大小" +msgid "BIOS size (ROM #1)" +msgstr "" + +msgid "BIOS size (ROM #2)" +msgstr "" + +msgid "BIOS size (ROM #3)" +msgstr "" + +msgid "BIOS size (ROM #4)" +msgstr "" + msgid "Map C0000-C7FFF as UMB" msgstr "映射 C0000-C7FFF 為 UMB" @@ -1518,6 +1701,9 @@ msgstr "混響電平" msgid "Interpolation Method" msgstr "插值方法" +msgid "Dynamic Sample Loading" +msgstr "" + msgid "Reverb Output Gain" msgstr "迴響輸出增益" @@ -1605,6 +1791,12 @@ msgstr "低 DMA" msgid "Enable Game port" msgstr "啟用遊戲埠" +msgid "SID Model" +msgstr "" + +msgid "SID Filter Strength" +msgstr "" + msgid "Surround module" msgstr "環繞聲模組" @@ -1617,6 +1809,9 @@ msgstr "在 CODEC 設定時啟動 CODEC 中斷 (某些驅動程式需要)" msgid "SB Address" msgstr "SB 位址" +msgid "Use EEPROM setting" +msgstr "" + msgid "WSS IRQ" msgstr "WSS IRQ" @@ -1701,9 +1896,15 @@ msgstr "RAMDAC 類型" msgid "Blend" msgstr "混合" +msgid "Font" +msgstr "" + msgid "Bilinear filtering" msgstr "雙線性濾波" +msgid "Video chroma-keying" +msgstr "" + msgid "Dithering" msgstr "抖動" @@ -1746,6 +1947,33 @@ msgstr "傳輸速度" msgid "EMS mode" msgstr "EMS 模式" +msgid "EMS Address" +msgstr "" + +msgid "EMS 1 Address" +msgstr "" + +msgid "EMS 2 Address" +msgstr "" + +msgid "EMS Memory Size" +msgstr "" + +msgid "EMS 1 Memory Size" +msgstr "" + +msgid "EMS 2 Memory Size" +msgstr "" + +msgid "Enable EMS" +msgstr "" + +msgid "Enable EMS 1" +msgstr "" + +msgid "Enable EMS 2" +msgstr "" + msgid "Address for > 2 MB" msgstr "> 2 MB 的位址" @@ -1764,11 +1992,11 @@ msgstr "永遠以所選速度運作" msgid "BIOS setting + Hotkeys (off during POST)" msgstr "BIOS 設定 + 熱鍵 (POST 期間關閉)" -msgid "64 kB starting from F0000" -msgstr "64 kB 從 F0000 開始" +msgid "64 KB starting from F0000" +msgstr "64 KB 從 F0000 開始" -msgid "128 kB starting from E0000 (address MSB inverted, last 64KB first)" -msgstr "128 kB 從 E0000 開始 (位址 MSB 反轉,後 64KB 為先)" +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "128 KB 從 E0000 開始 (位址 MSB 反轉,後 64 KB 為先)" msgid "Sine" msgstr "正弦" @@ -1902,6 +2130,15 @@ msgstr "sRGB 插值" msgid "Linear interpolation" msgstr "線性插補" +msgid "Has secondary 8x8 character set" +msgstr "" + +msgid "Has Quadcolor II daughter board" +msgstr "" + +msgid "Alternate monochrome contrast" +msgstr "" + msgid "128 KB" msgstr "128 KB" @@ -1935,6 +2172,9 @@ msgstr "琥珀色" msgid "Gray" msgstr "灰色" +msgid "Grayscale" +msgstr "" + msgid "Color" msgstr "顏色" @@ -1950,6 +2190,12 @@ msgstr "其他語言" msgid "Bochs latest" msgstr "Bochs 最新" +msgid "Apply overscan deltas" +msgstr "" + +msgid "Mono Interlaced" +msgstr "" + msgid "Mono Non-Interlaced" msgstr "單色非隔行掃描" @@ -2031,6 +2277,9 @@ msgstr "直通的鮑率" msgid "Named Pipe (Server)" msgstr "已命名管道 (伺服器)" +msgid "Named Pipe (Client)" +msgstr "" + msgid "Host Serial Passthrough" msgstr "主機序列埠的直通" @@ -2076,6 +2325,12 @@ msgstr "IBM 8514/A 克隆 (ISA)" msgid "Vendor" msgstr "製造商" +msgid "30 Hz (JMP2 = 1)" +msgstr "" + +msgid "60 Hz (JMP2 = 2)" +msgstr "" + msgid "Generic PC/XT Memory Expansion" msgstr "通用 PC/XT 記憶體擴充" @@ -2147,3 +2402,72 @@ msgstr "" msgid "Could not load file %1" msgstr "" + +msgid "Key Bindings:" +msgstr "" + +msgid "Action" +msgstr "" + +msgid "Keybind" +msgstr "" + +msgid "Clear binding" +msgstr "" + +msgid "Bind" +msgstr "" + +msgid "Bind Key" +msgstr "" + +msgid "Enter key combo:" +msgstr "" + +msgid "Bind conflict" +msgstr "" + +msgid "This key combo is already in use." +msgstr "" + +msgid "Send Control+Alt+Del" +msgstr "" + +msgid "Send Control+Alt+Escape" +msgstr "" + +msgid "Toggle fullscreen" +msgstr "" + +msgid "Screenshot" +msgstr "" + +msgid "Release mouse pointer" +msgstr "" + +msgid "Toggle pause" +msgstr "" + +msgid "Toggle mute" +msgstr "" + +msgid "Text files" +msgstr "" + +msgid "ROM files" +msgstr "" + +msgid "SoundFont files" +msgstr "" + +#~ msgid "HD Controller:" +#~ msgstr "硬碟控制器:" + +#~ msgid "ZIP drives:" +#~ msgstr "ZIP 磁碟機:" + +#~ msgid "ZIP %1 %2 (%3): %4" +#~ msgstr "ZIP %1 %2 (%3): %4" + +#~ msgid "ZIP images" +#~ msgstr "ZIP 映像" diff --git a/src/qt/qt_about.cpp b/src/qt/qt_about.cpp new file mode 100644 index 000000000..96cde8522 --- /dev/null +++ b/src/qt/qt_about.cpp @@ -0,0 +1,75 @@ +/* + * 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. + * + * About dialog module. + * + * + * + * Authors: Joakim L. Gilje + * Cacodemon345 + * Teemu Korhonen + * dob205 + * + * Copyright 2021 Joakim L. Gilje + * Copyright 2021-2022 Cacodemon345 + * Copyright 2021-2022 Teemu Korhonen + * Copyright 2022 dob205 + */ +#include "qt_about.hpp" + +extern "C" { +#include <86box/86box.h> +#include <86box/version.h> +} + +#include +#include +#include +#include +#include + +About::About(QWidget *parent) +{ + setTextFormat(Qt::RichText); + QString versioninfo; +#ifdef EMU_GIT_HASH + versioninfo = QString(" [%1]").arg(EMU_GIT_HASH); +#endif +#ifdef USE_DYNAREC +# ifdef USE_NEW_DYNAREC +# define DYNAREC_STR "new dynarec" +# else +# define DYNAREC_STR "old dynarec" +# endif +#else +# define DYNAREC_STR "no dynarec" +#endif + versioninfo.append(QString(" [%1, %2]").arg(QSysInfo::buildCpuArchitecture(), tr(DYNAREC_STR))); + setText(QString("%3%1%2").arg(EMU_VERSION_FULL, versioninfo, tr("86Box v"))); + setInformativeText(tr("An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information.")); + setWindowTitle(tr("About 86Box")); + const auto closeButton = addButton("OK", QMessageBox::ButtonRole::AcceptRole); + setEscapeButton(closeButton); + const auto webSiteButton = addButton(EMU_SITE, QMessageBox::ButtonRole::HelpRole); + webSiteButton->connect(webSiteButton, &QPushButton::released, []() { + QDesktopServices::openUrl(QUrl("https://" EMU_SITE)); + }); +#ifdef RELEASE_BUILD + setIconPixmap(QIcon(":/settings/qt/icons/86Box-green.ico").pixmap(32, 32)); +#elif defined ALPHA_BUILD + setIconPixmap(QIcon(":/settings/qt/icons/86Box-red.ico").pixmap(32, 32)); +#elif defined BETA_BUILD + setIconPixmap(QIcon(":/settings/qt/icons/86Box-yellow.ico").pixmap(32, 32)); +#else + setIconPixmap(QIcon(":/settings/qt/icons/86Box-gray.ico").pixmap(32, 32)); +#endif + setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint); +} + +About::~About() + = default; diff --git a/src/qt/qt_about.hpp b/src/qt/qt_about.hpp new file mode 100644 index 000000000..206aab37b --- /dev/null +++ b/src/qt/qt_about.hpp @@ -0,0 +1,13 @@ +#ifndef QT_ABOUT_HPP +#define QT_ABOUT_HPP + +#include + +class About final : public QMessageBox { + Q_OBJECT + +public: + explicit About(QWidget *parent = nullptr); + ~About() override; +}; +#endif // QT_ABOUT_HPP \ No newline at end of file diff --git a/src/qt/qt_deviceconfig.cpp b/src/qt/qt_deviceconfig.cpp index 255b3c39f..33572c99c 100644 --- a/src/qt/qt_deviceconfig.cpp +++ b/src/qt/qt_deviceconfig.cpp @@ -282,20 +282,30 @@ DeviceConfig::ProcessConfig(void *dc, const void *c, const bool is_dep) fileField->setObjectName(config->name); fileField->setFileName(selected); /* Get the actually used part of the filter */ +#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) QString filter = QString(config->file_filter).left(static_cast(strcspn(config->file_filter, "|"))); +#else + QString filter = QString(config->file_filter).split("|").at(0); +#endif /* Extract the description and the extension list */ QRegularExpressionMatch match = QRegularExpression("(.+) \\((.+)\\)$").match(filter); QString description = match.captured(1); QString extensions = match.captured(2); - QStringList extensionList; /* Split the extension list up and strip the filename globs */ QRegularExpression re("\\*\\.(.*)"); +#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) + QStringList extensionList; int i = 0; while (extensions.section(' ', i, i) != "") { QString extension = re.match(extensions.section(' ', i, i)).captured(1); extensionList.append(extension); i++; } +#else + QStringList extensionList = extensions.split(" "); + for (int i = 0; i < extensionList.count(); i++) + extensionList[i] = re.match(extensionList[i]).captured(1); +#endif fileField->setFilter(tr(description.toUtf8().constData()) % util::DlgFilter(extensionList) % tr("All files") % util::DlgFilter({ "*" }, true)); this->ui->formLayout->addRow(tr(config->description), fileField); break; diff --git a/src/qt/qt_harddiskdialog.ui b/src/qt/qt_harddiskdialog.ui index cba835134..e2dea0220 100644 --- a/src/qt/qt_harddiskdialog.ui +++ b/src/qt/qt_harddiskdialog.ui @@ -32,87 +32,24 @@ Dialog - - - - false - - - 0 - - - true - - - - - + + - Sectors: - - - - - - - Image Format: - - - - - - - 30 - - - - - - - Bus: + File name: - - + + - Type: + Cylinders: - - - - - 0 - 0 - - - - - 64 - 16777215 - - - - 32767 - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - + @@ -128,58 +65,14 @@ - + Heads: - - - - - 0 - 0 - - - - - 64 - 16777215 - - - - - - - - 30 - - - - - - - Cylinders: - - - - - - - File name: - - - - - - - Size (MB): - - - - + @@ -198,28 +91,153 @@ - - + + - Channel: + Sectors: - + + + + + 0 + 0 + + + + + 64 + 16777215 + + + + 32767 + + + + + + + Size (MB): + + + + + + + + 0 + 0 + + + + + 64 + 16777215 + + + + + + + + Type: + + + + 30 - + + + + Bus: + + + + + + + 30 + + + + + + + Channel: + + + + + + + 30 + + + + + + + Model: + + + + + + + 30 + + + + + + + Image Format: + + + + + + + 30 + + + + Block Size: - + + + + 30 + + + + + + + false + + + 0 + + + true + + + + Qt::Vertical @@ -232,31 +250,13 @@ - - - - Model: + + + + Qt::Horizontal - - - - - - 30 - - - - - - - 30 - - - - - - - 30 + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok @@ -270,17 +270,6 @@ 1 - - lineEditCylinders - lineEditHeads - lineEditSectors - lineEditSize - comboBoxType - comboBoxBus - comboBoxChannel - comboBoxFormat - comboBoxBlockSize - diff --git a/src/qt/qt_harddrive_common.cpp b/src/qt/qt_harddrive_common.cpp index 52ae10a98..b0c8e0ea9 100644 --- a/src/qt/qt_harddrive_common.cpp +++ b/src/qt/qt_harddrive_common.cpp @@ -32,6 +32,7 @@ Harddrives::populateBuses(QAbstractItemModel *model) { model->removeRows(0, model->rowCount()); model->insertRows(0, 6); + model->setData(model->index(0, 0), "MFM/RLL"); model->setData(model->index(1, 0), "XTA"); model->setData(model->index(2, 0), "ESDI"); @@ -48,19 +49,23 @@ Harddrives::populateBuses(QAbstractItemModel *model) } void -Harddrives::populateRemovableBuses(QAbstractItemModel *model) +Harddrives::populateCDROMBuses(QAbstractItemModel *model) { model->removeRows(0, model->rowCount()); #ifdef USE_CDROM_MITSUMI - model->insertRows(0, 4); + model->insertRows(0, 5); #else - model->insertRows(0, 3); + model->insertRows(0, 4); #endif + model->setData(model->index(0, 0), QObject::tr("Disabled")); model->setData(model->index(1, 0), QObject::tr("ATAPI")); model->setData(model->index(2, 0), QObject::tr("SCSI")); #ifdef USE_CDROM_MITSUMI model->setData(model->index(3, 0), QObject::tr("Mitsumi")); + model->setData(model->index(4, 0), QObject::tr("Panasonic/MKE")); +#else + model->setData(model->index(3, 0), QObject::tr("Panasonic/MKE")); #endif model->setData(model->index(0, 0), HDD_BUS_DISABLED, Qt::UserRole); @@ -68,9 +73,27 @@ Harddrives::populateRemovableBuses(QAbstractItemModel *model) model->setData(model->index(2, 0), HDD_BUS_SCSI, Qt::UserRole); #ifdef USE_CDROM_MITSUMI model->setData(model->index(3, 0), CDROM_BUS_MITSUMI, Qt::UserRole); + model->setData(model->index(4, 0), CDROM_BUS_MKE, Qt::UserRole); +#else + model->setData(model->index(3, 0), CDROM_BUS_MKE, Qt::UserRole); #endif } +void +Harddrives::populateRemovableBuses(QAbstractItemModel *model) +{ + model->removeRows(0, model->rowCount()); + model->insertRows(0, 3); + + model->setData(model->index(0, 0), QObject::tr("Disabled")); + model->setData(model->index(1, 0), QObject::tr("ATAPI")); + model->setData(model->index(2, 0), QObject::tr("SCSI")); + + model->setData(model->index(0, 0), HDD_BUS_DISABLED, Qt::UserRole); + model->setData(model->index(1, 0), HDD_BUS_ATAPI, Qt::UserRole); + model->setData(model->index(2, 0), HDD_BUS_SCSI, Qt::UserRole); +} + void Harddrives::populateSpeeds(QAbstractItemModel *model, int bus) { @@ -138,6 +161,12 @@ Harddrives::populateBusChannels(QAbstractItemModel *model, int bus, SettingsBusT subChannelWidth = 2; busesToCheck.append(HDD_BUS_SCSI); break; + case CDROM_BUS_MKE: + shifter = 2; + orer = 3; + busRows = 4; + busesToCheck.append(CDROM_BUS_MKE); + break; default: break; } @@ -186,9 +215,12 @@ Harddrives::BusChannelName(uint8_t bus, uint8_t channel) case HDD_BUS_SCSI: busName = QString("SCSI (%1:%2)").arg(channel >> 4).arg(channel & 15, 2, 10, QChar('0')); break; - case CDROM_BUS_MITSUMI: - busName = QString("Mitsumi"); - break; + case CDROM_BUS_MITSUMI: + busName = QString("Mitsumi"); + break; + case CDROM_BUS_MKE: + busName = QString("Panasonic/MKE (%1:%2)").arg(channel >> 2).arg(channel & 3); + break; } return busName; diff --git a/src/qt/qt_harddrive_common.hpp b/src/qt/qt_harddrive_common.hpp index 28189f328..f989711f2 100644 --- a/src/qt/qt_harddrive_common.hpp +++ b/src/qt/qt_harddrive_common.hpp @@ -9,6 +9,7 @@ class SettingsBusTracking; namespace Harddrives { void populateBuses(QAbstractItemModel *model); +void populateCDROMBuses(QAbstractItemModel *model); void populateRemovableBuses(QAbstractItemModel *model); void populateBusChannels(QAbstractItemModel *model, int bus, SettingsBusTracking *sbt = nullptr); void populateSpeeds(QAbstractItemModel *model, int bus); diff --git a/src/qt/qt_keybind.ui b/src/qt/qt_keybind.ui index 835e12020..7bd8a8a62 100644 --- a/src/qt/qt_keybind.ui +++ b/src/qt/qt_keybind.ui @@ -22,7 +22,7 @@ Enter key combo: - Qt::AlignmentFlag::AlignCenter + Qt::AlignCenter @@ -31,17 +31,17 @@ - Qt::Orientation::Horizontal + Qt::Horizontal - Qt::Orientation::Horizontal + Qt::Horizontal - QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok + QDialogButtonBox::Cancel|QDialogButtonBox::Ok diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp index 131b6ad6c..6ff25d60f 100644 --- a/src/qt/qt_machinestatus.cpp +++ b/src/qt/qt_machinestatus.cpp @@ -31,7 +31,7 @@ extern "C" { #include <86box/hdc.h> #include <86box/scsi.h> #include <86box/scsi_device.h> -#include <86box/zip.h> +#include <86box/rdisk.h> #include <86box/mo.h> #include <86box/plat.h> #include <86box/machine.h> @@ -102,7 +102,7 @@ struct Pixmaps { PixmapSetEmptyActive floppy_525; PixmapSetEmptyActive floppy_35; PixmapSetEmptyActive cdrom; - PixmapSetEmptyActive zip; + PixmapSetEmptyActive rdisk; PixmapSetEmptyActive mo; PixmapSetActive hd; PixmapSetEmptyActive net; @@ -283,7 +283,7 @@ struct MachineStatus::States { pixmaps.floppy_525.load(QIcon(":/settings/qt/icons/floppy_525.ico")); pixmaps.floppy_35.load(QIcon(":/settings/qt/icons/floppy_35.ico")); pixmaps.cdrom.load(QIcon(":/settings/qt/icons/cdrom.ico")); - pixmaps.zip.load(QIcon(":/settings/qt/icons/zip.ico")); + pixmaps.rdisk.load(QIcon(":/settings/qt/icons/rdisk.ico")); pixmaps.mo.load(QIcon(":/settings/qt/icons/mo.ico")); pixmaps.hd.load(QIcon(":/settings/qt/icons/hard_disk.ico")); pixmaps.net.load(QIcon(":/settings/qt/icons/network.ico")); @@ -298,8 +298,8 @@ struct MachineStatus::States { for (auto &c : cdrom) { c.pixmaps = &pixmaps.cdrom; } - for (auto &z : zip) { - z.pixmaps = &pixmaps.zip; + for (auto &z : rdisk) { + z.pixmaps = &pixmaps.rdisk; } for (auto &m : mo) { m.pixmaps = &pixmaps.mo; @@ -316,7 +316,7 @@ struct MachineStatus::States { StateEmptyActive cassette; std::array fdd; std::array cdrom; - std::array zip; + std::array rdisk; std::array mo; std::array hdds; std::array net; @@ -388,7 +388,7 @@ MachineStatus::iterateCDROM(const std::function &cb) (scsi_card_current[0] == 0) && (scsi_card_current[1] == 0) && (scsi_card_current[2] == 0) && (scsi_card_current[3] == 0)) continue; - if ((cdrom[i].bus_type == CDROM_BUS_MITSUMI) && (cdrom_interface_current == 0)) + if ((cdrom[i].bus_type == CDROM_BUS_MITSUMI || cdrom[i].bus_type == CDROM_BUS_MKE) && (cdrom_interface_current == 0)) continue; if (cdrom[i].bus_type != 0) { cb(i); @@ -397,21 +397,21 @@ MachineStatus::iterateCDROM(const std::function &cb) } void -MachineStatus::iterateZIP(const std::function &cb) +MachineStatus::iterateRDisk(const std::function &cb) { auto hdc_name = QString(hdc_get_internal_name(hdc_current[0])); - for (size_t i = 0; i < ZIP_NUM; i++) { + for (size_t i = 0; i < RDISK_NUM; i++) { /* Could be Internal or External IDE.. */ - if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) && !hasIDE() && + if ((rdisk_drives[i].bus_type == RDISK_BUS_ATAPI) && !hasIDE() && (hdc_name.left(3) != QStringLiteral("ide")) && (hdc_name.left(5) != QStringLiteral("xtide")) && (hdc_name.left(5) != QStringLiteral("mcide"))) continue; - if ((zip_drives[i].bus_type == ZIP_BUS_SCSI) && !hasSCSI() && + if ((rdisk_drives[i].bus_type == RDISK_BUS_SCSI) && !hasSCSI() && (scsi_card_current[0] == 0) && (scsi_card_current[1] == 0) && (scsi_card_current[2] == 0) && (scsi_card_current[3] == 0)) continue; - if (zip_drives[i].bus_type != 0) { + if (rdisk_drives[i].bus_type != 0) { cb(i); } } @@ -475,9 +475,9 @@ MachineStatus::refreshEmptyIcons() } for (size_t i = 0; i < CDROM_NUM; ++i) d->cdrom[i].setEmpty(machine_status.cdrom[i].empty); - for (size_t i = 0; i < ZIP_NUM; i++) { - d->zip[i].setEmpty(machine_status.zip[i].empty); - d->zip[i].setWriteProtected(machine_status.zip[i].write_prot); + for (size_t i = 0; i < RDISK_NUM; i++) { + d->rdisk[i].setEmpty(machine_status.rdisk[i].empty); + d->rdisk[i].setWriteProtected(machine_status.rdisk[i].write_prot); } for (size_t i = 0; i < MO_NUM; i++) { d->mo[i].setEmpty(machine_status.mo[i].empty); @@ -515,13 +515,13 @@ MachineStatus::refreshIcons() ui_sb_update_icon_write(SB_CDROM | i, 0); } } - for (size_t i = 0; i < ZIP_NUM; i++) { - d->zip[i].setActive(machine_status.zip[i].active); - d->zip[i].setWriteActive(machine_status.zip[i].write_active); - if (machine_status.zip[i].active) - ui_sb_update_icon(SB_ZIP | i, 0); - if (machine_status.zip[i].write_active) - ui_sb_update_icon_write(SB_ZIP | i, 0); + for (size_t i = 0; i < RDISK_NUM; i++) { + d->rdisk[i].setActive(machine_status.rdisk[i].active); + d->rdisk[i].setWriteActive(machine_status.rdisk[i].write_active); + if (machine_status.rdisk[i].active) + ui_sb_update_icon(SB_RDISK | i, 0); + if (machine_status.rdisk[i].write_active) + ui_sb_update_icon_write(SB_RDISK | i, 0); } for (size_t i = 0; i < MO_NUM; i++) { d->mo[i].setActive(machine_status.mo[i].active); @@ -558,9 +558,9 @@ MachineStatus::clearActivity() cdrom.setActive(false); cdrom.setWriteActive(false); } - for (auto &zip : d->zip) { - zip.setActive(false); - zip.setWriteActive(false); + for (auto &rdisk : d->rdisk) { + rdisk.setActive(false); + rdisk.setWriteActive(false); } for (auto &mo : d->mo) { mo.setActive(false); @@ -600,8 +600,8 @@ MachineStatus::refresh(QStatusBar *sbar) for (size_t i = 0; i < CDROM_NUM; i++) { sbar->removeWidget(d->cdrom[i].label.get()); } - for (size_t i = 0; i < ZIP_NUM; i++) { - sbar->removeWidget(d->zip[i].label.get()); + for (size_t i = 0; i < RDISK_NUM; i++) { + sbar->removeWidget(d->rdisk[i].label.get()); } for (size_t i = 0; i < MO_NUM; i++) { sbar->removeWidget(d->mo[i].label.get()); @@ -630,7 +630,7 @@ MachineStatus::refresh(QStatusBar *sbar) connect((ClickableLabel *) d->cassette.label.get(), &ClickableLabel::dropped, [](QString str) { MediaMenu::ptr->cassetteMount(str, false); }); - d->cassette.label->setToolTip(MediaMenu::ptr->cassetteMenu->title()); + d->cassette.label->setToolTip(MediaMenu::ptr->cassetteMenu->toolTip()); d->cassette.label->setAcceptDrops(true); sbar->addWidget(d->cassette.label.get()); } @@ -646,7 +646,7 @@ MachineStatus::refresh(QStatusBar *sbar) connect((ClickableLabel *) d->cartridge[i].label.get(), &ClickableLabel::dropped, [i](QString str) { MediaMenu::ptr->cartridgeMount(i, str); }); - d->cartridge[i].label->setToolTip(MediaMenu::ptr->cartridgeMenus[i]->title()); + d->cartridge[i].label->setToolTip(MediaMenu::ptr->cartridgeMenus[i]->toolTip()); d->cartridge[i].label->setAcceptDrops(true); sbar->addWidget(d->cartridge[i].label.get()); } @@ -678,7 +678,7 @@ MachineStatus::refresh(QStatusBar *sbar) connect((ClickableLabel *) d->fdd[i].label.get(), &ClickableLabel::dropped, [i](QString str) { MediaMenu::ptr->floppyMount(i, str, false); }); - d->fdd[i].label->setToolTip(MediaMenu::ptr->floppyMenus[i]->title()); + d->fdd[i].label->setToolTip(MediaMenu::ptr->floppyMenus[i]->toolTip()); d->fdd[i].label->setAcceptDrops(true); sbar->addWidget(d->fdd[i].label.get()); }); @@ -695,43 +695,43 @@ MachineStatus::refresh(QStatusBar *sbar) connect((ClickableLabel *) d->cdrom[i].label.get(), &ClickableLabel::dropped, [i](QString str) { MediaMenu::ptr->cdromMount(i, str); }); - d->cdrom[i].label->setToolTip(MediaMenu::ptr->cdromMenus[i]->title()); + d->cdrom[i].label->setToolTip(MediaMenu::ptr->cdromMenus[i]->toolTip()); d->cdrom[i].label->setAcceptDrops(true); sbar->addWidget(d->cdrom[i].label.get()); }); - iterateZIP([this, sbar](int i) { - d->zip[i].label = std::make_unique(); - d->zip[i].setEmpty(QString(zip_drives[i].image_path).isEmpty()); - if (QString(zip_drives[i].image_path).isEmpty()) - d->zip[i].setWriteProtected(false); - else if (QString(zip_drives[i].image_path).left(5) == "wp://") - d->zip[i].setWriteProtected(true); + iterateRDisk([this, sbar](int i) { + d->rdisk[i].label = std::make_unique(); + d->rdisk[i].setEmpty(QString(rdisk_drives[i].image_path).isEmpty()); + if (QString(rdisk_drives[i].image_path).isEmpty()) + d->rdisk[i].setWriteProtected(false); + else if (QString(rdisk_drives[i].image_path).left(5) == "wp://") + d->rdisk[i].setWriteProtected(true); else - d->zip[i].setWriteProtected(zip_drives[i].read_only); - d->zip[i].setActive(false); - d->zip[i].setWriteActive(false); - d->zip[i].refresh(); - connect((ClickableLabel *) d->zip[i].label.get(), &ClickableLabel::clicked, [i](QPoint pos) { - MediaMenu::ptr->zipMenus[i]->popup(pos - QPoint(0, MediaMenu::ptr->zipMenus[i]->sizeHint().height())); + d->rdisk[i].setWriteProtected(rdisk_drives[i].read_only); + d->rdisk[i].setActive(false); + d->rdisk[i].setWriteActive(false); + d->rdisk[i].refresh(); + connect((ClickableLabel *) d->rdisk[i].label.get(), &ClickableLabel::clicked, [i](QPoint pos) { + MediaMenu::ptr->rdiskMenus[i]->popup(pos - QPoint(0, MediaMenu::ptr->rdiskMenus[i]->sizeHint().height())); }); - connect((ClickableLabel *) d->zip[i].label.get(), &ClickableLabel::dropped, [i](QString str) { - MediaMenu::ptr->zipMount(i, str, false); + connect((ClickableLabel *) d->rdisk[i].label.get(), &ClickableLabel::dropped, [i](QString str) { + MediaMenu::ptr->rdiskMount(i, str, false); }); - d->zip[i].label->setToolTip(MediaMenu::ptr->zipMenus[i]->title()); - d->zip[i].label->setAcceptDrops(true); - sbar->addWidget(d->zip[i].label.get()); + d->rdisk[i].label->setToolTip(MediaMenu::ptr->rdiskMenus[i]->toolTip()); + d->rdisk[i].label->setAcceptDrops(true); + sbar->addWidget(d->rdisk[i].label.get()); }); iterateMO([this, sbar](int i) { d->mo[i].label = std::make_unique(); d->mo[i].setEmpty(QString(mo_drives[i].image_path).isEmpty()); - if (QString(zip_drives[i].image_path).isEmpty()) + if (QString(rdisk_drives[i].image_path).isEmpty()) d->mo[i].setWriteProtected(false); - else if (QString(zip_drives[i].image_path).left(5) == "wp://") + else if (QString(rdisk_drives[i].image_path).left(5) == "wp://") d->mo[i].setWriteProtected(true); else - d->mo[i].setWriteProtected(zip_drives[i].read_only); + d->mo[i].setWriteProtected(rdisk_drives[i].read_only); d->mo[i].setActive(false); d->mo[i].setWriteActive(false); d->mo[i].refresh(); @@ -741,7 +741,7 @@ MachineStatus::refresh(QStatusBar *sbar) connect((ClickableLabel *) d->mo[i].label.get(), &ClickableLabel::dropped, [i](QString str) { MediaMenu::ptr->moMount(i, str, false); }); - d->mo[i].label->setToolTip(MediaMenu::ptr->moMenus[i]->title()); + d->mo[i].label->setToolTip(MediaMenu::ptr->moMenus[i]->toolTip()); d->mo[i].label->setAcceptDrops(true); sbar->addWidget(d->mo[i].label.get()); }); @@ -752,7 +752,7 @@ MachineStatus::refresh(QStatusBar *sbar) d->net[i].setActive(false); d->net[i].setWriteActive(false); d->net[i].refresh(); - d->net[i].label->setToolTip(MediaMenu::ptr->netMenus[i]->title()); + d->net[i].label->setToolTip(MediaMenu::ptr->netMenus[i]->toolTip()); connect((ClickableLabel *) d->net[i].label.get(), &ClickableLabel::clicked, [i](QPoint pos) { MediaMenu::ptr->netMenus[i]->popup(pos - QPoint(0, MediaMenu::ptr->netMenus[i]->sizeHint().height())); }); @@ -910,27 +910,27 @@ MachineStatus::updateTip(int tag) switch (category) { case SB_CASSETTE: if (d->cassette.label && MediaMenu::ptr->cassetteMenu) - d->cassette.label->setToolTip(MediaMenu::ptr->cassetteMenu->title()); + d->cassette.label->setToolTip(MediaMenu::ptr->cassetteMenu->toolTip()); break; case SB_CARTRIDGE: if (d->cartridge[item].label && MediaMenu::ptr->cartridgeMenus[item]) - d->cartridge[item].label->setToolTip(MediaMenu::ptr->cartridgeMenus[item]->title()); + d->cartridge[item].label->setToolTip(MediaMenu::ptr->cartridgeMenus[item]->toolTip()); break; case SB_FLOPPY: if (d->fdd[item].label && MediaMenu::ptr->floppyMenus[item]) - d->fdd[item].label->setToolTip(MediaMenu::ptr->floppyMenus[item]->title()); + d->fdd[item].label->setToolTip(MediaMenu::ptr->floppyMenus[item]->toolTip()); break; case SB_CDROM: if (d->cdrom[item].label && MediaMenu::ptr->cdromMenus[item]) - d->cdrom[item].label->setToolTip(MediaMenu::ptr->cdromMenus[item]->title()); + d->cdrom[item].label->setToolTip(MediaMenu::ptr->cdromMenus[item]->toolTip()); break; - case SB_ZIP: - if (d->zip[item].label && MediaMenu::ptr->zipMenus[item]) - d->zip[item].label->setToolTip(MediaMenu::ptr->zipMenus[item]->title()); + case SB_RDISK: + if (d->rdisk[item].label && MediaMenu::ptr->rdiskMenus[item]) + d->rdisk[item].label->setToolTip(MediaMenu::ptr->rdiskMenus[item]->toolTip()); break; case SB_MO: if (d->mo[item].label && MediaMenu::ptr->moMenus[item]) - d->mo[item].label->setToolTip(MediaMenu::ptr->moMenus[item]->title()); + d->mo[item].label->setToolTip(MediaMenu::ptr->moMenus[item]->toolTip()); break; case SB_HDD: break; diff --git a/src/qt/qt_machinestatus.hpp b/src/qt/qt_machinestatus.hpp index ad6425b5a..9dde36a63 100644 --- a/src/qt/qt_machinestatus.hpp +++ b/src/qt/qt_machinestatus.hpp @@ -67,7 +67,7 @@ public: static bool hasSCSI(); static void iterateFDD(const std::function &cb); static void iterateCDROM(const std::function &cb); - static void iterateZIP(const std::function &cb); + static void iterateRDisk(const std::function &cb); static void iterateMO(const std::function &cb); static void iterateNIC(const std::function &cb); diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index b3b880094..f1f0b3b20 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -441,9 +441,6 @@ main_thread_fn() int frames; QThread::currentThread()->setPriority(QThread::HighestPriority); -#ifdef _WIN32 - SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL); -#endif plat_set_thread_name(nullptr, "main_thread_fn"); framecountx = 0; // title_update = 1; @@ -564,13 +561,11 @@ main(int argc, char *argv[]) } #endif - qt_set_sequence_auto_mnemonic(false); Q_INIT_RESOURCE(qt_resources); Q_INIT_RESOURCE(qt_translations); QSurfaceFormat fmt = QSurfaceFormat::defaultFormat(); fmt.setSwapInterval(0); QSurfaceFormat::setDefaultFormat(fmt); - app.setStyle(new StyleOverride()); #ifdef __APPLE__ CocoaEventFilter cocoafilter; @@ -589,6 +584,14 @@ main(int argc, char *argv[]) return 0; } + if (!vmm_enabled) +#ifdef Q_OS_MACOS + qt_set_sequence_auto_mnemonic(false); +#else + qt_set_sequence_auto_mnemonic(!!kbd_req_capture); +#endif + app.setStyle(new StyleOverride()); + bool startMaximized = window_remember && monitor_settings[0].mon_window_maximized; fprintf(stderr, "Qt: version %s, platform \"%s\"\n", qVersion(), QApplication::platformName().toUtf8().data()); ProgSettings::loadTranslators(&app); @@ -622,6 +625,19 @@ main(int argc, char *argv[]) return 6; } + if (vmm_enabled) { + // VMManagerMain vmm; + // // Hackish until there is a proper solution + // QApplication::setApplicationName("86Box VM Manager"); + // QApplication::setApplicationDisplayName("86Box VM Manager"); + // vmm.show(); + // vmm.exec(); + const auto vmm_main_window = new VMManagerMainWindow(); + vmm_main_window->show(); + QApplication::exec(); + return 0; + } + // UUID / copy / move detection if(!util::compareUuid()) { QMessageBox movewarnbox; @@ -664,6 +680,11 @@ main(int argc, char *argv[]) #endif if (settings_only) { + VMManagerClientSocket manager_socket; + if (qgetenv("VMM_86BOX_SOCKET").size()) { + manager_socket.IPCConnect(qgetenv("VMM_86BOX_SOCKET")); + manager_socket.clientRunningStateChanged(VMManagerProtocol::RunningState::PausedWaiting); + } Settings settings; if (settings.exec() == QDialog::Accepted) { settings.save(); @@ -684,19 +705,6 @@ main(int argc, char *argv[]) return 0; } - if (vmm_enabled) { - // VMManagerMain vmm; - // // Hackish until there is a proper solution - // QApplication::setApplicationName("86Box VM Manager"); - // QApplication::setApplicationDisplayName("86Box VM Manager"); - // vmm.show(); - // vmm.exec(); - const auto vmm_main_window = new VMManagerMainWindow(); - vmm_main_window->show(); - QApplication::exec(); - return 0; - } - #ifdef DISCORD discord_load(); #endif @@ -806,6 +814,7 @@ main(int argc, char *argv[]) emit main_window->close(); }); QObject::connect(main_window, &MainWindow::vmmRunningStateChanged, &manager_socket, &VMManagerClientSocket::clientRunningStateChanged); + QObject::connect(main_window, &MainWindow::vmmConfigurationChanged, &manager_socket, &VMManagerClientSocket::configurationChanged); main_window->installEventFilter(&manager_socket); manager_socket.sendWinIdMessage(main_window->winId()); diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 861037f99..e7a90e0c3 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -92,11 +92,14 @@ extern bool cpu_thread_running; # include #endif +void qt_set_sequence_auto_mnemonic(bool b); + #include #include #include #include "qt_settings.hpp" +#include "qt_about.hpp" #include "qt_machinestatus.hpp" #include "qt_mediamenu.hpp" #include "qt_util.hpp" @@ -268,9 +271,11 @@ MainWindow::MainWindow(QWidget *parent) num_label->setVisible(machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD)); scroll_label->setVisible(machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD)); caps_label->setVisible(machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD)); - /* TODO: Base this on keyboard type instead when that's done. */ - kana_label->setVisible(machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD) && - machine_has_flags(machine, MACHINE_AX)); + int ext_ax_kbd = machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD) && + (keyboard_type == KEYBOARD_TYPE_AX); + int int_ax_kbd = machine_has_flags(machine, MACHINE_KEYBOARD_JIS) && + !machine_has_bus(machine, MACHINE_BUS_PS2_PORTS); + kana_label->setVisible(ext_ax_kbd || int_ax_kbd); while (QApplication::overrideCursor()) QApplication::restoreOverrideCursor(); #ifdef USE_WACOM @@ -302,8 +307,6 @@ MainWindow::MainWindow(QWidget *parent) } } #endif - ui->actionPause->setChecked(false); - ui->actionPause->setCheckable(false); }); connect(this, &MainWindow::getTitleForNonQtThread, this, &MainWindow::getTitle_, Qt::BlockingQueuedConnection); @@ -334,6 +337,16 @@ MainWindow::MainWindow(QWidget *parent) } ui->stackedWidget->unsetCursor(); } +#ifndef Q_OS_MACOS + if (kbd_req_capture) { + qt_set_sequence_auto_mnemonic(!mouse_capture); + /* Hack to get the menubar to update the internal Alt+shortcut table */ + if (!video_fullscreen) { + ui->menubar->hide(); + ui->menubar->show(); + } + } +#endif }); connect(qApp, &QGuiApplication::applicationStateChanged, [this](Qt::ApplicationState state) { @@ -1033,6 +1046,14 @@ void MainWindow::on_actionKeyboard_requires_capture_triggered() { kbd_req_capture ^= 1; +#ifndef Q_OS_MACOS + qt_set_sequence_auto_mnemonic(!!kbd_req_capture); + /* Hack to get the menubar to update the internal Alt+shortcut table */ + if (!video_fullscreen) { + ui->menubar->hide(); + ui->menubar->show(); + } +#endif } void @@ -1108,7 +1129,8 @@ MainWindow::on_actionSettings_triggered() case QDialog::Accepted: settings.save(); config_changed = 2; - updateShortcuts(); + updateShortcuts(); + emit vmmConfigurationChanged(); pc_reset_hard(); break; case QDialog::Rejected: @@ -1431,7 +1453,7 @@ MainWindow::eventFilter(QObject *receiver, QEvent *event) } - if (!dopause) { + if (!dopause && (!kbd_req_capture || mouse_capture)) { if (event->type() == QEvent::Shortcut) { auto shortcutEvent = (QShortcutEvent *) event; if (shortcutEvent->key() == ui->actionExit->shortcut()) { @@ -1484,8 +1506,11 @@ MainWindow::refreshMediaMenu() caps_label->setToolTip(QShortcut::tr("Caps Lock")); caps_label->setVisible(machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD)); kana_label->setToolTip(QShortcut::tr("Kana Lock")); - kana_label->setVisible(machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD) && - machine_has_flags(machine, MACHINE_AX)); + int ext_ax_kbd = machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD) && + (keyboard_type == KEYBOARD_TYPE_AX); + int int_ax_kbd = machine_has_flags(machine, MACHINE_KEYBOARD_JIS) && + !machine_has_bus(machine, MACHINE_BUS_PS2_PORTS); + kana_label->setVisible(ext_ax_kbd || int_ax_kbd); } void @@ -1905,42 +1930,8 @@ MainWindow::on_actionAbout_Qt_triggered() void MainWindow::on_actionAbout_86Box_triggered() { - QMessageBox msgBox; - msgBox.setTextFormat(Qt::RichText); - QString versioninfo; -#ifdef EMU_GIT_HASH - versioninfo = QString(" [%1]").arg(EMU_GIT_HASH); -#endif -#ifdef USE_DYNAREC -# ifdef USE_NEW_DYNAREC -# define DYNAREC_STR "new dynarec" -# else -# define DYNAREC_STR "old dynarec" -# endif -#else -# define DYNAREC_STR "no dynarec" -#endif - versioninfo.append(QString(" [%1, %2]").arg(QSysInfo::buildCpuArchitecture(), tr(DYNAREC_STR))); - msgBox.setText(QString("%3%1%2").arg(EMU_VERSION_FULL, versioninfo, tr("86Box v"))); - msgBox.setInformativeText(tr("An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information.")); - msgBox.setWindowTitle(tr("About 86Box")); - const auto closeButton = msgBox.addButton("OK", QMessageBox::ButtonRole::AcceptRole); - msgBox.setEscapeButton(closeButton); - const auto webSiteButton = msgBox.addButton(EMU_SITE, QMessageBox::ButtonRole::HelpRole); - webSiteButton->connect(webSiteButton, &QPushButton::released, []() { - QDesktopServices::openUrl(QUrl("https://" EMU_SITE)); - }); -#ifdef RELEASE_BUILD - msgBox.setIconPixmap(QIcon(":/settings/qt/icons/86Box-green.ico").pixmap(32, 32)); -#elif defined ALPHA_BUILD - msgBox.setIconPixmap(QIcon(":/settings/qt/icons/86Box-red.ico").pixmap(32, 32)); -#elif defined BETA_BUILD - msgBox.setIconPixmap(QIcon(":/settings/qt/icons/86Box-yellow.ico").pixmap(32, 32)); -#else - msgBox.setIconPixmap(QIcon(":/settings/qt/icons/86Box-gray.ico").pixmap(32, 32)); -#endif - msgBox.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint); - msgBox.exec(); + const auto msgBox = new About(this); + msgBox->exec(); } void @@ -2112,8 +2103,11 @@ MainWindow::updateUiPauseState() QIcon(":/menuicons/qt/icons/pause.ico"); const auto tooltip_text = dopause ? QString(tr("Resume execution")) : QString(tr("Pause execution")); + const auto menu_text = dopause ? QString(tr("Re&sume")) : + QString(tr("&Pause")); ui->actionPause->setIcon(pause_icon); ui->actionPause->setToolTip(tooltip_text); + ui->actionPause->setText(menu_text); emit vmmRunningStateChanged(static_cast(window_blocked ? (dopause ? VMManagerProtocol::RunningState::PausedWaiting : VMManagerProtocol::RunningState::RunningWaiting) : (VMManagerProtocol::RunningState)dopause)); } diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 370d97d0e..e7611d576 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -67,6 +67,7 @@ signals: void getTitleForNonQtThread(wchar_t *title); void vmmRunningStateChanged(VMManagerProtocol::RunningState state); + void vmmConfigurationChanged(); public slots: void showSettings(); void hardReset(); @@ -85,7 +86,7 @@ private slots: void on_actionCtrl_Alt_Esc_triggered(); void on_actionHard_Reset_triggered(); void on_actionRight_CTRL_is_left_ALT_triggered(); - static void on_actionKeyboard_requires_capture_triggered(); + void on_actionKeyboard_requires_capture_triggered(); void on_actionResizable_window_triggered(bool checked); void on_actionInverted_VGA_monitor_triggered(); void on_action0_5x_triggered(); diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 63bc0b01b..a0f06e75e 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -63,7 +63,7 @@ - Tablet tool + &Tablet tool @@ -142,7 +142,7 @@ - Filter method + Fi&lter method @@ -341,9 +341,6 @@ - - true - :/menuicons/qt/icons/pause.ico:/menuicons/qt/icons/pause.ico @@ -357,7 +354,7 @@ - Exit + E&xit QAction::QuitRole @@ -423,7 +420,7 @@ - Specify dimensions... + Specify &dimensions... @@ -668,7 +665,7 @@ - About Qt + About &Qt false @@ -766,7 +763,7 @@ :/menuicons/qt/icons/acpi_shutdown.ico:/menuicons/qt/icons/acpi_shutdown.ico - ACPI shutdown + ACP&I shutdown ACPI shutdown @@ -805,7 +802,7 @@ - Renderer options... + Renderer &options... QAction::NoRole @@ -824,7 +821,7 @@ - MCA devices... + &MCA devices... @@ -832,7 +829,7 @@ true - Show non-primary monitors + Show non-&primary monitors @@ -840,7 +837,7 @@ true - VNC + &VNC 3 @@ -848,7 +845,7 @@ - Open screenshots folder... + Open screenshots &folder... @@ -856,7 +853,7 @@ true - Apply fullscreen stretch mode when maximized + Appl&y fullscreen stretch mode when maximized @@ -864,7 +861,7 @@ true - Cursor/Puck + &Cursor/Puck @@ -872,7 +869,7 @@ true - Pen + &Pen diff --git a/src/qt/qt_mediahistorymanager.cpp b/src/qt/qt_mediahistorymanager.cpp index 74d596866..724616d1c 100644 --- a/src/qt/qt_mediahistorymanager.cpp +++ b/src/qt/qt_mediahistorymanager.cpp @@ -33,7 +33,7 @@ extern "C" { #include <86box/fdd.h> #include <86box/cdrom.h> #include <86box/scsi_device.h> -#include <86box/zip.h> +#include <86box/rdisk.h> #include <86box/mo.h> #include <86box/path.h> } @@ -114,8 +114,8 @@ MediaHistoryManager::maxDevicesSupported(ui::MediaType type) return CDROM_NUM; case ui::MediaType::Floppy: return FDD_NUM; - case ui::MediaType::Zip: - return ZIP_NUM; + case ui::MediaType::RDisk: + return RDISK_NUM; case ui::MediaType::Mo: return MO_NUM; case ui::MediaType::Cassette: @@ -200,8 +200,8 @@ MediaHistoryManager::initialDeduplication() case ui::MediaType::Optical: current_image = cdrom[device_index].image_path; break; - case ui::MediaType::Zip: - current_image = zip_drives[device_index].image_path; + case ui::MediaType::RDisk: + current_image = rdisk_drives[device_index].image_path; break; case ui::MediaType::Mo: current_image = mo_drives[device_index].image_path; @@ -237,8 +237,8 @@ MediaHistoryManager::getEmuHistoryVarForType(ui::MediaType type, int index) return &fdd_image_history[index][0]; case ui::MediaType::Optical: return &cdrom[index].image_history[0]; - case ui::MediaType::Zip: - return &zip_drives[index].image_history[0]; + case ui::MediaType::RDisk: + return &rdisk_drives[index].image_history[0]; case ui::MediaType::Mo: return &mo_drives[index].image_history[0]; } diff --git a/src/qt/qt_mediahistorymanager.hpp b/src/qt/qt_mediahistorymanager.hpp index 29ada8e2a..92b5939d3 100644 --- a/src/qt/qt_mediahistorymanager.hpp +++ b/src/qt/qt_mediahistorymanager.hpp @@ -45,7 +45,7 @@ Q_NAMESPACE enum class MediaType { Floppy, Optical, - Zip, + RDisk, Mo, Cassette, Cartridge @@ -62,7 +62,7 @@ typedef QHash master_list_t; static const MediaType AllSupportedMediaHistoryTypes[] = { MediaType::Optical, MediaType::Floppy, - MediaType::Zip, + MediaType::RDisk, MediaType::Mo, MediaType::Cassette, MediaType::Cartridge diff --git a/src/qt/qt_mediamenu.cpp b/src/qt/qt_mediamenu.cpp index 2a0b3bbfd..cc9fdbd49 100644 --- a/src/qt/qt_mediamenu.cpp +++ b/src/qt/qt_mediamenu.cpp @@ -56,7 +56,7 @@ extern "C" { #include <86box/fdd_86f.h> #include <86box/cdrom.h> #include <86box/scsi_device.h> -#include <86box/zip.h> +#include <86box/rdisk.h> #include <86box/mo.h> #include <86box/sound.h> #include <86box/ui.h> @@ -177,7 +177,7 @@ MediaMenu::refresh(QMenu *parentMenu) for (const auto &letter : driveLetters) { auto drive = QString("%1:\\").arg(letter); if (GetDriveType(drive.toUtf8().constData()) == DRIVE_CDROM) - menu->addAction(QIcon(":/settings/qt/icons/cdrom_host.ico"), tr("Host CD/DVD Drive (%1:)").arg(letter), [this, i, letter] { cdromMount(i, 2, QString(R"(\\.\%1:)").arg(letter)); })->setCheckable(false); + menu->addAction(QIcon(":/settings/qt/icons/cdrom_host.ico"), tr("&Host CD/DVD Drive (%1:)").arg(letter), [this, i, letter] { cdromMount(i, 2, QString(R"(\\.\%1:)").arg(letter)); })->setCheckable(false); } menu->addSeparator(); #endif // Q_OS_WINDOWS @@ -187,24 +187,24 @@ MediaMenu::refresh(QMenu *parentMenu) cdromUpdateMenu(i); }); - zipMenus.clear(); - MachineStatus::iterateZIP([this, parentMenu](int i) { + rdiskMenus.clear(); + MachineStatus::iterateRDisk([this, parentMenu](int i) { auto *menu = parentMenu->addMenu(""); - QIcon img_icon = QIcon(":/settings/qt/icons/zip_image.ico"); - menu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, New), tr("&New image..."), [this, i]() { zipNewImage(i); }); + QIcon img_icon = QIcon(":/settings/qt/icons/rdisk_image.ico"); + menu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, New), tr("&New image..."), [this, i]() { rdiskNewImage(i); }); menu->addSeparator(); - menu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, Browse), tr("&Existing image..."), [this, i]() { zipSelectImage(i, false); }); - menu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, WriteProtectedBrowse), tr("Existing image (&Write-protected)..."), [this, i]() { zipSelectImage(i, true); }); + menu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, Browse), tr("&Existing image..."), [this, i]() { rdiskSelectImage(i, false); }); + menu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, WriteProtectedBrowse), tr("Existing image (&Write-protected)..."), [this, i]() { rdiskSelectImage(i, true); }); menu->addSeparator(); for (int slot = 0; slot < MAX_PREV_IMAGES; slot++) { - zipImageHistoryPos[slot] = menu->children().count(); - menu->addAction(img_icon, tr("Image %1").arg(slot), [this, i, slot]() { zipReload(i, slot); })->setCheckable(false); + rdiskImageHistoryPos[slot] = menu->children().count(); + menu->addAction(img_icon, tr("Image %1").arg(slot), [this, i, slot]() { rdiskReload(i, slot); })->setCheckable(false); } menu->addSeparator(); - zipEjectPos = menu->children().count(); - menu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, Eject), tr("E&ject"), [this, i]() { zipEject(i); }); - zipMenus[i] = menu; - zipUpdateMenu(i); + rdiskEjectPos = menu->children().count(); + menu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, Eject), tr("E&ject"), [this, i]() { rdiskEject(i); }); + rdiskMenus[i] = menu; + rdiskUpdateMenu(i); }); moMenus.clear(); @@ -236,7 +236,7 @@ MediaMenu::refresh(QMenu *parentMenu) netMenus[i] = menu; nicUpdateMenu(i); }); - parentMenu->addAction(tr("Clear image history"), [this]() { clearImageHistory(); }); + parentMenu->addAction(tr("Clear image &history"), [this]() { clearImageHistory(); }); } void @@ -340,7 +340,8 @@ MediaMenu::cassetteUpdateMenu() recordMenu->setChecked(isSaving); playMenu->setChecked(!isSaving); - cassetteMenu->setTitle(tr("Cassette: %1").arg(name.isEmpty() ? tr("(empty)") : name)); + cassetteMenu->setTitle(tr("C&assette: %1").arg(name.isEmpty() ? tr("(empty)") : name)); + cassetteMenu->setToolTip(tr("Cassette: %1").arg(name.isEmpty() ? tr("(empty)") : name)); for (int slot = 0; slot < MAX_PREV_IMAGES; slot++) { updateImageHistory(0, slot, ui::MediaType::Cassette); @@ -407,7 +408,8 @@ MediaMenu::cartridgeUpdateMenu(int i) auto *ejectMenu = dynamic_cast(childs[cartridgeEjectPos]); ejectMenu->setEnabled(!name.isEmpty()); ejectMenu->setText(name.isEmpty() ? tr("E&ject") : tr("E&ject %1").arg(fi.fileName())); - menu->setTitle(tr("Cartridge %1: %2").arg(QString::number(i + 1), name.isEmpty() ? tr("(empty)") : name)); + menu->setTitle(tr("Car&tridge %1: %2").arg(QString::number(i + 1), name.isEmpty() ? tr("(empty)") : name)); + menu->setToolTip(tr("Cartridge %1: %2").arg(QString::number(i + 1), name.isEmpty() ? tr("(empty)") : name)); for (int slot = 0; slot < MAX_PREV_IMAGES; slot++) { updateImageHistory(i, slot, ui::MediaType::Cartridge); @@ -524,7 +526,8 @@ MediaMenu::floppyUpdateMenu(int i) } int type = fdd_get_type(i); - floppyMenus[i]->setTitle(tr("Floppy %1 (%2): %3").arg(QString::number(i + 1), fdd_getname(type), name.isEmpty() ? tr("(empty)") : name)); + floppyMenus[i]->setTitle(tr("&Floppy %1 (%2): %3").arg(QString::number(i + 1), fdd_getname(type), name.isEmpty() ? tr("(empty)") : name)); + floppyMenus[i]->setToolTip(tr("Floppy %1 (%2): %3").arg(QString::number(i + 1), fdd_getname(type), name.isEmpty() ? tr("(empty)") : name)); } @@ -725,12 +728,12 @@ MediaMenu::updateImageHistory(int index, int slot, ui::MediaType type) } imageHistoryUpdatePos->setIcon(menu_icon); break; - case ui::MediaType::Zip: - if (!zipMenus.contains(index)) + case ui::MediaType::RDisk: + if (!rdiskMenus.contains(index)) return; - menu = zipMenus[index]; + menu = rdiskMenus[index]; children = menu->children(); - imageHistoryUpdatePos = dynamic_cast(children[zipImageHistoryPos[slot]]); + imageHistoryUpdatePos = dynamic_cast(children[rdiskImageHistoryPos[slot]]); menu_icon = QIcon(":/settings/qt/icons/mo_image.ico"); if (fn.left(5) == "wp://") fi.setFile(fn.right(fn.length() - 5)); @@ -765,6 +768,11 @@ MediaMenu::updateImageHistory(int index, int slot, ui::MediaType type) break; } +#ifndef Q_OS_MACOS + if ((slot >= 0) && (slot <= 9)) + imageHistoryUpdatePos->setText(menu_item_name.prepend("&%1 ").arg((slot == 9) ? 0 : (slot + 1))); + else +#endif imageHistoryUpdatePos->setText(menu_item_name); if (fn.left(8) == "ioctl://") @@ -834,153 +842,192 @@ MediaMenu::cdromUpdateMenu(int i) busName = "SCSI"; break; case CDROM_BUS_MITSUMI: - busName = "Mitsumi"; - break; + busName = "Mitsumi"; + break; + case CDROM_BUS_MKE: + busName = "Panasonic/MKE"; + break; } - menu->setTitle(tr("CD-ROM %1 (%2): %3").arg(QString::number(i+1), busName, name.isEmpty() ? tr("(empty)") : name2)); + menu->setTitle(tr("&CD-ROM %1 (%2): %3").arg(QString::number(i+1), busName, name.isEmpty() ? tr("(empty)") : name2)); + menu->setToolTip(tr("CD-ROM %1 (%2): %3").arg(QString::number(i+1), busName, name.isEmpty() ? tr("(empty)") : name2)); } void -MediaMenu::zipNewImage(int i) +MediaMenu::rdiskNewImage(int i) { - NewFloppyDialog dialog(NewFloppyDialog::MediaType::Zip, parentWidget); + NewFloppyDialog dialog(NewFloppyDialog::MediaType::RDisk, parentWidget); switch (dialog.exec()) { default: break; case QDialog::Accepted: QByteArray filename = dialog.fileName().toUtf8(); - zipMount(i, filename, false); + rdiskMount(i, filename, false); break; } } void -MediaMenu::zipSelectImage(int i, bool wp) +MediaMenu::rdiskSelectImage(int i, bool wp) { const auto filename = QFileDialog::getOpenFileName( parentWidget, QString(), QString(), - tr("ZIP images") % util::DlgFilter({ "im?", "zdi" }) % tr("All files") % util::DlgFilter({ "*" }, true)); + tr("Removable disk images") % util::DlgFilter({ "im?", "rdi", "zdi" }) % tr("All files") % util::DlgFilter({ "*" }, true)); if (!filename.isEmpty()) - zipMount(i, filename, wp); + rdiskMount(i, filename, wp); } void -MediaMenu::zipMount(int i, const QString &filename, bool wp) +MediaMenu::rdiskMount(int i, const QString &filename, bool wp) { - const auto dev = static_cast(zip_drives[i].priv); - int was_empty = zip_is_empty(i); + const auto dev = static_cast(rdisk_drives[i].priv); + int was_empty = rdisk_is_empty(i); - zip_disk_close(dev); - zip_drives[i].read_only = wp; + rdisk_disk_close(dev); + rdisk_drives[i].read_only = wp; if (!filename.isEmpty()) { QByteArray filenameBytes = filename.toUtf8(); if (filename.left(5) == "wp://") - zip_drives[i].read_only = 1; - else if (zip_drives[i].read_only) + rdisk_drives[i].read_only = 1; + else if (rdisk_drives[i].read_only) filenameBytes = QString::asprintf(R"(wp://%s)", filename.toUtf8().data()).toUtf8(); - zip_load(dev, filenameBytes.data(), 1); + rdisk_load(dev, filenameBytes.data(), 1); /* Signal media change to the emulated machine. */ - zip_insert(dev); + rdisk_insert(dev); /* The drive was previously empty, transition directly to UNIT ATTENTION. */ if (was_empty) - zip_insert(dev); + rdisk_insert(dev); } - mhm.addImageToHistory(i, ui::MediaType::Zip, zip_drives[i].prev_image_path, zip_drives[i].image_path); + mhm.addImageToHistory(i, ui::MediaType::RDisk, rdisk_drives[i].prev_image_path, rdisk_drives[i].image_path); - ui_sb_update_icon_state(SB_ZIP | i, filename.isEmpty() ? 1 : 0); - ui_sb_update_icon_wp(SB_ZIP | i, wp); - zipUpdateMenu(i); - ui_sb_update_tip(SB_ZIP | i); + ui_sb_update_icon_state(SB_RDISK | i, filename.isEmpty() ? 1 : 0); + ui_sb_update_icon_wp(SB_RDISK | i, wp); + rdiskUpdateMenu(i); + ui_sb_update_tip(SB_RDISK | i); config_save(); } void -MediaMenu::zipEject(int i) +MediaMenu::rdiskEject(int i) { - const auto dev = static_cast(zip_drives[i].priv); + const auto dev = static_cast(rdisk_drives[i].priv); - mhm.addImageToHistory(i, ui::MediaType::Zip, zip_drives[i].image_path, QString()); - zip_disk_close(dev); - zip_drives[i].image_path[0] = 0; - if (zip_drives[i].bus_type) { + mhm.addImageToHistory(i, ui::MediaType::RDisk, rdisk_drives[i].image_path, QString()); + rdisk_disk_close(dev); + rdisk_drives[i].image_path[0] = 0; + if (rdisk_drives[i].bus_type) { /* Signal disk change to the emulated machine. */ - zip_insert(dev); + rdisk_insert(dev); } - ui_sb_update_icon_state(SB_ZIP | i, 1); - zipUpdateMenu(i); - ui_sb_update_tip(SB_ZIP | i); + ui_sb_update_icon_state(SB_RDISK | i, 1); + rdiskUpdateMenu(i); + ui_sb_update_tip(SB_RDISK | i); config_save(); } void -MediaMenu::zipReloadPrev(int i) +MediaMenu::rdiskReloadPrev(int i) { - const auto dev = static_cast(zip_drives[i].priv); + const auto dev = static_cast(rdisk_drives[i].priv); - zip_disk_reload(dev); - if (strlen(zip_drives[i].image_path) == 0) { - ui_sb_update_icon_state(SB_ZIP | i, 1); + rdisk_disk_reload(dev); + if (strlen(rdisk_drives[i].image_path) == 0) { + ui_sb_update_icon_state(SB_RDISK | i, 1); } else { - ui_sb_update_icon_state(SB_ZIP | i, 0); + ui_sb_update_icon_state(SB_RDISK | i, 0); } - ui_sb_update_icon_wp(SB_ZIP | i, zip_drives[i].read_only); + ui_sb_update_icon_wp(SB_RDISK | i, rdisk_drives[i].read_only); - zipUpdateMenu(i); - ui_sb_update_tip(SB_ZIP | i); + rdiskUpdateMenu(i); + ui_sb_update_tip(SB_RDISK | i); config_save(); } void -MediaMenu::zipReload(int index, int slot) +MediaMenu::rdiskReload(int index, int slot) { - const QString filename = mhm.getImageForSlot(index, slot, ui::MediaType::Zip); - zipMount(index, filename, zip_drives[index].read_only); - zipUpdateMenu(index); - ui_sb_update_tip(SB_ZIP | index); + const QString filename = mhm.getImageForSlot(index, slot, ui::MediaType::RDisk); + rdiskMount(index, filename, rdisk_drives[index].read_only); + rdiskUpdateMenu(index); + ui_sb_update_tip(SB_RDISK | index); } void -MediaMenu::zipUpdateMenu(int i) +MediaMenu::moUpdateMenu(int i) { - const QString name = zip_drives[i].image_path; - const QString prev_name = zip_drives[i].prev_image_path; - QFileInfo fi(zip_drives[i].image_path); - if (!zipMenus.contains(i)) + QString name = mo_drives[i].image_path; + QString prev_name = mo_drives[i].prev_image_path; + QFileInfo fi(mo_drives[i].image_path); + if (!moMenus.contains(i)) return; - auto *menu = zipMenus[i]; + auto *menu = moMenus[i]; auto childs = menu->children(); - auto *ejectMenu = dynamic_cast(childs[zipEjectPos]); + auto *ejectMenu = dynamic_cast(childs[moEjectPos]); ejectMenu->setEnabled(!name.isEmpty()); ejectMenu->setText(name.isEmpty() ? tr("E&ject") : tr("E&ject %1").arg(fi.fileName())); QString busName = tr("Unknown Bus"); - switch (zip_drives[i].bus_type) { + switch (mo_drives[i].bus_type) { default: break; - case ZIP_BUS_ATAPI: + case MO_BUS_ATAPI: busName = "ATAPI"; break; - case ZIP_BUS_SCSI: + case MO_BUS_SCSI: busName = "SCSI"; break; } - menu->setTitle(tr("ZIP %1 %2 (%3): %4").arg((zip_drives[i].is_250 > 0) ? QString("250") : QString("100"), QString::number(i + 1), busName, name.isEmpty() ? tr("(empty)") : name)); + menu->setTitle(tr("&MO %1 (%2): %3").arg(QString::number(i + 1), busName, name.isEmpty() ? tr("(empty)") : name)); + menu->setToolTip(tr("MO %1 (%2): %3").arg(QString::number(i + 1), busName, name.isEmpty() ? tr("(empty)") : name)); for (int slot = 0; slot < MAX_PREV_IMAGES; slot++) - updateImageHistory(i, slot, ui::MediaType::Zip); + updateImageHistory(i, slot, ui::MediaType::Mo); +} + +void +MediaMenu::rdiskUpdateMenu(int i) +{ + const QString name = rdisk_drives[i].image_path; + const QString prev_name = rdisk_drives[i].prev_image_path; + QFileInfo fi(rdisk_drives[i].image_path); + if (!rdiskMenus.contains(i)) + return; + auto *menu = rdiskMenus[i]; + auto childs = menu->children(); + + auto *ejectMenu = dynamic_cast(childs[rdiskEjectPos]); + ejectMenu->setEnabled(!name.isEmpty()); + ejectMenu->setText(name.isEmpty() ? tr("E&ject") : tr("E&ject %1").arg(fi.fileName())); + + QString busName = tr("Unknown Bus"); + switch (rdisk_drives[i].bus_type) { + default: + break; + case RDISK_BUS_ATAPI: + busName = "ATAPI"; + break; + case RDISK_BUS_SCSI: + busName = "SCSI"; + break; + } + + menu->setTitle(tr("&Removable disk %1 (%2): %3").arg(QString::number(i + 1), busName, name.isEmpty() ? tr("(empty)") : name)); + menu->setToolTip(tr("Removable disk %1 (%2): %3").arg(QString::number(i + 1), busName, name.isEmpty() ? tr("(empty)") : name)); + + for (int slot = 0; slot < MAX_PREV_IMAGES; slot++) + updateImageHistory(i, slot, ui::MediaType::RDisk); } void @@ -1094,39 +1141,6 @@ MediaMenu::moReload(int index, int slot) ui_sb_update_tip(SB_MO | index); } -void -MediaMenu::moUpdateMenu(int i) -{ - QString name = mo_drives[i].image_path; - QString prev_name = mo_drives[i].prev_image_path; - QFileInfo fi(mo_drives[i].image_path); - if (!moMenus.contains(i)) - return; - auto *menu = moMenus[i]; - auto childs = menu->children(); - - auto *ejectMenu = dynamic_cast(childs[moEjectPos]); - ejectMenu->setEnabled(!name.isEmpty()); - ejectMenu->setText(name.isEmpty() ? tr("E&ject") : tr("E&ject %1").arg(fi.fileName())); - - QString busName = tr("Unknown Bus"); - switch (mo_drives[i].bus_type) { - default: - break; - case MO_BUS_ATAPI: - busName = "ATAPI"; - break; - case MO_BUS_SCSI: - busName = "SCSI"; - break; - } - - menu->setTitle(tr("MO %1 (%2): %3").arg(QString::number(i + 1), busName, name.isEmpty() ? tr("(empty)") : name)); - - for (int slot = 0; slot < MAX_PREV_IMAGES; slot++) - updateImageHistory(i, slot, ui::MediaType::Mo); -} - void MediaMenu::nicConnect(int i) { @@ -1176,7 +1190,8 @@ MediaMenu::nicUpdateMenu(int i) auto *connectedAction = dynamic_cast(childs[netDisconnPos]); connectedAction->setChecked(network_is_connected(i)); - menu->setTitle(tr("NIC %1 (%2) %3").arg(QString::number(i + 1), netType, devName)); + menu->setTitle(tr("&NIC %1 (%2) %3").arg(QString::number(i + 1), netType, devName)); + menu->setToolTip(tr("NIC %1 (%2) %3").arg(QString::number(i + 1), netType, devName)); } QString @@ -1241,21 +1256,21 @@ plat_cdrom_ui_update(uint8_t id, uint8_t reload) } void -zip_eject(uint8_t id) +rdisk_eject(uint8_t id) { - MediaMenu::ptr->zipEject(id); + MediaMenu::ptr->rdiskEject(id); } void -zip_mount(uint8_t id, char *fn, uint8_t wp) +rdisk_mount(uint8_t id, char *fn, uint8_t wp) { - MediaMenu::ptr->zipMount(id, QString(fn), wp); + MediaMenu::ptr->rdiskMount(id, QString(fn), wp); } void -zip_reload(uint8_t id) +rdisk_reload(uint8_t id) { - MediaMenu::ptr->zipReloadPrev(id); + MediaMenu::ptr->rdiskReloadPrev(id); } void diff --git a/src/qt/qt_mediamenu.hpp b/src/qt/qt_mediamenu.hpp index ed97a0a50..fb24d24e0 100644 --- a/src/qt/qt_mediamenu.hpp +++ b/src/qt/qt_mediamenu.hpp @@ -17,7 +17,7 @@ public: void refresh(QMenu *parentMenu); - // because some 86box C-only code needs to call zip and + // because some 86box C-only code needs to call rdisk and // mo eject directly static std::shared_ptr ptr; @@ -51,13 +51,13 @@ public: void clearImageHistory(); void cdromUpdateMenu(int i); - void zipNewImage(int i); - void zipSelectImage(int i, bool wp); - void zipMount(int i, const QString &filename, bool wp); - void zipEject(int i); - void zipReloadPrev(int i); - void zipReload(int index, int slot); - void zipUpdateMenu(int i); + void rdiskNewImage(int i); + void rdiskSelectImage(int i, bool wp); + void rdiskMount(int i, const QString &filename, bool wp); + void rdiskEject(int i); + void rdiskReloadPrev(int i); + void rdiskReload(int index, int slot); + void rdiskUpdateMenu(int i); void moNewImage(int i); void moSelectImage(int i, bool wp); @@ -84,7 +84,7 @@ private: QMap cartridgeMenus; QMap floppyMenus; QMap cdromMenus; - QMap zipMenus; + QMap rdiskMenus; QMap moMenus; QMap netMenus; @@ -111,8 +111,8 @@ private: int cdromEjectPos; int cdromImageHistoryPos[MAX_PREV_IMAGES]; - int zipEjectPos; - int zipImageHistoryPos[MAX_PREV_IMAGES]; + int rdiskEjectPos; + int rdiskImageHistoryPos[MAX_PREV_IMAGES]; int moEjectPos; int moImageHistoryPos[MAX_PREV_IMAGES]; diff --git a/src/qt/qt_newfloppydialog.cpp b/src/qt/qt_newfloppydialog.cpp index 58a7a3df2..d9ae09d0c 100644 --- a/src/qt/qt_newfloppydialog.cpp +++ b/src/qt/qt_newfloppydialog.cpp @@ -29,7 +29,7 @@ extern "C" { #include <86box/plat.h> #include <86box/random.h> #include <86box/scsi_device.h> -#include <86box/zip.h> +#include <86box/rdisk.h> #include <86box/mo.h> } @@ -110,7 +110,7 @@ static const QStringList floppyTypes = { "2.88 MB", }; -static const QStringList zipTypes = { +static const QStringList rdiskTypes = { "ZIP 100", "ZIP 250", }; @@ -146,11 +146,11 @@ NewFloppyDialog::NewFloppyDialog(MediaType type, QWidget *parent) tr("All images") % util::DlgFilter({ "86f", "dsk", "flp", "im?", "img", "*fd?" }) % tr("Basic sector images") % util::DlgFilter({ "dsk", "flp", "im?", "img", "*fd?" }) % tr("Surface images") % util::DlgFilter({ "86f" }, true)); break; - case MediaType::Zip: - for (int i = 0; i < zipTypes.size(); ++i) { - Models::AddEntry(model, tr(zipTypes[i].toUtf8().data()), i); + case MediaType::RDisk: + for (int i = 0; i < rdiskTypes.size(); ++i) { + Models::AddEntry(model, tr(rdiskTypes[i].toUtf8().data()), i); } - ui->fileField->setFilter(tr("ZIP images") % util::DlgFilter({ "im?", "img", "zdi" }, true)); + ui->fileField->setFilter(tr("Removable disk images") % util::DlgFilter({ "im?", "img", "rdi", "zdi" }, true)); break; case MediaType::Mo: for (int i = 0; i < moTypes.size(); ++i) { @@ -218,13 +218,13 @@ NewFloppyDialog::onCreate() } } break; - case MediaType::Zip: + case MediaType::RDisk: { fileType = fi.suffix().toLower() == QStringLiteral("zdi") ? FileType::Zdi : FileType::Img; std::atomic_bool res; std::thread t([this, &res, filename, fileType, &progress] { - res = createZipSectorImage(filename, disk_sizes[ui->comboBoxSize->currentIndex() + 12], fileType, progress); + res = createRDiskSectorImage(filename, disk_sizes[ui->comboBoxSize->currentIndex() + 12], fileType, progress); }); progress.exec(); t.join(); @@ -463,7 +463,7 @@ NewFloppyDialog::createSectorImage(const QString &filename, const disk_size_t &d } bool -NewFloppyDialog::createZipSectorImage(const QString &filename, const disk_size_t &disk_size, FileType type, QProgressDialog &pbar) +NewFloppyDialog::createRDiskSectorImage(const QString &filename, const disk_size_t &disk_size, FileType type, QProgressDialog &pbar) { uint64_t total_size = 0; uint32_t total_sectors = 0; diff --git a/src/qt/qt_newfloppydialog.hpp b/src/qt/qt_newfloppydialog.hpp index a342df567..7429fc186 100644 --- a/src/qt/qt_newfloppydialog.hpp +++ b/src/qt/qt_newfloppydialog.hpp @@ -16,7 +16,7 @@ class NewFloppyDialog : public QDialog { public: enum class MediaType { Floppy, - Zip, + RDisk, Mo, }; enum class FileType { @@ -42,7 +42,7 @@ private: bool create86f(const QString &filename, const disk_size_t &disk_size, uint8_t rpm_mode); bool createSectorImage(const QString &filename, const disk_size_t &disk_size, FileType type); - bool createZipSectorImage(const QString &filename, const disk_size_t &disk_size, FileType type, QProgressDialog &pbar); + bool createRDiskSectorImage(const QString &filename, const disk_size_t &disk_size, FileType type, QProgressDialog &pbar); bool createMoSectorImage(const QString &filename, int8_t disk_size, FileType type, QProgressDialog &pbar); }; diff --git a/src/qt/qt_openglrenderer.cpp b/src/qt/qt_openglrenderer.cpp index f1fa5eecf..4ec091eb2 100644 --- a/src/qt/qt_openglrenderer.cpp +++ b/src/qt/qt_openglrenderer.cpp @@ -595,7 +595,7 @@ load_texture(const char *f, struct shader_texture *tex) int bpp = 4; - GLubyte *data = (GLubyte *) malloc(width * height * bpp); + GLubyte *data = (GLubyte *) malloc((size_t) width * height * bpp); int x, y, Y; for (y = 0; y < height; ++y) { @@ -1709,7 +1709,7 @@ OpenGLRenderer::render() plat_tempfile(fn, NULL, (char*)".png"); strcat(path, fn); - unsigned char *rgba = (unsigned char *)calloc(1, width * height * 4); + unsigned char *rgba = (unsigned char *) calloc(1, (size_t) width * height * 4); glw.glFinish(); glw.glReadPixels(window_rect.x, window_rect.y, width, height, GL_RGBA, GL_UNSIGNED_BYTE, rgba); diff --git a/src/qt/qt_openglshaderconfig.ui b/src/qt/qt_openglshaderconfig.ui index 1aebdb6f6..dc743f57e 100644 --- a/src/qt/qt_openglshaderconfig.ui +++ b/src/qt/qt_openglshaderconfig.ui @@ -15,7 +15,7 @@ - QLayout::SizeConstraint::SetMinAndMaxSize + QLayout::SetMinAndMaxSize @@ -33,10 +33,10 @@ - QLayout::SizeConstraint::SetMaximumSize + QLayout::SetMaximumSize - QFormLayout::FieldGrowthPolicy::AllNonFixedFieldsGrow + QFormLayout::AllNonFixedFieldsGrow @@ -45,10 +45,10 @@ - Qt::Orientation::Horizontal + Qt::Horizontal - QDialogButtonBox::StandardButton::Apply|QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok|QDialogButtonBox::StandardButton::Reset + QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::Reset diff --git a/src/qt/qt_openglshadermanagerdialog.ui b/src/qt/qt_openglshadermanagerdialog.ui index 2a72c69ed..82006c713 100644 --- a/src/qt/qt_openglshadermanagerdialog.ui +++ b/src/qt/qt_openglshadermanagerdialog.ui @@ -15,8 +15,82 @@ - QLayout::SizeConstraint::SetFixedSize + QLayout::SetFixedSize + + + + Render behavior + + + + QLayout::SetDefaultConstraint + + + + + Synchronize with video + + + true + + + + + + + Use target framerate: + + + + + + + 15 + + + 240 + + + 60 + + + Qt::Horizontal + + + false + + + false + + + + + + + fps + + + 15 + + + 240 + + + 60 + + + + + + + VSync + + + + + + @@ -24,22 +98,22 @@ - QLayout::SizeConstraint::SetFixedSize + QLayout::SetFixedSize - QAbstractItemView::DragDropMode::InternalMove + QAbstractItemView::InternalMove - QAbstractItemView::SelectionBehavior::SelectItems + QAbstractItemView::SelectItems - QLayout::SizeConstraint::SetFixedSize + QLayout::SetFixedSize @@ -58,7 +132,7 @@ - Qt::Orientation::Vertical + Qt::Vertical @@ -95,7 +169,7 @@ - Qt::Orientation::Vertical + Qt::Vertical @@ -108,10 +182,10 @@ - Qt::Orientation::Vertical + Qt::Vertical - QDialogButtonBox::StandardButton::Apply|QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok + QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok false @@ -123,80 +197,6 @@ - - - - Render behavior - - - - QLayout::SizeConstraint::SetDefaultConstraint - - - - - Use target framerate: - - - - - - - 15 - - - 240 - - - 60 - - - Qt::Orientation::Horizontal - - - false - - - false - - - - - - - Synchronize with video - - - true - - - - - - - VSync - - - - - - - fps - - - 15 - - - 240 - - - 60 - - - - - - diff --git a/src/qt/qt_progsettings.cpp b/src/qt/qt_progsettings.cpp index 825689e78..5dfae866e 100644 --- a/src/qt/qt_progsettings.cpp +++ b/src/qt/qt_progsettings.cpp @@ -173,7 +173,7 @@ ProgSettings::languageCodeToId(QString langCode) QString ProgSettings::languageIdToCode(int id) { - if ((id == 0) || (id >= languages.length())) { + if ((id <= 0) || (id >= languages.length())) { return "system"; } return languages[id].first; diff --git a/src/qt/qt_progsettings.ui b/src/qt/qt_progsettings.ui index 6020efd77..abaee5019 100644 --- a/src/qt/qt_progsettings.ui +++ b/src/qt/qt_progsettings.ui @@ -27,28 +27,15 @@ - QLayout::SizeConstraint::SetFixedSize + QLayout::SetFixedSize - - + + - Default + Language: - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - @@ -61,20 +48,10 @@ - - - - <html><head/><body><p>When selecting media images (CD-ROM, floppy, etc.) the open dialog will start in the same directory as the 86Box configuration file. This setting will likely only make a difference on macOS.</p></body></html> - - - Select media images from program working directory - - - - Qt::Orientation::Horizontal + Qt::Horizontal @@ -84,13 +61,20 @@ - - + + Default + + + + Mouse sensitivity: + + + @@ -109,31 +93,37 @@ 100 - Qt::Orientation::Horizontal + Qt::Horizontal - - - - Language: - - - - - - - Ask for confirmation before saving settings - - - - - + + - Qt::Orientation::Horizontal + Qt::Horizontal - - QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok + + + 40 + 20 + + + + + + + + Default + + + + + + + <html><head/><body><p>When selecting media images (CD-ROM, floppy, etc.) the open dialog will start in the same directory as the 86Box configuration file. This setting will likely only make a difference on macOS.</p></body></html> + + + Select media images from program working directory @@ -144,10 +134,17 @@ - - + + - Mouse sensitivity: + Ask for confirmation before saving settings + + + + + + + Ask for confirmation before quitting @@ -158,10 +155,13 @@ - - - - Ask for confirmation before quitting + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok diff --git a/src/qt/qt_settings.cpp b/src/qt/qt_settings.cpp index 19a537652..3d06f53e3 100644 --- a/src/qt/qt_settings.cpp +++ b/src/qt/qt_settings.cpp @@ -164,24 +164,24 @@ Settings::Settings(QWidget *parent) connect(floppyCdrom, &SettingsFloppyCDROM::cdromChannelChanged, otherRemovable, &SettingsOtherRemovable::reloadBusChannels_MO); connect(floppyCdrom, &SettingsFloppyCDROM::cdromChannelChanged, otherRemovable, - &SettingsOtherRemovable::reloadBusChannels_ZIP); + &SettingsOtherRemovable::reloadBusChannels_RDisk); connect(harddisks, &SettingsHarddisks::driveChannelChanged, floppyCdrom, &SettingsFloppyCDROM::reloadBusChannels); connect(harddisks, &SettingsHarddisks::driveChannelChanged, otherRemovable, &SettingsOtherRemovable::reloadBusChannels_MO); connect(harddisks, &SettingsHarddisks::driveChannelChanged, otherRemovable, - &SettingsOtherRemovable::reloadBusChannels_ZIP); + &SettingsOtherRemovable::reloadBusChannels_RDisk); connect(otherRemovable, &SettingsOtherRemovable::moChannelChanged, harddisks, &SettingsHarddisks::reloadBusChannels); connect(otherRemovable, &SettingsOtherRemovable::moChannelChanged, floppyCdrom, &SettingsFloppyCDROM::reloadBusChannels); connect(otherRemovable, &SettingsOtherRemovable::moChannelChanged, otherRemovable, - &SettingsOtherRemovable::reloadBusChannels_ZIP); - connect(otherRemovable, &SettingsOtherRemovable::zipChannelChanged, harddisks, + &SettingsOtherRemovable::reloadBusChannels_RDisk); + connect(otherRemovable, &SettingsOtherRemovable::rdiskChannelChanged, harddisks, &SettingsHarddisks::reloadBusChannels); - connect(otherRemovable, &SettingsOtherRemovable::zipChannelChanged, floppyCdrom, + connect(otherRemovable, &SettingsOtherRemovable::rdiskChannelChanged, floppyCdrom, &SettingsFloppyCDROM::reloadBusChannels); - connect(otherRemovable, &SettingsOtherRemovable::zipChannelChanged, otherRemovable, + connect(otherRemovable, &SettingsOtherRemovable::rdiskChannelChanged, otherRemovable, &SettingsOtherRemovable::reloadBusChannels_MO); connect(ui->listView->selectionModel(), &QItemSelectionModel::currentChanged, this, diff --git a/src/qt/qt_settings_bus_tracking.cpp b/src/qt/qt_settings_bus_tracking.cpp index 6fb8637da..c811cc7c0 100644 --- a/src/qt/qt_settings_bus_tracking.cpp +++ b/src/qt/qt_settings_bus_tracking.cpp @@ -23,10 +23,14 @@ #include "86box/hdd.h" #include "86box/scsi.h" +#include "86box/cdrom.h" #include "qt_settings_bus_tracking.hpp" SettingsBusTracking::SettingsBusTracking() { + mitsumi_tracking = false; + + mke_tracking = 0x0000000000000000ULL; mfm_tracking = 0x0000000000000000ULL; esdi_tracking = 0x0000000000000000ULL; xta_tracking = 0x0000000000000000ULL; @@ -38,40 +42,76 @@ SettingsBusTracking::SettingsBusTracking() scsi_tracking[i] = 0x0000000000000000ULL; } +uint8_t +SettingsBusTracking::next_free_mke_channel() +{ + uint64_t mask; + uint8_t ret = CHANNEL_NONE; + + for (uint8_t i = 0; i < 4; i++) { + mask = 0xffULL << ((uint64_t) ((i << 3) & 0x3f)); + + if (!(mke_tracking & mask)) { + ret = (uint8_t) i; + break; + } + } + + return ret; +} + uint8_t SettingsBusTracking::next_free_mfm_channel() { - if ((mfm_tracking & 0xff00ULL) && !(mfm_tracking & 0x00ffULL)) - return 1; + uint64_t mask; + uint8_t ret = CHANNEL_NONE; - if (!(mfm_tracking & 0xff00ULL) && (mfm_tracking & 0x00ffULL)) - return 0; + for (uint8_t i = 0; i < 2; i++) { + mask = 0xffULL << ((uint64_t) ((i << 3) & 0x3f)); - return CHANNEL_NONE; + if (!(mfm_tracking & mask)) { + ret = (uint8_t) i; + break; + } + } + + return ret; } uint8_t SettingsBusTracking::next_free_esdi_channel() { - if ((esdi_tracking & 0xff00ULL) && !(esdi_tracking & 0x00ffULL)) - return 1; + uint64_t mask; + uint8_t ret = CHANNEL_NONE; - if (!(esdi_tracking & 0xff00ULL) && (esdi_tracking & 0x00ffULL)) - return 0; + for (uint8_t i = 0; i < 2; i++) { + mask = 0xffULL << ((uint64_t) ((i << 3) & 0x3f)); - return CHANNEL_NONE; + if (!(esdi_tracking & mask)) { + ret = (uint8_t) i; + break; + } + } + + return ret; } uint8_t SettingsBusTracking::next_free_xta_channel() { - if ((xta_tracking & 0xff00ULL) && !(xta_tracking & 0x00ffULL)) - return 1; + uint64_t mask; + uint8_t ret = CHANNEL_NONE; - if (!(xta_tracking & 0xff00ULL) && (xta_tracking & 0x00ffULL)) - return 0; + for (uint8_t i = 0; i < 2; i++) { + mask = 0xffULL << ((uint64_t) ((i << 3) & 0x3f)); - return CHANNEL_NONE; + if (!(xta_tracking & mask)) { + ret = (uint8_t) i; + break; + } + } + + return ret; } uint8_t @@ -204,22 +244,33 @@ QList SettingsBusTracking::busChannelsInUse(const int bus) { int element; uint64_t mask; switch (bus) { + case CDROM_BUS_MKE: + for (uint8_t i = 0; i < 4; i++) { + mask = 0xffULL << ((uint64_t) ((i << 3) & 0x3f)); + if (mke_tracking & mask) + channelsInUse.append(i); + } + break; + case CDROM_BUS_MITSUMI: + if (mitsumi_tracking) + channelsInUse.append(0); + break; case HDD_BUS_MFM: - for (uint8_t i = 0; i < 32; i++) { + for (uint8_t i = 0; i < 2; i++) { mask = 0xffULL << ((uint64_t) ((i << 3) & 0x3f)); if (mfm_tracking & mask) channelsInUse.append(i); } break; case HDD_BUS_ESDI: - for (uint8_t i = 0; i < 32; i++) { + for (uint8_t i = 0; i < 2; i++) { mask = 0xffULL << ((uint64_t) ((i << 3) & 0x3f)); if (esdi_tracking & mask) channelsInUse.append(i); } break; case HDD_BUS_XTA: - for (uint8_t i = 0; i < 32; i++) { + for (uint8_t i = 0; i < 2; i++) { mask = 0xffULL << ((uint64_t) ((i << 3) & 0x3f)); if (xta_tracking & mask) channelsInUse.append(i); @@ -263,6 +314,17 @@ SettingsBusTracking::device_track(int set, uint8_t dev_type, int bus, int channe uint64_t mask; switch (bus) { + case CDROM_BUS_MKE: + mask = ((uint64_t) dev_type) << ((uint64_t) ((channel << 3) & 0x3f)); + + if (set) + mke_tracking |= mask; + else + mke_tracking &= ~mask; + break; + case CDROM_BUS_MITSUMI: + mitsumi_tracking = set; + break; case HDD_BUS_MFM: mask = ((uint64_t) dev_type) << ((uint64_t) ((channel << 3) & 0x3f)); diff --git a/src/qt/qt_settings_bus_tracking.hpp b/src/qt/qt_settings_bus_tracking.hpp index 917706428..d17ed090a 100644 --- a/src/qt/qt_settings_bus_tracking.hpp +++ b/src/qt/qt_settings_bus_tracking.hpp @@ -8,7 +8,7 @@ #define DEV_HDD 0x01 #define DEV_CDROM 0x02 -#define DEV_ZIP 0x04 +#define DEV_RDISK 0x04 #define DEV_MO 0x08 #define BUS_MFM 0 @@ -31,12 +31,14 @@ public: QList busChannelsInUse(int bus); /* These return 0xff is none is free. */ + uint8_t next_free_mke_channel(); uint8_t next_free_mfm_channel(); uint8_t next_free_esdi_channel(); uint8_t next_free_xta_channel(); uint8_t next_free_ide_channel(); uint8_t next_free_scsi_id(); + int mke_bus_full(); int mfm_bus_full(); int esdi_bus_full(); int xta_bus_full(); @@ -44,11 +46,13 @@ public: int scsi_bus_full(); /* Set: 0 = Clear the device from the tracking, 1 = Set the device on the tracking. - Device type: 1 = Hard Disk, 2 = CD-ROM, 4 = ZIP, 8 = Magneto-Optical. + Device type: 1 = Hard Disk, 2 = CD-ROM, 4 = Removable disk, 8 = Magneto-Optical. Bus: 0 = MFM, 1 = ESDI, 2 = XTA, 3 = IDE, 4 = SCSI. */ void device_track(int set, uint8_t dev_type, int bus, int channel); private: + /* 1 channel, 2 devices per channel, 8 bits per device = 16 bits. */ + uint64_t mke_tracking { 0 }; /* 1 channel, 2 devices per channel, 8 bits per device = 16 bits. */ uint64_t mfm_tracking { 0 }; /* 1 channel, 2 devices per channel, 8 bits per device = 16 bits. */ @@ -61,6 +65,8 @@ private: 8 bits per device (future-proofing) = 2048 bits. */ uint64_t scsi_tracking[32] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + + bool mitsumi_tracking; }; #endif // QT_SETTINGS_BUS_TRACKING_HPP diff --git a/src/qt/qt_settingsdisplay.cpp b/src/qt/qt_settingsdisplay.cpp index e50f4ebe1..15b2f4588 100644 --- a/src/qt/qt_settingsdisplay.cpp +++ b/src/qt/qt_settingsdisplay.cpp @@ -183,7 +183,7 @@ SettingsDisplay::on_comboBoxVideo_currentIndexChanged(int index) bool machineHasMca = machine_has_bus(machineId, MACHINE_BUS_MCA) > 0; bool videoCardHas8514 = ((videoCard[0] == VID_INTERNAL) ? machine_has_flags(machineId, MACHINE_VIDEO_8514A) : (video_card_get_flags(videoCard[0]) == VIDEO_FLAG_TYPE_8514)); - bool videoCardHasXga = ((videoCard[0] == VID_INTERNAL) ? machine_has_flags(machineId, MACHINE_VIDEO_XGA) : (video_card_get_flags(videoCard[0]) == VIDEO_FLAG_TYPE_XGA)); + bool videoCardHasXga = ((videoCard[0] == VID_INTERNAL) ? 0 : (video_card_get_flags(videoCard[0]) == VIDEO_FLAG_TYPE_XGA)); bool machineSupports8514 = ((machineHasIsa16 || machineHasMca) && !videoCardHas8514); bool machineSupportsXga = ((machineHasMca && device_available(&xga_device)) && !videoCardHasXga); diff --git a/src/qt/qt_settingsfloppycdrom.cpp b/src/qt/qt_settingsfloppycdrom.cpp index bf1499076..f597aebe6 100644 --- a/src/qt/qt_settingsfloppycdrom.cpp +++ b/src/qt/qt_settingsfloppycdrom.cpp @@ -69,6 +69,7 @@ setCDROMBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint case CDROM_BUS_ATAPI: case CDROM_BUS_SCSI: case CDROM_BUS_MITSUMI: + case CDROM_BUS_MKE: icon = QIcon(":/settings/qt/icons/cdrom.ico"); break; } @@ -149,7 +150,7 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent) this, &SettingsFloppyCDROM::onFloppyRowChanged); ui->tableViewFloppy->setCurrentIndex(model->index(0, 0)); - Harddrives::populateRemovableBuses(ui->comboBoxBus->model()); + Harddrives::populateCDROMBuses(ui->comboBoxBus->model()); model = ui->comboBoxSpeed->model(); for (int i = 0; i < 72; i++) Models::AddEntry(model, QString("%1x").arg(i + 1), i + 1); @@ -170,11 +171,12 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent) setCDROMSpeed(model, idx.siblingAtColumn(1), cdrom[i].speed); else setCDROMSpeed(model, idx.siblingAtColumn(1), speed); - if (cdrom[i].bus_type == CDROM_BUS_ATAPI) + if (cdrom[i].bus_type == CDROM_BUS_MKE) + Harddrives::busTrackClass->device_track(1, DEV_CDROM, cdrom[i].bus_type, cdrom[i].mke_channel); + else if (cdrom[i].bus_type == CDROM_BUS_ATAPI) Harddrives::busTrackClass->device_track(1, DEV_CDROM, cdrom[i].bus_type, cdrom[i].ide_channel); else if (cdrom[i].bus_type == CDROM_BUS_SCSI) - Harddrives::busTrackClass->device_track(1, DEV_CDROM, cdrom[i].bus_type, - cdrom[i].scsi_device_id); + Harddrives::busTrackClass->device_track(1, DEV_CDROM, cdrom[i].bus_type, cdrom[i].scsi_device_id); else if (cdrom[i].bus_type == CDROM_BUS_MITSUMI) Harddrives::busTrackClass->device_track(1, DEV_CDROM, cdrom[i].bus_type, 0); } @@ -195,9 +197,10 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent) int selectedTypeRow = 0; int eligibleRows = 0; while (cdrom_drive_types[j].bus_type != BUS_TYPE_NONE) { - if (((bus_type == CDROM_BUS_ATAPI) || (bus_type == CDROM_BUS_SCSI)) && + if (((bus_type == CDROM_BUS_MKE) || (bus_type == CDROM_BUS_ATAPI) || + (bus_type == CDROM_BUS_SCSI)) && ((cdrom_drive_types[j].bus_type == bus_type) || - (cdrom_drive_types[j].bus_type == BUS_TYPE_BOTH))) { + ((cdrom_drive_types[j].bus_type == BUS_TYPE_BOTH) && (bus_type != BUS_TYPE_MKE)))) { QString name = CDROMName(j); Models::AddEntry(modelType, name, j); if (cdrom[cdromIdx].type == j) @@ -274,7 +277,7 @@ SettingsFloppyCDROM::onCDROMRowChanged(const QModelIndex ¤t) int speed = cdrom_get_speed(type); if (speed == -1) { speed = current.siblingAtColumn(1).data(Qt::UserRole).toUInt(); - ui->comboBoxSpeed->setEnabled(true); + ui->comboBoxSpeed->setEnabled((bus == CDROM_BUS_DISABLED) ? false : true); } else ui->comboBoxSpeed->setEnabled(false); ui->comboBoxSpeed->setCurrentIndex(speed == 0 ? 7 : speed - 1); @@ -286,9 +289,10 @@ SettingsFloppyCDROM::onCDROMRowChanged(const QModelIndex ¤t) int selectedTypeRow = 0; int eligibleRows = 0; while (cdrom_drive_types[j].bus_type != BUS_TYPE_NONE) { - if (((bus == CDROM_BUS_ATAPI) || (bus == CDROM_BUS_SCSI)) && + if (((bus == CDROM_BUS_MKE) || (bus == CDROM_BUS_ATAPI) || + (bus == CDROM_BUS_SCSI)) && ((cdrom_drive_types[j].bus_type == bus) || - (cdrom_drive_types[j].bus_type == BUS_TYPE_BOTH))) { + ((cdrom_drive_types[j].bus_type == BUS_TYPE_BOTH) && (bus != BUS_TYPE_MKE)))) { QString name = CDROMName(j); Models::AddEntry(modelType, name, j); if (type == j) @@ -366,7 +370,9 @@ SettingsFloppyCDROM::on_comboBoxBus_activated(int) Harddrives::busTrackClass->device_track(0, DEV_CDROM, ui->tableViewCDROM->model()->data(i, Qt::UserRole).toInt(), ui->tableViewCDROM->model()->data(i, Qt::UserRole + 1).toInt()); - if (bus_type == CDROM_BUS_ATAPI) + if (bus_type == CDROM_BUS_MKE) + ui->comboBoxChannel->setCurrentIndex(Harddrives::busTrackClass->next_free_mke_channel()); + else if (bus_type == CDROM_BUS_ATAPI) ui->comboBoxChannel->setCurrentIndex(Harddrives::busTrackClass->next_free_ide_channel()); else if (bus_type == CDROM_BUS_SCSI) ui->comboBoxChannel->setCurrentIndex(Harddrives::busTrackClass->next_free_scsi_id()); @@ -388,9 +394,10 @@ SettingsFloppyCDROM::on_comboBoxBus_activated(int) int selectedTypeRow = 0; int eligibleRows = 0; while (cdrom_drive_types[j].bus_type != BUS_TYPE_NONE) { - if (((bus_type == CDROM_BUS_ATAPI) || (bus_type == CDROM_BUS_SCSI)) && + if (((bus_type == CDROM_BUS_MKE) || (bus_type == CDROM_BUS_ATAPI) || + (bus_type == CDROM_BUS_SCSI)) && ((cdrom_drive_types[j].bus_type == bus_type) || - (cdrom_drive_types[j].bus_type == BUS_TYPE_BOTH))) { + ((cdrom_drive_types[j].bus_type == BUS_TYPE_BOTH) && (bus_type != BUS_TYPE_MKE)))) { QString name = CDROMName(j); Models::AddEntry(modelType, name, j); if (cdrom[cdromIdx].type == j) @@ -407,6 +414,20 @@ SettingsFloppyCDROM::on_comboBoxBus_activated(int) setCDROMType(ui->tableViewCDROM->model(), ui->tableViewCDROM->selectionModel()->currentIndex(), ui->comboBoxCDROMType->currentData().toUInt()); + + int speed = cdrom_get_speed(ui->comboBoxCDROMType->currentData().toUInt()); + if ((speed == -1) && (bus_type != CDROM_BUS_MITSUMI)) { + speed = ui->comboBoxSpeed->currentData().toUInt(); + ui->comboBoxSpeed->setEnabled(bus_type != CDROM_BUS_DISABLED); + } else { + ui->comboBoxSpeed->setEnabled(false); + if (bus_type == CDROM_BUS_MITSUMI) // temp hack + speed = 0; + } + ui->comboBoxSpeed->setCurrentIndex(speed == 0 ? 7 : speed - 1); + setCDROMSpeed(ui->tableViewCDROM->model(), + ui->tableViewCDROM->selectionModel()->currentIndex(), + speed); emit cdromChannelChanged(); } diff --git a/src/qt/qt_settingsfloppycdrom.ui b/src/qt/qt_settingsfloppycdrom.ui index 7dde46631..6b1036b5c 100644 --- a/src/qt/qt_settingsfloppycdrom.ui +++ b/src/qt/qt_settingsfloppycdrom.ui @@ -200,6 +200,17 @@ + + tableViewFloppy + comboBoxFloppyType + checkBoxTurboTimings + checkBoxCheckBPB + tableViewCDROM + comboBoxBus + comboBoxChannel + comboBoxSpeed + comboBoxCDROMType + diff --git a/src/qt/qt_settingsinput.cpp b/src/qt/qt_settingsinput.cpp index 6d89c511a..8486ffce6 100644 --- a/src/qt/qt_settingsinput.cpp +++ b/src/qt/qt_settingsinput.cpp @@ -21,12 +21,14 @@ #include #include +#include #include extern "C" { #include <86box/86box.h> #include <86box/device.h> #include <86box/machine.h> +#include <86box/keyboard.h> #include <86box/mouse.h> #include <86box/gameport.h> #include <86box/ui.h> @@ -55,7 +57,7 @@ SettingsInput::SettingsInput(QWidget *parent) horizontalHeader.append(tr("Keybind")); QTableWidget *keyTable = ui->tableKeys; - keyTable->setRowCount(10); + keyTable->setRowCount(NUM_ACCELS); keyTable->setColumnCount(3); keyTable->setColumnHidden(2, true); keyTable->setColumnWidth(0, 200); @@ -90,7 +92,9 @@ SettingsInput::~SettingsInput() void SettingsInput::save() { + keyboard_type = ui->comboBoxKeyboard->currentData().toInt(); mouse_type = ui->comboBoxMouse->currentData().toInt(); + joystick_type = ui->comboBoxJoystick->currentData().toInt(); // Copy accelerators from working set to global set @@ -108,10 +112,47 @@ SettingsInput::onCurrentMachineChanged(int machineId) // win_settings_video_proc, WM_INITDIALOG this->machineId = machineId; - auto *mouseModel = ui->comboBoxMouse->model(); - auto removeRows = mouseModel->rowCount(); + auto *keyboardModel = ui->comboBoxKeyboard->model(); + auto removeRows = keyboardModel->rowCount(); int selectedRow = 0; + + int c = 0; + int has_int_kbd = !!machine_has_flags(machineId, MACHINE_KEYBOARD); + + for (int i = 0; i < keyboard_get_ndev(); ++i) { + const auto *dev = keyboard_get_device(i); + int ikbd = (i == KEYBOARD_TYPE_INTERNAL); + + if ((ikbd != has_int_kbd) || !device_is_valid(dev, machineId)) + continue; + + QString name = DeviceConfig::DeviceName(dev, keyboard_get_internal_name(i), 0); + int row = keyboardModel->rowCount(); + keyboardModel->insertRow(row); + auto idx = keyboardModel->index(row, 0); + + keyboardModel->setData(idx, name, Qt::DisplayRole); + keyboardModel->setData(idx, i, Qt::UserRole); + + if (i == keyboard_type) + selectedRow = row - removeRows; + + c++; + } + keyboardModel->removeRows(0, removeRows); + ui->comboBoxKeyboard->setCurrentIndex(-1); + ui->comboBoxKeyboard->setCurrentIndex(selectedRow); + + if ((c == 1) || has_int_kbd) + ui->comboBoxKeyboard->setEnabled(false); + else + ui->comboBoxKeyboard->setEnabled(true); + + auto *mouseModel = ui->comboBoxMouse->model(); + removeRows = mouseModel->rowCount(); + + selectedRow = 0; for (int i = 0; i < mouse_get_ndev(); ++i) { const auto *dev = mouse_get_device(i); if ((i == MOUSE_TYPE_INTERNAL) && (machine_has_flags(machineId, MACHINE_MOUSE) == 0)) @@ -132,6 +173,7 @@ SettingsInput::onCurrentMachineChanged(int machineId) selectedRow = row - removeRows; } mouseModel->removeRows(0, removeRows); + ui->comboBoxMouse->setCurrentIndex(-1); ui->comboBoxMouse->setCurrentIndex(selectedRow); int i = 0; @@ -195,7 +237,7 @@ SettingsInput::on_tableKeys_cellDoubleClicked(int row, int col) for(int x = 0; x < NUM_ACCELS; x++) { if(QString::fromStdString(acc_keys_t[x].seq) == keyseq.toString(QKeySequence::PortableText)) { // That key is already in use - main_window->showMessage(MBX_ANSI & MBX_INFO, "Bind conflict", "This key combo is already in use", false); + QMessageBox::warning(this, tr("Bind conflict"), tr("This key combo is already in use."), QMessageBox::StandardButton::Ok); return; } } @@ -245,9 +287,20 @@ SettingsInput::on_pushButtonClearBind_clicked() strcpy(acc_keys_t[accKeyID].seq, ""); } +void +SettingsInput::on_comboBoxKeyboard_currentIndexChanged(int index) +{ + if (index < 0) + return; + int keyboardId = ui->comboBoxKeyboard->currentData().toInt(); + ui->pushButtonConfigureKeyboard->setEnabled(keyboard_has_config(keyboardId) > 0); +} + void SettingsInput::on_comboBoxMouse_currentIndexChanged(int index) { + if (index < 0) + return; int mouseId = ui->comboBoxMouse->currentData().toInt(); ui->pushButtonConfigureMouse->setEnabled(mouse_has_config(mouseId) > 0); } @@ -265,6 +318,13 @@ SettingsInput::on_comboBoxJoystick_currentIndexChanged(int index) } } +void +SettingsInput::on_pushButtonConfigureKeyboard_clicked() +{ + int keyboardId = ui->comboBoxKeyboard->currentData().toInt(); + DeviceConfig::ConfigureDevice(keyboard_get_device(keyboardId)); +} + void SettingsInput::on_pushButtonConfigureMouse_clicked() { diff --git a/src/qt/qt_settingsinput.hpp b/src/qt/qt_settingsinput.hpp index a51ad2564..9a7702b4b 100644 --- a/src/qt/qt_settingsinput.hpp +++ b/src/qt/qt_settingsinput.hpp @@ -26,6 +26,9 @@ public slots: void onCurrentMachineChanged(int machineId); private slots: + void on_comboBoxKeyboard_currentIndexChanged(int index); + void on_pushButtonConfigureKeyboard_clicked(); + void on_comboBoxMouse_currentIndexChanged(int index); void on_pushButtonConfigureMouse_clicked(); diff --git a/src/qt/qt_settingsinput.ui b/src/qt/qt_settingsinput.ui index 6ac6cf38a..8436c3a9d 100644 --- a/src/qt/qt_settingsinput.ui +++ b/src/qt/qt_settingsinput.ui @@ -24,14 +24,14 @@ 0 - + - Mouse: + Keyboard: - + 0 @@ -44,7 +44,7 @@ - + 0 @@ -57,58 +57,91 @@ + + + Mouse: + + + + + + + + 0 + 0 + + + + 30 + + + + + + + + 0 + 0 + + + + Configure + + + + Joystick: - + 30 - + Joystick 1... - + Joystick 2... - + Joystick 3... - + Joystick 4... - + Key Bindings: - + - QAbstractItemView::EditTrigger::NoEditTriggers + QAbstractItemView::NoEditTriggers false @@ -120,11 +153,11 @@ true - QAbstractItemView::SelectionBehavior::SelectRows + QAbstractItemView::SelectRows - + false @@ -134,7 +167,7 @@ - + false diff --git a/src/qt/qt_settingsmachine.ui b/src/qt/qt_settingsmachine.ui index f677ea178..7ed70a5cf 100644 --- a/src/qt/qt_settingsmachine.ui +++ b/src/qt/qt_settingsmachine.ui @@ -41,44 +41,6 @@ 0 - - - - 30 - - - - - - - FPU: - - - - - - - Memory: - - - - - - - 30 - - - - - - - - 0 - 0 - - - - @@ -86,71 +48,10 @@ - - - - CPU type: - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - 30 - - - - - - - Frequency: - - - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - 30 - - - - - - - - - - Wait states: + + + + 30 @@ -199,6 +100,88 @@ + + + + CPU type: + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + 30 + + + + + + + Frequency: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + 30 + + + + + + + + + + FPU: + + + + + + + 30 + + + + + + + Wait states: + + + @@ -250,6 +233,23 @@ + + + + Memory: + + + + + + + + 0 + 0 + + + + @@ -302,7 +302,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal @@ -315,77 +315,107 @@ - - - - 0 - 0 - - - - Time synchronization - - - - - - Disabled - - - - - - - Enabled (UTC) - - - - - - - Enabled (local time) - - - - - - - - - - - 0 - 0 - - - - CPU frame size - - - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop - - - - - - Larger frames (less smooth) - - - - - - - Smaller frames (smoother) - - - - - + + + + + + 0 + 0 + + + + CPU frame size + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + Larger frames (less smooth) + + + + + + + Smaller frames (smoother) + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + Time synchronization + + + + + + Disabled + + + + + + + Enabled (local time) + + + + + + + Enabled (UTC) + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + - Qt::Orientation::Vertical + Qt::Vertical @@ -397,6 +427,24 @@ + + comboBoxMachineType + comboBoxMachine + pushButtonConfigure + comboBoxCPU + comboBoxSpeed + comboBoxFPU + comboBoxWaitStates + comboBoxPitMode + spinBoxRAM + checkBoxDynamicRecompiler + checkBoxFPUSoftfloat + radioButtonDisabled + radioButtonLocalTime + radioButtonUTC + radioButtonLargerFrames + radioButtonSmallerFrames + diff --git a/src/qt/qt_settingsotherperipherals.ui b/src/qt/qt_settingsotherperipherals.ui index 5c6b8fbf0..0a366b833 100644 --- a/src/qt/qt_settingsotherperipherals.ui +++ b/src/qt/qt_settingsotherperipherals.ui @@ -382,6 +382,32 @@ + + comboBoxRTC + pushButtonConfigureRTC + comboBoxIsaMemCard1 + pushButtonConfigureIsaMemCard1 + comboBoxIsaMemCard2 + pushButtonConfigureIsaMemCard2 + comboBoxIsaMemCard3 + pushButtonConfigureIsaMemCard3 + comboBoxIsaMemCard4 + pushButtonConfigureIsaMemCard4 + comboBoxIsaRomCard1 + pushButtonConfigureIsaRomCard1 + comboBoxIsaRomCard2 + pushButtonConfigureIsaRomCard2 + comboBoxIsaRomCard3 + pushButtonConfigureIsaRomCard3 + comboBoxIsaRomCard4 + pushButtonConfigureIsaRomCard4 + checkBoxISABugger + checkBoxPOSTCard + checkBoxUnitTester + pushButtonConfigureUT + checkBoxKeyCard + pushButtonConfigureKeyCard + diff --git a/src/qt/qt_settingsotherremovable.cpp b/src/qt/qt_settingsotherremovable.cpp index 8a810a4fb..4ba07161c 100644 --- a/src/qt/qt_settingsotherremovable.cpp +++ b/src/qt/qt_settingsotherremovable.cpp @@ -23,7 +23,7 @@ extern "C" { #include <86box/timer.h> #include <86box/scsi_device.h> #include <86box/mo.h> -#include <86box/zip.h> +#include <86box/rdisk.h> } #include @@ -40,6 +40,13 @@ moDriveTypeName(int i) mo_drive_types[i].revision); } +static QString +rdiskDriveTypeName(int i) +{ + return QString("%1 %2 %3").arg(rdisk_drive_types[i].vendor, rdisk_drive_types[i].model, + rdisk_drive_types[i].revision); +} + static void setMOBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel) { @@ -65,27 +72,16 @@ setMOBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t } static void -setMOType(QAbstractItemModel *model, const QModelIndex &idx, uint32_t type) -{ - auto i = idx.siblingAtColumn(1); - if (idx.siblingAtColumn(0).data(Qt::UserRole).toUInt() == MO_BUS_DISABLED) - model->setData(i, QCoreApplication::translate("", "None")); - else - model->setData(i, moDriveTypeName(type)); - model->setData(i, type, Qt::UserRole); -} - -static void -setZIPBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel) +setRDiskBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel) { QIcon icon; switch (bus) { - case ZIP_BUS_DISABLED: - icon = QIcon(":/settings/qt/icons/zip_disabled.ico"); + case RDISK_BUS_DISABLED: + icon = QIcon(":/settings/qt/icons/rdisk_disabled.ico"); break; - case ZIP_BUS_ATAPI: - case ZIP_BUS_SCSI: - icon = QIcon(":/settings/qt/icons/zip.ico"); + case RDISK_BUS_ATAPI: + case RDISK_BUS_SCSI: + icon = QIcon(":/settings/qt/icons/rdisk.ico"); break; default: @@ -100,11 +96,25 @@ setZIPBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_ } static void -setZIPType(QAbstractItemModel *model, const QModelIndex &idx, bool is250) +setMOType(QAbstractItemModel *model, const QModelIndex &idx, uint32_t type) { auto i = idx.siblingAtColumn(1); - model->setData(i, is250 ? "ZIP 250" : "ZIP 100"); - model->setData(i, is250, Qt::UserRole); + if (idx.siblingAtColumn(0).data(Qt::UserRole).toUInt() == MO_BUS_DISABLED) + model->setData(i, QCoreApplication::translate("", "None")); + else + model->setData(i, moDriveTypeName(type)); + model->setData(i, type, Qt::UserRole); +} + +static void +setRDiskType(QAbstractItemModel *model, const QModelIndex &idx, uint32_t type) +{ + auto i = idx.siblingAtColumn(1); + if (idx.siblingAtColumn(0).data(Qt::UserRole).toUInt() == RDISK_BUS_DISABLED) + model->setData(i, QCoreApplication::translate("", "None")); + else + model->setData(i, rdiskDriveTypeName(type)); + model->setData(i, type, Qt::UserRole); } SettingsOtherRemovable::SettingsOtherRemovable(QWidget *parent) @@ -114,6 +124,7 @@ SettingsOtherRemovable::SettingsOtherRemovable(QWidget *parent) ui->setupUi(this); Harddrives::populateRemovableBuses(ui->comboBoxMOBus->model()); + ui->comboBoxMOBus->model()->removeRows(3, ui->comboBoxMOBus->model()->rowCount() - 3); auto *model = ui->comboBoxMOType->model(); for (uint32_t i = 0; i < KNOWN_MO_DRIVE_TYPES; i++) { Models::AddEntry(model, moDriveTypeName(i), i); @@ -136,24 +147,30 @@ SettingsOtherRemovable::SettingsOtherRemovable(QWidget *parent) connect(ui->tableViewMO->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &SettingsOtherRemovable::onMORowChanged); ui->tableViewMO->setCurrentIndex(model->index(0, 0)); - Harddrives::populateRemovableBuses(ui->comboBoxZIPBus->model()); + Harddrives::populateRemovableBuses(ui->comboBoxRDiskBus->model()); + if ((ui->comboBoxRDiskBus->model()->rowCount() - 3) > 0) + ui->comboBoxRDiskBus->model()->removeRows(3, ui->comboBoxRDiskBus->model()->rowCount() - 3); + model = ui->comboBoxRDiskType->model(); + for (uint32_t i = 0; i < KNOWN_RDISK_DRIVE_TYPES; i++) { + Models::AddEntry(model, rdiskDriveTypeName(i), i); + } model = new QStandardItemModel(0, 2, this); - ui->tableViewZIP->setModel(model); + ui->tableViewRDisk->setModel(model); model->setHeaderData(0, Qt::Horizontal, tr("Bus")); model->setHeaderData(1, Qt::Horizontal, tr("Type")); - model->insertRows(0, ZIP_NUM); - for (int i = 0; i < ZIP_NUM; i++) { + model->insertRows(0, RDISK_NUM); + for (int i = 0; i < RDISK_NUM; i++) { auto idx = model->index(i, 0); - setZIPBus(model, idx, zip_drives[i].bus_type, zip_drives[i].res); - setZIPType(model, idx, zip_drives[i].is_250 > 0); - Harddrives::busTrackClass->device_track(1, DEV_ZIP, zip_drives[i].bus_type, zip_drives[i].bus_type == ZIP_BUS_ATAPI ? zip_drives[i].ide_channel : zip_drives[i].scsi_device_id); + setRDiskBus(model, idx, rdisk_drives[i].bus_type, rdisk_drives[i].res); + setRDiskType(model, idx.siblingAtColumn(1), rdisk_drives[i].type); + Harddrives::busTrackClass->device_track(1, DEV_MO, rdisk_drives[i].bus_type, rdisk_drives[i].bus_type == RDISK_BUS_ATAPI ? rdisk_drives[i].ide_channel : rdisk_drives[i].scsi_device_id); } - ui->tableViewZIP->resizeColumnsToContents(); - ui->tableViewZIP->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); + ui->tableViewRDisk->resizeColumnsToContents(); + ui->tableViewRDisk->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); - connect(ui->tableViewZIP->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &SettingsOtherRemovable::onZIPRowChanged); - ui->tableViewZIP->setCurrentIndex(model->index(0, 0)); + connect(ui->tableViewRDisk->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &SettingsOtherRemovable::onRDiskRowChanged); + ui->tableViewRDisk->setCurrentIndex(model->index(0, 0)); } SettingsOtherRemovable::~SettingsOtherRemovable() @@ -173,13 +190,13 @@ SettingsOtherRemovable::save() mo_drives[i].type = model->index(i, 1).data(Qt::UserRole).toUInt(); } - model = ui->tableViewZIP->model(); - for (uint8_t i = 0; i < ZIP_NUM; i++) { - zip_drives[i].fp = NULL; - zip_drives[i].priv = NULL; - zip_drives[i].bus_type = model->index(i, 0).data(Qt::UserRole).toUInt(); - zip_drives[i].res = model->index(i, 0).data(Qt::UserRole + 1).toUInt(); - zip_drives[i].is_250 = model->index(i, 1).data(Qt::UserRole).toBool() ? 1 : 0; + model = ui->tableViewRDisk->model(); + for (uint8_t i = 0; i < RDISK_NUM; i++) { + rdisk_drives[i].fp = NULL; + rdisk_drives[i].priv = NULL; + rdisk_drives[i].bus_type = model->index(i, 0).data(Qt::UserRole).toUInt(); + rdisk_drives[i].res = model->index(i, 0).data(Qt::UserRole + 1).toUInt(); + rdisk_drives[i].type = model->index(i, 1).data(Qt::UserRole).toUInt(); } } @@ -205,24 +222,24 @@ SettingsOtherRemovable::onMORowChanged(const QModelIndex ¤t) } void -SettingsOtherRemovable::onZIPRowChanged(const QModelIndex ¤t) +SettingsOtherRemovable::onRDiskRowChanged(const QModelIndex ¤t) { uint8_t bus = current.siblingAtColumn(0).data(Qt::UserRole).toUInt(); uint8_t channel = current.siblingAtColumn(0).data(Qt::UserRole + 1).toUInt(); - bool is250 = current.siblingAtColumn(1).data(Qt::UserRole).toBool(); + uint8_t type = current.siblingAtColumn(1).data(Qt::UserRole).toUInt(); - ui->comboBoxZIPBus->setCurrentIndex(-1); - const auto *model = ui->comboBoxZIPBus->model(); + ui->comboBoxRDiskBus->setCurrentIndex(-1); + const auto *model = ui->comboBoxRDiskBus->model(); auto match = model->match(model->index(0, 0), Qt::UserRole, bus); if (!match.isEmpty()) - ui->comboBoxZIPBus->setCurrentIndex(match.first().row()); + ui->comboBoxRDiskBus->setCurrentIndex(match.first().row()); - model = ui->comboBoxZIPChannel->model(); + model = ui->comboBoxRDiskChannel->model(); match = model->match(model->index(0, 0), Qt::UserRole, channel); if (!match.isEmpty()) - ui->comboBoxZIPChannel->setCurrentIndex(match.first().row()); - ui->checkBoxZIP250->setChecked(is250); - enableCurrentlySelectedChannel_ZIP(); + ui->comboBoxRDiskChannel->setCurrentIndex(match.first().row()); + ui->comboBoxRDiskType->setCurrentIndex(type); + enableCurrentlySelectedChannel_RDisk(); } void @@ -234,6 +251,15 @@ SettingsOtherRemovable::reloadBusChannels_MO() { enableCurrentlySelectedChannel_MO(); } +void +SettingsOtherRemovable::reloadBusChannels_RDisk() { + auto selected = ui->comboBoxRDiskChannel->currentIndex(); + Harddrives::populateBusChannels(ui->comboBoxRDiskChannel->model(), + ui->comboBoxRDiskBus->currentData().toInt(), Harddrives::busTrackClass); + ui->comboBoxRDiskChannel->setCurrentIndex(selected); + enableCurrentlySelectedChannel_RDisk(); +} + void SettingsOtherRemovable::on_comboBoxMOBus_currentIndexChanged(int index) { @@ -246,6 +272,18 @@ SettingsOtherRemovable::on_comboBoxMOBus_currentIndexChanged(int index) } } +void +SettingsOtherRemovable::on_comboBoxRDiskBus_currentIndexChanged(int index) +{ + if (index >= 0) { + int bus = ui->comboBoxRDiskBus->currentData().toInt(); + bool enabled = (bus != RDISK_BUS_DISABLED); + ui->comboBoxRDiskChannel->setEnabled(enabled); + ui->comboBoxRDiskType->setEnabled(enabled); + Harddrives::populateBusChannels(ui->comboBoxRDiskChannel->model(), bus, Harddrives::busTrackClass); + } +} + void SettingsOtherRemovable::on_comboBoxMOBus_activated(int) { @@ -253,9 +291,9 @@ SettingsOtherRemovable::on_comboBoxMOBus_activated(int) Harddrives::busTrackClass->device_track(0, DEV_MO, ui->tableViewMO->model()->data(i, Qt::UserRole).toInt(), ui->tableViewMO->model()->data(i, Qt::UserRole + 1).toInt()); - ui->comboBoxMOChannel->setCurrentIndex(ui->comboBoxMOBus->currentData().toUInt() == - MO_BUS_ATAPI ? Harddrives::busTrackClass->next_free_ide_channel() : - Harddrives::busTrackClass->next_free_scsi_id()); + ui->comboBoxMOChannel->setCurrentIndex(ui->comboBoxMOBus->currentData().toUInt() == MO_BUS_ATAPI ? + Harddrives::busTrackClass->next_free_ide_channel() : + Harddrives::busTrackClass->next_free_scsi_id()); ui->tableViewMO->model()->data(i, Qt::UserRole + 1); setMOBus(ui->tableViewMO->model(), ui->tableViewMO->selectionModel()->currentIndex(), @@ -272,6 +310,32 @@ SettingsOtherRemovable::on_comboBoxMOBus_activated(int) emit moChannelChanged(); } +void +SettingsOtherRemovable::on_comboBoxRDiskBus_activated(int) +{ + auto i = ui->tableViewRDisk->selectionModel()->currentIndex().siblingAtColumn(0); + Harddrives::busTrackClass->device_track(0, DEV_RDISK, ui->tableViewRDisk->model()->data(i, + Qt::UserRole).toInt(), ui->tableViewRDisk->model()->data(i, + Qt::UserRole + 1).toInt()); + ui->comboBoxRDiskChannel->setCurrentIndex(ui->comboBoxRDiskBus->currentData().toUInt() == RDISK_BUS_ATAPI ? + Harddrives::busTrackClass->next_free_ide_channel() : + Harddrives::busTrackClass->next_free_scsi_id()); + ui->tableViewRDisk->model()->data(i, Qt::UserRole + 1); + setRDiskBus(ui->tableViewRDisk->model(), + ui->tableViewRDisk->selectionModel()->currentIndex(), + ui->comboBoxRDiskBus->currentData().toUInt(), + ui->comboBoxRDiskChannel->currentData().toUInt()); + setRDiskType(ui->tableViewRDisk->model(), + ui->tableViewRDisk->selectionModel()->currentIndex(), + ui->comboBoxRDiskType->currentData().toUInt()); + ui->tableViewRDisk->resizeColumnsToContents(); + ui->tableViewRDisk->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); + Harddrives::busTrackClass->device_track(1, DEV_RDISK, ui->tableViewRDisk->model()->data(i, + Qt::UserRole).toInt(), ui->tableViewRDisk->model()->data(i, + Qt::UserRole + 1).toInt()); + emit rdiskChannelChanged(); +} + void SettingsOtherRemovable::enableCurrentlySelectedChannel_MO() { @@ -282,6 +346,15 @@ SettingsOtherRemovable::enableCurrentlySelectedChannel_MO() item->setEnabled(true); } +void +SettingsOtherRemovable::enableCurrentlySelectedChannel_RDisk() +{ + const auto *item_model = qobject_cast(ui->comboBoxRDiskChannel->model()); + const auto index = ui->comboBoxRDiskChannel->currentIndex(); + auto *item = item_model->item(index); + if (item) + item->setEnabled(true); +} void SettingsOtherRemovable::on_comboBoxMOChannel_activated(int) { @@ -299,6 +372,23 @@ SettingsOtherRemovable::on_comboBoxMOChannel_activated(int) emit moChannelChanged(); } +void +SettingsOtherRemovable::on_comboBoxRDiskChannel_activated(int) +{ + auto i = ui->tableViewRDisk->selectionModel()->currentIndex().siblingAtColumn(0); + Harddrives::busTrackClass->device_track(0, DEV_RDISK, ui->tableViewRDisk->model()->data(i, + Qt::UserRole).toInt(), ui->tableViewRDisk->model()->data(i, + Qt::UserRole + 1).toInt()); + setRDiskBus(ui->tableViewRDisk->model(), + ui->tableViewRDisk->selectionModel()->currentIndex(), + ui->comboBoxRDiskBus->currentData().toUInt(), + ui->comboBoxRDiskChannel->currentData().toUInt()); + Harddrives::busTrackClass->device_track(1, DEV_RDISK, ui->tableViewRDisk->model()->data(i, + Qt::UserRole).toInt(), + ui->tableViewRDisk->model()->data(i, Qt::UserRole + 1).toInt()); + emit rdiskChannelChanged(); +} + void SettingsOtherRemovable::on_comboBoxMOType_activated(int) { @@ -310,77 +400,11 @@ SettingsOtherRemovable::on_comboBoxMOType_activated(int) } void -SettingsOtherRemovable::reloadBusChannels_ZIP() { - auto selected = ui->comboBoxZIPChannel->currentIndex(); - Harddrives::populateBusChannels(ui->comboBoxZIPChannel->model(), - ui->comboBoxZIPBus->currentData().toInt(), Harddrives::busTrackClass); - ui->comboBoxZIPChannel->setCurrentIndex(selected); - enableCurrentlySelectedChannel_ZIP(); -} - -void -SettingsOtherRemovable::on_comboBoxZIPBus_currentIndexChanged(int index) +SettingsOtherRemovable::on_comboBoxRDiskType_activated(int) { - if (index >= 0) { - int bus = ui->comboBoxZIPBus->currentData().toInt(); - bool enabled = (bus != ZIP_BUS_DISABLED); - ui->comboBoxZIPChannel->setEnabled(enabled); - ui->checkBoxZIP250->setEnabled(enabled); - Harddrives::populateBusChannels(ui->comboBoxZIPChannel->model(), bus, Harddrives::busTrackClass); - } -} - -void -SettingsOtherRemovable::on_comboBoxZIPBus_activated(int) -{ - auto i = ui->tableViewZIP->selectionModel()->currentIndex().siblingAtColumn(0); - Harddrives::busTrackClass->device_track(0, DEV_ZIP, ui->tableViewZIP->model()->data(i, - Qt::UserRole).toInt(), ui->tableViewZIP->model()->data(i, - Qt::UserRole + 1).toInt()); - ui->comboBoxZIPChannel->setCurrentIndex(ui->comboBoxZIPBus->currentData().toUInt() == ZIP_BUS_ATAPI ? - Harddrives::busTrackClass->next_free_ide_channel() : - Harddrives::busTrackClass->next_free_scsi_id()); - setZIPBus(ui->tableViewZIP->model(), - ui->tableViewZIP->selectionModel()->currentIndex(), - ui->comboBoxZIPBus->currentData().toUInt(), - ui->comboBoxZIPChannel->currentData().toUInt()); - Harddrives::busTrackClass->device_track(1, DEV_ZIP, ui->tableViewZIP->model()->data(i, - Qt::UserRole).toInt(), ui->tableViewZIP->model()->data(i, - Qt::UserRole + 1).toInt()); - emit zipChannelChanged(); -} - -void -SettingsOtherRemovable::enableCurrentlySelectedChannel_ZIP() -{ - const auto *item_model = qobject_cast(ui->comboBoxZIPChannel->model()); - const auto index = ui->comboBoxZIPChannel->currentIndex(); - auto *item = item_model->item(index); - if (item) - item->setEnabled(true); -} - -void -SettingsOtherRemovable::on_comboBoxZIPChannel_activated(int) -{ - auto i = ui->tableViewZIP->selectionModel()->currentIndex().siblingAtColumn(0); - Harddrives::busTrackClass->device_track(0, DEV_ZIP, ui->tableViewZIP->model()->data(i, - Qt::UserRole).toInt(), ui->tableViewZIP->model()->data(i, - Qt::UserRole + 1).toInt()); - setZIPBus(ui->tableViewZIP->model(), - ui->tableViewZIP->selectionModel()->currentIndex(), - ui->comboBoxZIPBus->currentData().toUInt(), - ui->comboBoxZIPChannel->currentData().toUInt()); - Harddrives::busTrackClass->device_track(1, DEV_ZIP, ui->tableViewZIP->model()->data(i, - Qt::UserRole).toInt(), - ui->tableViewZIP->model()->data(i, Qt::UserRole + 1).toInt()); - emit zipChannelChanged(); -} - -void -SettingsOtherRemovable::on_checkBoxZIP250_stateChanged(int state) -{ - setZIPType(ui->tableViewZIP->model(), - ui->tableViewZIP->selectionModel()->currentIndex(), - state == Qt::Checked); + setRDiskType(ui->tableViewRDisk->model(), + ui->tableViewRDisk->selectionModel()->currentIndex(), + ui->comboBoxRDiskType->currentData().toUInt()); + ui->tableViewRDisk->resizeColumnsToContents(); + ui->tableViewRDisk->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); } diff --git a/src/qt/qt_settingsotherremovable.hpp b/src/qt/qt_settingsotherremovable.hpp index 1459ed043..79fcfbf3f 100644 --- a/src/qt/qt_settingsotherremovable.hpp +++ b/src/qt/qt_settingsotherremovable.hpp @@ -14,13 +14,13 @@ public: explicit SettingsOtherRemovable(QWidget *parent = nullptr); ~SettingsOtherRemovable(); void reloadBusChannels_MO(); - void reloadBusChannels_ZIP(); + void reloadBusChannels_RDisk(); void save(); signals: void moChannelChanged(); - void zipChannelChanged(); + void rdiskChannelChanged(); private slots: void onMORowChanged(const QModelIndex ¤t); @@ -29,16 +29,16 @@ private slots: void on_comboBoxMOChannel_activated(int index); void on_comboBoxMOType_activated(int index); - void onZIPRowChanged(const QModelIndex ¤t); - void on_comboBoxZIPBus_currentIndexChanged(int index); - void on_comboBoxZIPBus_activated(int index); - void on_comboBoxZIPChannel_activated(int index); - void on_checkBoxZIP250_stateChanged(int arg1); + void onRDiskRowChanged(const QModelIndex ¤t); + void on_comboBoxRDiskBus_currentIndexChanged(int index); + void on_comboBoxRDiskBus_activated(int index); + void on_comboBoxRDiskChannel_activated(int index); + void on_comboBoxRDiskType_activated(int index); private: Ui::SettingsOtherRemovable *ui; void enableCurrentlySelectedChannel_MO(); - void enableCurrentlySelectedChannel_ZIP(); + void enableCurrentlySelectedChannel_RDisk(); }; #endif // QT_SETTINGSOTHERREMOVABLE_HPP diff --git a/src/qt/qt_settingsotherremovable.ui b/src/qt/qt_settingsotherremovable.ui index ae7839e54..8224d67f6 100644 --- a/src/qt/qt_settingsotherremovable.ui +++ b/src/qt/qt_settingsotherremovable.ui @@ -113,14 +113,14 @@ - + - ZIP drives: + Removable disk drives: - + 0 @@ -151,40 +151,47 @@ - - - - + + + + Bus: - - + + 30 - - + + Channel: - - + + 30 - - + + - ZIP 250 + Type: + + + + + + + 30 @@ -193,6 +200,16 @@ + + tableViewMO + comboBoxMOBus + comboBoxMOChannel + comboBoxMOType + tableViewRDisk + comboBoxRDiskBus + comboBoxRDiskChannel + comboBoxRDiskType + diff --git a/src/qt/qt_settingsstoragecontrollers.cpp b/src/qt/qt_settingsstoragecontrollers.cpp index 5c9b24c46..8614852eb 100644 --- a/src/qt/qt_settingsstoragecontrollers.cpp +++ b/src/qt/qt_settingsstoragecontrollers.cpp @@ -52,15 +52,16 @@ void SettingsStorageControllers::save() { /* Storage devices category */ + for (uint8_t i = 0; i < HDC_MAX; ++i) { + QComboBox *cbox = findChild(QString("comboBoxHD%1").arg(i + 1)); + hdc_current[i] = cbox->currentData().toInt(); + } for (uint8_t i = 0; i < SCSI_CARD_MAX; ++i) { QComboBox *cbox = findChild(QString("comboBoxSCSI%1").arg(i + 1)); scsi_card_current[i] = cbox->currentData().toInt(); } fdc_current[0] = ui->comboBoxFD->currentData().toInt(); - hdc_current[0] = ui->comboBoxHD->currentData().toInt(); cdrom_interface_current = ui->comboBoxCDInterface->currentData().toInt(); - ide_ter_enabled = ui->checkBoxTertiaryIDE->isChecked() ? 1 : 0; - ide_qua_enabled = ui->checkBoxQuaternaryIDE->isChecked() ? 1 : 0; cassette_enable = ui->checkBoxCassette->isChecked() ? 1 : 0; } @@ -69,44 +70,12 @@ SettingsStorageControllers::onCurrentMachineChanged(int machineId) { this->machineId = machineId; - /*HD controller config*/ + /* FD controller config */ int c = 0; - auto *model = ui->comboBoxHD->model(); + auto *model = ui->comboBoxFD->model(); auto removeRows = model->rowCount(); int selectedRow = 0; - while (true) { - /* Skip "internal" if machine doesn't have it. */ - if ((c == 1) && (machine_has_flags(machineId, MACHINE_HDC) == 0)) { - c++; - continue; - } - - QString name = DeviceConfig::DeviceName(hdc_get_device(c), hdc_get_internal_name(c), 1); - if (name.isEmpty()) - break; - - if (hdc_available(c)) { - const device_t *hdc_dev = hdc_get_device(c); - - if (device_is_valid(hdc_dev, machineId)) { - int row = Models::AddEntry(model, name, c); - if (c == hdc_current[0]) - selectedRow = row - removeRows; - } - } - c++; - } - model->removeRows(0, removeRows); - ui->comboBoxHD->setEnabled(model->rowCount() > 0); - ui->comboBoxHD->setCurrentIndex(-1); - ui->comboBoxHD->setCurrentIndex(selectedRow); - - /* FD controller config */ - model = ui->comboBoxFD->model(); - removeRows = model->rowCount(); - c = 0; - selectedRow = 0; while (true) { #if 0 /* Skip "internal" if machine doesn't have it. */ @@ -139,15 +108,10 @@ SettingsStorageControllers::onCurrentMachineChanged(int machineId) ui->comboBoxFD->setCurrentIndex(selectedRow); /*CD interface controller config*/ -#ifdef USE_CDROM_MITSUMI ui->labelCDInterface->setVisible(true); ui->comboBoxCDInterface->setVisible(true); ui->pushButtonCDInterface->setVisible(true); -#else - ui->labelCDInterface->setVisible(false); - ui->comboBoxCDInterface->setVisible(false); - ui->pushButtonCDInterface->setVisible(false); -#endif + c = 0; model = ui->comboBoxCDInterface->model(); removeRows = model->rowCount(); @@ -177,6 +141,51 @@ SettingsStorageControllers::onCurrentMachineChanged(int machineId) ui->comboBoxCDInterface->setCurrentIndex(-1); ui->comboBoxCDInterface->setCurrentIndex(selectedRow); + // HD Controller + QComboBox * hd_cbox[HDC_MAX] = { 0 }; + QAbstractItemModel *hd_models[HDC_MAX] = { 0 }; + int hd_removeRows_[HDC_MAX] = { 0 }; + int hd_selectedRows[HDC_MAX] = { 0 }; + + for (uint8_t i = 0; i < HDC_MAX; ++i) { + hd_cbox[i] = findChild(QString("comboBoxHD%1").arg(i + 1)); + hd_models[i] = hd_cbox[i]->model(); + hd_removeRows_[i] = hd_models[i]->rowCount(); + } + + c = 0; + while (true) { + const QString name = DeviceConfig::DeviceName(hdc_get_device(c), + hdc_get_internal_name(c), 1); + + if (name.isEmpty()) + break; + + if (hdc_available(c)) { + if (device_is_valid(hdc_get_device(c), machineId)) { + for (uint8_t i = 0; i < HDC_MAX; ++i) { + /* Skip "internal" if machine doesn't have it. */ + if ((c == 1) && ((i > 0) || (machine_has_flags(machineId, MACHINE_HDC) == 0))) + continue; + + int row = Models::AddEntry(hd_models[i], name, c); + + if (c == hdc_current[i]) + hd_selectedRows[i] = row - hd_removeRows_[i]; + } + } + } + + c++; + } + + for (uint8_t i = 0; i < HDC_MAX; ++i) { + hd_models[i]->removeRows(0, hd_removeRows_[i]); + hd_cbox[i]->setEnabled(hd_models[i]->rowCount() > 1); + hd_cbox[i]->setCurrentIndex(-1); + hd_cbox[i]->setCurrentIndex(hd_selectedRows[i]); + } + // SCSI Card QComboBox * cbox[SCSI_CARD_MAX] = { 0 }; QAbstractItemModel *models[SCSI_CARD_MAX] = { 0 }; @@ -208,7 +217,7 @@ SettingsStorageControllers::onCurrentMachineChanged(int machineId) } } - c++; + c++; } for (uint8_t i = 0; i < SCSI_CARD_MAX; ++i) { @@ -218,12 +227,6 @@ SettingsStorageControllers::onCurrentMachineChanged(int machineId) cbox[i]->setCurrentIndex(selectedRows[i]); } - int is_at = IS_AT(machineId); - ui->checkBoxTertiaryIDE->setEnabled(is_at > 0); - ui->checkBoxQuaternaryIDE->setEnabled(is_at > 0); - ui->checkBoxTertiaryIDE->setChecked(ui->checkBoxTertiaryIDE->isEnabled() && ide_ter_enabled); - ui->checkBoxQuaternaryIDE->setChecked(ui->checkBoxQuaternaryIDE->isEnabled() && ide_qua_enabled); - if (machine_has_bus(machineId, MACHINE_BUS_CASSETTE)) { ui->checkBoxCassette->setChecked(cassette_enable > 0); ui->checkBoxCassette->setEnabled(true); @@ -243,12 +246,39 @@ SettingsStorageControllers::on_comboBoxFD_currentIndexChanged(int index) } void -SettingsStorageControllers::on_comboBoxHD_currentIndexChanged(int index) +SettingsStorageControllers::on_comboBoxHD1_currentIndexChanged(int index) { if (index < 0) return; - ui->pushButtonHD->setEnabled(hdc_has_config(ui->comboBoxHD->currentData().toInt()) > 0); + ui->pushButtonHD1->setEnabled(hdc_has_config(ui->comboBoxHD1->currentData().toInt()) > 0); +} + +void +SettingsStorageControllers::on_comboBoxHD2_currentIndexChanged(int index) +{ + if (index < 0) + return; + + ui->pushButtonHD2->setEnabled(hdc_has_config(ui->comboBoxHD2->currentData().toInt()) > 0); +} + +void +SettingsStorageControllers::on_comboBoxHD3_currentIndexChanged(int index) +{ + if (index < 0) + return; + + ui->pushButtonHD3->setEnabled(hdc_has_config(ui->comboBoxHD3->currentData().toInt()) > 0); +} + +void +SettingsStorageControllers::on_comboBoxHD4_currentIndexChanged(int index) +{ + if (index < 0) + return; + + ui->pushButtonHD4->setEnabled(hdc_has_config(ui->comboBoxHD4->currentData().toInt()) > 0); } void @@ -260,18 +290,6 @@ SettingsStorageControllers::on_comboBoxCDInterface_currentIndexChanged(int index ui->pushButtonCDInterface->setEnabled(cdrom_interface_has_config(ui->comboBoxCDInterface->currentData().toInt()) > 0); } -void -SettingsStorageControllers::on_checkBoxTertiaryIDE_stateChanged(int arg1) -{ - ui->pushButtonTertiaryIDE->setEnabled(arg1 == Qt::Checked); -} - -void -SettingsStorageControllers::on_checkBoxQuaternaryIDE_stateChanged(int arg1) -{ - ui->pushButtonQuaternaryIDE->setEnabled(arg1 == Qt::Checked); -} - void SettingsStorageControllers::on_pushButtonFD_clicked() { @@ -279,9 +297,27 @@ SettingsStorageControllers::on_pushButtonFD_clicked() } void -SettingsStorageControllers::on_pushButtonHD_clicked() +SettingsStorageControllers::on_pushButtonHD1_clicked() { - DeviceConfig::ConfigureDevice(hdc_get_device(ui->comboBoxHD->currentData().toInt())); + DeviceConfig::ConfigureDevice(hdc_get_device(ui->comboBoxHD1->currentData().toInt()), 1); +} + +void +SettingsStorageControllers::on_pushButtonHD2_clicked() +{ + DeviceConfig::ConfigureDevice(hdc_get_device(ui->comboBoxHD2->currentData().toInt()), 2); +} + +void +SettingsStorageControllers::on_pushButtonHD3_clicked() +{ + DeviceConfig::ConfigureDevice(hdc_get_device(ui->comboBoxHD3->currentData().toInt()), 3); +} + +void +SettingsStorageControllers::on_pushButtonHD4_clicked() +{ + DeviceConfig::ConfigureDevice(hdc_get_device(ui->comboBoxHD4->currentData().toInt()), 4); } void @@ -290,18 +326,6 @@ SettingsStorageControllers::on_pushButtonCDInterface_clicked() DeviceConfig::ConfigureDevice(cdrom_interface_get_device(ui->comboBoxCDInterface->currentData().toInt())); } -void -SettingsStorageControllers::on_pushButtonTertiaryIDE_clicked() -{ - DeviceConfig::ConfigureDevice(&ide_ter_device); -} - -void -SettingsStorageControllers::on_pushButtonQuaternaryIDE_clicked() -{ - DeviceConfig::ConfigureDevice(&ide_qua_device); -} - void SettingsStorageControllers::on_comboBoxSCSI1_currentIndexChanged(int index) { diff --git a/src/qt/qt_settingsstoragecontrollers.hpp b/src/qt/qt_settingsstoragecontrollers.hpp index 074b48dbd..7ba862e0c 100644 --- a/src/qt/qt_settingsstoragecontrollers.hpp +++ b/src/qt/qt_settingsstoragecontrollers.hpp @@ -23,18 +23,18 @@ private slots: void on_comboBoxFD_currentIndexChanged(int index); void on_pushButtonFD_clicked(); - void on_comboBoxHD_currentIndexChanged(int index); - void on_pushButtonHD_clicked(); + void on_comboBoxHD1_currentIndexChanged(int index); + void on_pushButtonHD1_clicked(); + void on_comboBoxHD2_currentIndexChanged(int index); + void on_pushButtonHD2_clicked(); + void on_comboBoxHD3_currentIndexChanged(int index); + void on_pushButtonHD3_clicked(); + void on_comboBoxHD4_currentIndexChanged(int index); + void on_pushButtonHD4_clicked(); void on_comboBoxCDInterface_currentIndexChanged(int index); void on_pushButtonCDInterface_clicked(); - void on_checkBoxTertiaryIDE_stateChanged(int arg1); - void on_pushButtonTertiaryIDE_clicked(); - - void on_checkBoxQuaternaryIDE_stateChanged(int arg1); - void on_pushButtonQuaternaryIDE_clicked(); - void on_comboBoxSCSI1_currentIndexChanged(int index); void on_pushButtonSCSI1_clicked(); void on_comboBoxSCSI2_currentIndexChanged(int index); diff --git a/src/qt/qt_settingsstoragecontrollers.ui b/src/qt/qt_settingsstoragecontrollers.ui index b9eb310ba..2d6fa9d32 100644 --- a/src/qt/qt_settingsstoragecontrollers.ui +++ b/src/qt/qt_settingsstoragecontrollers.ui @@ -50,89 +50,145 @@ - - - HD Controller: - - - - - - - - 0 - 0 - - - - 30 - - - - - - - Configure - - - - CD-ROM Controller: - + 30 - + Configure - - - - Tertiary IDE Controller - - - - - - - false - - - Configure - - - - - - - Quaternary IDE Controller - - - - - - - false - - - Configure - - - + + + + Hard disk + + + + + + Controller 1: + + + + + + + + 0 + 0 + + + + 30 + + + + + + + Configure + + + + + + + Controller 2: + + + + + + + + 0 + 0 + + + + 30 + + + + + + + Configure + + + + + + + Controller 3: + + + + + + + + 0 + 0 + + + + 30 + + + + + + + Configure + + + + + + + Controller 4: + + + + + + + + 0 + 0 + + + + 30 + + + + + + + Configure + + + + + + @@ -272,6 +328,29 @@ + + comboBoxFD + pushButtonFD + comboBoxCDInterface + pushButtonCDInterface + comboBoxHD1 + pushButtonHD1 + comboBoxHD2 + pushButtonHD2 + comboBoxHD3 + pushButtonHD3 + comboBoxHD4 + pushButtonHD4 + comboBoxSCSI1 + pushButtonSCSI1 + comboBoxSCSI2 + pushButtonSCSI2 + comboBoxSCSI3 + pushButtonSCSI3 + comboBoxSCSI4 + pushButtonSCSI4 + checkBoxCassette + diff --git a/src/qt/qt_styleoverride.cpp b/src/qt/qt_styleoverride.cpp index 0bade8fa6..adfae0734 100644 --- a/src/qt/qt_styleoverride.cpp +++ b/src/qt/qt_styleoverride.cpp @@ -22,6 +22,11 @@ #include #include +extern "C" { +#include <86box/86box.h> +#include <86box/plat.h> +} + #ifdef Q_OS_WINDOWS #include #ifndef DWMWA_USE_IMMERSIVE_DARK_MODE @@ -37,7 +42,7 @@ StyleOverride::styleHint( QStyleHintReturn *returnData) const { /* Disable using menu with alt key */ - if (hint == QStyle::SH_MenuBar_AltKeyNavigation) + if (!vmm_enabled && (!kbd_req_capture || mouse_capture) && (hint == QStyle::SH_MenuBar_AltKeyNavigation)) return 0; return QProxyStyle::styleHint(hint, option, widget, returnData); diff --git a/src/qt/qt_ui.cpp b/src/qt/qt_ui.cpp index 337b438f3..d4a257887 100644 --- a/src/qt/qt_ui.cpp +++ b/src/qt/qt_ui.cpp @@ -50,7 +50,7 @@ extern "C" { #include <86box/cartridge.h> #include <86box/cassette.h> #include <86box/cdrom.h> -#include <86box/zip.h> +#include <86box/rdisk.h> #include <86box/mo.h> #include <86box/hdd.h> #include <86box/thread.h> @@ -278,8 +278,8 @@ ui_sb_update_icon_wp(int tag, int state) case SB_FLOPPY: machine_status.fdd[item].write_prot = state > 0 ? true : false; break; - case SB_ZIP: - machine_status.zip[item].write_prot = state > 0 ? true : false; + case SB_RDISK: + machine_status.rdisk[item].write_prot = state > 0 ? true : false; break; case SB_MO: machine_status.mo[item].write_prot = state > 0 ? true : false; @@ -312,8 +312,8 @@ ui_sb_update_icon_state(int tag, int state) case SB_CDROM: machine_status.cdrom[item].empty = state > 0 ? true : false; break; - case SB_ZIP: - machine_status.zip[item].empty = state > 0 ? true : false; + case SB_RDISK: + machine_status.rdisk[item].empty = state > 0 ? true : false; break; case SB_MO: machine_status.mo[item].empty = state > 0 ? true : false; @@ -350,8 +350,8 @@ ui_sb_update_icon(int tag, int active) case SB_CDROM: machine_status.cdrom[item].active = active > 0 ? true : false; break; - case SB_ZIP: - machine_status.zip[item].active = active > 0 ? true : false; + case SB_RDISK: + machine_status.rdisk[item].active = active > 0 ? true : false; break; case SB_MO: machine_status.mo[item].active = active > 0 ? true : false; @@ -386,8 +386,8 @@ ui_sb_update_icon_write(int tag, int write) case SB_CDROM: machine_status.cdrom[item].write_active = write > 0 ? true : false; break; - case SB_ZIP: - machine_status.zip[item].write_active = write > 0 ? true : false; + case SB_RDISK: + machine_status.rdisk[item].write_active = write > 0 ? true : false; break; case SB_MO: machine_status.mo[item].write_active = write > 0 ? true : false; diff --git a/src/qt/qt_updatecheckdialog.cpp b/src/qt/qt_updatecheckdialog.cpp index d0cb6941d..71db9f31b 100644 --- a/src/qt/qt_updatecheckdialog.cpp +++ b/src/qt/qt_updatecheckdialog.cpp @@ -30,8 +30,8 @@ UpdateCheckDialog:: UpdateCheckDialog(const UpdateCheck::UpdateChannel channel, QWidget *parent) : QDialog(parent), ui(new Ui::UpdateCheckDialog), updateCheck(new UpdateCheck(channel)) { ui->setupUi(this); - setWindowTitle(tr("Update check")); ui->statusLabel->setHidden(true); + this->setFixedSize(400, 130); updateChannel = channel; currentVersion = UpdateCheck::getCurrentVersion(updateChannel); connect(updateCheck, &UpdateCheck::updateCheckError, [=](const QString &errorMsg) { @@ -67,7 +67,7 @@ UpdateCheckDialog::downloadComplete(const UpdateCheck::UpdateResult &result) return; } - const auto updateDetails = new UpdateDetails(result); + const auto updateDetails = new UpdateDetails(result, this); connect(updateDetails, &QDialog::accepted, [this] { accept(); }); diff --git a/src/qt/qt_updatecheckdialog.ui b/src/qt/qt_updatecheckdialog.ui index e50a541bb..c70ca8de2 100644 --- a/src/qt/qt_updatecheckdialog.ui +++ b/src/qt/qt_updatecheckdialog.ui @@ -6,8 +6,8 @@ 0 0 - 350 - 134 + 400 + 130 @@ -17,7 +17,7 @@ - Dialog + Update check diff --git a/src/qt/qt_updatedetails.cpp b/src/qt/qt_updatedetails.cpp index dceeea47c..f043c9504 100644 --- a/src/qt/qt_updatedetails.cpp +++ b/src/qt/qt_updatedetails.cpp @@ -23,10 +23,9 @@ UpdateDetails:: -UpdateDetails(const UpdateCheck::UpdateResult &updateResult, QWidget *parent) : ui(new Ui::UpdateDetails) +UpdateDetails(const UpdateCheck::UpdateResult &updateResult, QWidget *parent) : QDialog(parent), ui(new Ui::UpdateDetails) { ui->setupUi(this); - setWindowTitle("86Box Update"); ui->updateTitle->setText("An update to 86Box is available!"); QString currentVersionText; QString releaseType = updateResult.channel == UpdateCheck::UpdateChannel::Stable ? tr("version") : tr("build"); diff --git a/src/qt/qt_updatedetails.ui b/src/qt/qt_updatedetails.ui index 7b9c0aa2a..7798896a9 100644 --- a/src/qt/qt_updatedetails.ui +++ b/src/qt/qt_updatedetails.ui @@ -17,7 +17,7 @@ - Dialog + 86Box Update diff --git a/src/qt/qt_util.cpp b/src/qt/qt_util.cpp index 5baaaaacf..bc9b9f1f8 100644 --- a/src/qt/qt_util.cpp +++ b/src/qt/qt_util.cpp @@ -117,11 +117,16 @@ DlgFilter(QStringList extensions, bool last) QString currentUuid() { - auto configPath = QFileInfo(cfg_path).dir().canonicalPath(); - if(!configPath.endsWith("/")) { - configPath.append("/"); + return generateUuid(QString(cfg_path)); +} + +QString generateUuid(const QString &path) +{ + auto dirPath = QFileInfo(path).dir().canonicalPath(); + if(!dirPath.endsWith("/")) { + dirPath.append("/"); } - return QUuid::createUuidV5(QUuid{}, configPath).toString(QUuid::WithoutBraces); + return QUuid::createUuidV5(QUuid{}, dirPath).toString(QUuid::WithoutBraces); } bool compareUuid() diff --git a/src/qt/qt_util.hpp b/src/qt/qt_util.hpp index e0d2648d0..de3457a88 100644 --- a/src/qt/qt_util.hpp +++ b/src/qt/qt_util.hpp @@ -18,6 +18,7 @@ QScreen *screenOfWidget(QWidget *widget); void setWin11RoundedCorners(WId hwnd, bool enable); #endif QString currentUuid(); +QString generateUuid(const QString &path); void storeCurrentUuid(); bool compareUuid(); void generateNewMacAdresses(); diff --git a/src/qt/qt_vmmanager_addmachine.cpp b/src/qt/qt_vmmanager_addmachine.cpp index aa6c7a1c4..55ff7274b 100644 --- a/src/qt/qt_vmmanager_addmachine.cpp +++ b/src/qt/qt_vmmanager_addmachine.cpp @@ -62,11 +62,14 @@ VMManagerAddMachine(QWidget *parent) : QWizard(parent) setOption(HaveHelpButton, false); // setPixmap(LogoPixmap, QPixmap(":/settings/qt/icons/86Box-gray.ico")); +#if 0 connect(this, &QWizard::helpRequested, this, &VMManagerAddMachine::showHelp); +#endif setWindowTitle(tr("Add new system wizard")); } +#if 0 void VMManagerAddMachine::showHelp() { @@ -92,6 +95,7 @@ VMManagerAddMachine::showHelp() QMessageBox::information(this, tr("Add new system wizard help"), message); lastHelpMessage = message; } +#endif IntroPage:: IntroPage(QWidget *parent) @@ -139,6 +143,17 @@ WithExistingConfigPage(QWidget *parent) topLabel->setWordWrap(true); existingConfiguration = new QPlainTextEdit(); + const auto monospaceFont = new QFont(); +#ifdef Q_OS_WINDOWS + monospaceFont->setFamily("Consolas"); +#elif defined(Q_OS_MACOS) + monospaceFont->setFamily("Menlo"); +#else + monospaceFont->setFamily("Monospace"); +#endif + monospaceFont->setStyleHint(QFont::Monospace); + monospaceFont->setFixedPitch(true); + existingConfiguration->setFont(*monospaceFont); connect(existingConfiguration, &QPlainTextEdit::textChanged, this, &WithExistingConfigPage::completeChanged); registerField("existingConfiguration*", this, "configuration"); diff --git a/src/qt/qt_vmmanager_addmachine.hpp b/src/qt/qt_vmmanager_addmachine.hpp index c1355b471..6ba1a53ce 100644 --- a/src/qt/qt_vmmanager_addmachine.hpp +++ b/src/qt/qt_vmmanager_addmachine.hpp @@ -42,8 +42,10 @@ public: explicit VMManagerAddMachine(QWidget *parent = nullptr); +#if 0 private slots: void showHelp(); +#endif }; class IntroPage : public QWizardPage { diff --git a/src/qt/qt_vmmanager_clientsocket.cpp b/src/qt/qt_vmmanager_clientsocket.cpp index f5e5c8bad..ffe4fb5f7 100644 --- a/src/qt/qt_vmmanager_clientsocket.cpp +++ b/src/qt/qt_vmmanager_clientsocket.cpp @@ -247,3 +247,9 @@ VMManagerClientSocket::clientRunningStateChanged(VMManagerProtocol::RunningState extra_object["status"] = static_cast(state); sendMessageWithObject(VMManagerProtocol::ClientMessage::RunningStateChanged, extra_object); } + +void +VMManagerClientSocket::configurationChanged() const +{ + sendMessage(VMManagerProtocol::ClientMessage::ConfigurationChanged); +} diff --git a/src/qt/qt_vmmanager_clientsocket.hpp b/src/qt/qt_vmmanager_clientsocket.hpp index 980ec10ee..50657a27b 100644 --- a/src/qt/qt_vmmanager_clientsocket.hpp +++ b/src/qt/qt_vmmanager_clientsocket.hpp @@ -44,6 +44,7 @@ signals: public slots: void clientRunningStateChanged(VMManagerProtocol::RunningState state) const; + void configurationChanged() const; private: QString server_name; diff --git a/src/qt/qt_vmmanager_details.cpp b/src/qt/qt_vmmanager_details.cpp index c3b5ac4ce..9292c7039 100644 --- a/src/qt/qt_vmmanager_details.cpp +++ b/src/qt/qt_vmmanager_details.cpp @@ -60,13 +60,16 @@ VMManagerDetails::VMManagerDetails(QWidget *parent) : ui->leftColumn->layout()->addWidget(networkSection); // ui->leftColumn->layout()->addWidget(createHorizontalLine()); - inputSection = new VMManagerDetailSection(tr("Input Devices", "Header for Input section in VM Manager Details")); + inputSection = new VMManagerDetailSection(tr("Input devices", "Header for Input section in VM Manager Details")); ui->leftColumn->layout()->addWidget(inputSection); // ui->leftColumn->layout()->addWidget(createHorizontalLine()); portsSection = new VMManagerDetailSection(tr("Ports", "Header for Input section in VM Manager Details")); ui->leftColumn->layout()->addWidget(portsSection); + otherSection = new VMManagerDetailSection(tr("Other devices", "Header for Other devices section in VM Manager Details")); + ui->leftColumn->layout()->addWidget(otherSection); + // This is like adding a spacer leftColumnLayout->addStretch(); @@ -198,6 +201,30 @@ VMManagerDetails::updateData(VMManagerSystem *passed_sysconfig) { startPauseButton->setEnabled(true); configureButton->setEnabled(true); + updateConfig(passed_sysconfig); + updateScreenshots(passed_sysconfig); + + ui->systemLabel->setText(passed_sysconfig->displayName); + ui->statusLabel->setText(sysconfig->process->processId() == 0 ? + tr("Not running") : + QString("%1: PID %2").arg(tr("Running"), QString::number(sysconfig->process->processId()))); + ui->notesTextEdit->setPlainText(passed_sysconfig->notes); + ui->notesTextEdit->setEnabled(true); + + disconnect(sysconfig->process, &QProcess::stateChanged, this, &VMManagerDetails::updateProcessStatus); + connect(sysconfig->process, &QProcess::stateChanged, this, &VMManagerDetails::updateProcessStatus); + + disconnect(sysconfig, &VMManagerSystem::windowStatusChanged, this, &VMManagerDetails::updateWindowStatus); + connect(sysconfig, &VMManagerSystem::windowStatusChanged, this, &VMManagerDetails::updateWindowStatus); + + disconnect(sysconfig, &VMManagerSystem::clientProcessStatusChanged, this, &VMManagerDetails::updateProcessStatus); + connect(sysconfig, &VMManagerSystem::clientProcessStatusChanged, this, &VMManagerDetails::updateProcessStatus); + + updateProcessStatus(); +} + +void +VMManagerDetails::updateConfig(VMManagerSystem *passed_sysconfig) { // Each detail section here has its own VMManagerDetailSection. // When a system is selected in the list view it is updated here, through this object: // * First you clear it with VMManagerDetailSection::clear() @@ -221,7 +248,10 @@ VMManagerDetails::updateData(VMManagerSystem *passed_sysconfig) { storageSection->addSection("Disks", passed_sysconfig->getDisplayValue(Display::Name::Disks)); storageSection->addSection("Floppy", passed_sysconfig->getDisplayValue(Display::Name::Floppy)); storageSection->addSection("CD-ROM", passed_sysconfig->getDisplayValue(Display::Name::CD)); + storageSection->addSection("Removable disks", passed_sysconfig->getDisplayValue(Display::Name::RDisk)); + storageSection->addSection("MO", passed_sysconfig->getDisplayValue(Display::Name::MO)); storageSection->addSection("SCSI", passed_sysconfig->getDisplayValue(Display::Name::SCSIController)); + storageSection->addSection("Controllers", passed_sysconfig->getDisplayValue(Display::Name::StorageController)); // Audio audioSection->clear(); @@ -234,14 +264,24 @@ VMManagerDetails::updateData(VMManagerSystem *passed_sysconfig) { // Input inputSection->clear(); + inputSection->addSection(tr("Keyboard"), passed_sysconfig->getDisplayValue(Display::Name::Keyboard)); inputSection->addSection(tr("Mouse"), passed_sysconfig->getDisplayValue(Display::Name::Mouse)); inputSection->addSection(tr("Joystick"), passed_sysconfig->getDisplayValue(Display::Name::Joystick)); // Ports portsSection->clear(); - portsSection->addSection(tr("Serial Ports"), passed_sysconfig->getDisplayValue(Display::Name::Serial)); - portsSection->addSection(tr("Parallel Ports"), passed_sysconfig->getDisplayValue(Display::Name::Parallel)); + portsSection->addSection(tr("Serial ports"), passed_sysconfig->getDisplayValue(Display::Name::Serial)); + portsSection->addSection(tr("Parallel ports"), passed_sysconfig->getDisplayValue(Display::Name::Parallel)); + // Other devices + otherSection->clear(); + otherSection->addSection(tr("ISA RTC"), passed_sysconfig->getDisplayValue(Display::Name::IsaRtc)); + otherSection->addSection(tr("ISA RAM"), passed_sysconfig->getDisplayValue(Display::Name::IsaMem)); + otherSection->addSection(tr("ISA ROM"), passed_sysconfig->getDisplayValue(Display::Name::IsaRom)); +} + +void +VMManagerDetails::updateScreenshots(VMManagerSystem *passed_sysconfig) { // Disable screenshot navigation buttons by default ui->screenshotNext->setEnabled(false); ui->screenshotPrevious->setEnabled(false); @@ -286,24 +326,6 @@ VMManagerDetails::updateData(VMManagerSystem *passed_sysconfig) { } #endif } - - ui->systemLabel->setText(passed_sysconfig->displayName); - ui->statusLabel->setText(sysconfig->process->processId() == 0 ? - tr("Not running") : - QString("%1: PID %2").arg(tr("Running"), QString::number(sysconfig->process->processId()))); - ui->notesTextEdit->setPlainText(passed_sysconfig->notes); - ui->notesTextEdit->setEnabled(true); - - disconnect(sysconfig->process, &QProcess::stateChanged, this, &VMManagerDetails::updateProcessStatus); - connect(sysconfig->process, &QProcess::stateChanged, this, &VMManagerDetails::updateProcessStatus); - - disconnect(sysconfig, &VMManagerSystem::windowStatusChanged, this, &VMManagerDetails::updateWindowStatus); - connect(sysconfig, &VMManagerSystem::windowStatusChanged, this, &VMManagerDetails::updateWindowStatus); - - disconnect(sysconfig, &VMManagerSystem::clientProcessStatusChanged, this, &VMManagerDetails::updateProcessStatus); - connect(sysconfig, &VMManagerSystem::clientProcessStatusChanged, this, &VMManagerDetails::updateProcessStatus); - - updateProcessStatus(); } void diff --git a/src/qt/qt_vmmanager_details.hpp b/src/qt/qt_vmmanager_details.hpp index 5d3bfa8a4..2fb1a9d57 100644 --- a/src/qt/qt_vmmanager_details.hpp +++ b/src/qt/qt_vmmanager_details.hpp @@ -55,6 +55,7 @@ private: VMManagerDetailSection *networkSection; VMManagerDetailSection *inputSection; VMManagerDetailSection *portsSection; + VMManagerDetailSection *otherSection; QFileInfoList screenshots; int screenshotIndex = 0; @@ -67,6 +68,8 @@ private: QToolButton *configureButton; QToolButton *cadButton; + void updateConfig(VMManagerSystem *passed_sysconfig); + void updateScreenshots(VMManagerSystem *passed_sysconfig); static QWidget* createHorizontalLine(int leftSpacing = 25, int rightSpacing = 25); // QVBoxLayout *detailsLayout; private slots: diff --git a/src/qt/qt_vmmanager_detailsection.cpp b/src/qt/qt_vmmanager_detailsection.cpp index ce42ae281..23c940706 100644 --- a/src/qt/qt_vmmanager_detailsection.cpp +++ b/src/qt/qt_vmmanager_detailsection.cpp @@ -216,7 +216,7 @@ VMManagerDetailSection::setSections() labelKey->setFont(smaller_font); labelValue->setFont(smaller_font); - labelKey->setText(section.name + ":"); + labelKey->setText(QCoreApplication::translate("", QString(section.name + ":").toUtf8().data())); labelValue->setText(line); if(!keyAdded) { frameGridLayout->addWidget(labelKey, row, 0, Qt::AlignLeft); diff --git a/src/qt/qt_vmmanager_main.cpp b/src/qt/qt_vmmanager_main.cpp index 87649a6a1..38a3d7340 100644 --- a/src/qt/qt_vmmanager_main.cpp +++ b/src/qt/qt_vmmanager_main.cpp @@ -32,7 +32,6 @@ VMManagerMain::VMManagerMain(QWidget *parent) : QWidget(parent), ui(new Ui::VMManagerMain), selected_sysconfig(new VMManagerSystem) { ui->setupUi(this); - this->setWindowTitle("86Box VM Manager"); // Set up the main listView ui->listView->setItemDelegate(new VMManagerListViewDelegate); @@ -53,7 +52,7 @@ VMManagerMain::VMManagerMain(QWidget *parent) : if (indexAt.isValid()) { QMenu contextMenu(tr("Context Menu"), ui->listView); - QAction nameChangeAction(tr("Change display name")); + QAction nameChangeAction(tr("Change &display name...")); contextMenu.addAction(&nameChangeAction); // Use a lambda to call a function so indexAt can be passed connect(&nameChangeAction, &QAction::triggered, ui->listView, [this, indexAt] { @@ -61,7 +60,7 @@ VMManagerMain::VMManagerMain(QWidget *parent) : }); nameChangeAction.setEnabled(!selected_sysconfig->window_obscured); - QAction openSystemFolderAction(tr("Open folder")); + QAction openSystemFolderAction(tr("&Open folder...")); contextMenu.addAction(&openSystemFolderAction); connect(&openSystemFolderAction, &QAction::triggered, [indexAt] { if (const auto configDir = indexAt.data(VMManagerModel::Roles::ConfigDir).toString(); !configDir.isEmpty()) { @@ -73,7 +72,19 @@ VMManagerMain::VMManagerMain(QWidget *parent) : } }); - QAction setSystemIcon(tr("Set icon")); + QAction openPrinterFolderAction(tr("Open &printer tray...")); + contextMenu.addAction(&openPrinterFolderAction); + connect(&openPrinterFolderAction, &QAction::triggered, [indexAt] { + if (const auto printerDir = indexAt.data(VMManagerModel::Roles::ConfigDir).toString() + QString("/printer/"); !printerDir.isEmpty()) { + QDir dir(printerDir); + if (!dir.exists()) + dir.mkpath("."); + + QDesktopServices::openUrl(QUrl(QString("file:///") + dir.canonicalPath())); + } + }); + + QAction setSystemIcon(tr("Set &icon...")); contextMenu.addAction(&setSystemIcon); connect(&setSystemIcon, &QAction::triggered, [this] { IconSelectionDialog dialog(":/systemicons/"); @@ -88,7 +99,7 @@ VMManagerMain::VMManagerMain(QWidget *parent) : QAction killIcon(tr("&Kill")); contextMenu.addAction(&killIcon); connect(&killIcon, &QAction::triggered, [this, parent] { - QMessageBox msgbox(QMessageBox::Warning, tr("Warning"), tr("Killing a virtual machine can cause data loss. Only do this if 86Box.exe process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?").arg(selected_sysconfig->displayName), QMessageBox::StandardButton::Yes | QMessageBox::StandardButton::No, parent); + QMessageBox msgbox(QMessageBox::Warning, tr("Warning"), tr("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\"?").arg(selected_sysconfig->displayName), QMessageBox::StandardButton::Yes | QMessageBox::StandardButton::No, parent); msgbox.exec(); if (msgbox.result() == QMessageBox::Yes) { selected_sysconfig->process->kill(); @@ -98,7 +109,7 @@ VMManagerMain::VMManagerMain(QWidget *parent) : contextMenu.addSeparator(); - QAction showRawConfigFile(tr("Show config file")); + QAction showRawConfigFile(tr("Show &config file")); contextMenu.addAction(&showRawConfigFile); connect(&showRawConfigFile, &QAction::triggered, [this, indexAt] { if (const auto configFile = indexAt.data(VMManagerModel::Roles::ConfigFile).toString(); !configFile.isEmpty()) { @@ -123,8 +134,11 @@ VMManagerMain::VMManagerMain(QWidget *parent) : ui->listView->setCurrentIndex(first_index); } + connect(ui->listView, &QListView::doubleClicked, this, &VMManagerMain::startButtonPressed); + // Load and apply settings loadSettings(); + ui->splitter->setSizes({ui->detailsArea->width(), (ui->listView->minimumWidth() * 2)}); // Set up search bar connect(ui->searchBar, &QLineEdit::textChanged, this, &VMManagerMain::searchSystems); @@ -167,9 +181,11 @@ VMManagerMain::currentSelectionChanged(const QModelIndex ¤t, return; } + disconnect(selected_sysconfig, &VMManagerSystem::configurationChanged, this, &VMManagerMain::onConfigUpdated); const auto mapped_index = proxy_model->mapToSource(current); selected_sysconfig = vm_model->getConfigObjectForIndex(mapped_index); vm_details->updateData(selected_sysconfig); + connect(selected_sysconfig, &VMManagerSystem::configurationChanged, this, &VMManagerMain::onConfigUpdated); // Emit that the selection changed, include with the process state emit selectionChanged(current, selected_sysconfig->process->state()); @@ -182,19 +198,6 @@ VMManagerMain::settingsButtonPressed() { return; } selected_sysconfig->launchSettings(); - // If the process is already running, the system will be instructed to open its settings window. - // Otherwise the process will be launched and will need to be tracked here. - if (!selected_sysconfig->isProcessRunning()) { - connect(selected_sysconfig->process, QOverload::of(&QProcess::finished), - [=](const int exitCode, const QProcess::ExitStatus exitStatus){ - if (exitCode != 0 || exitStatus != QProcess::NormalExit) { - qInfo().nospace().noquote() << "Abnormal program termination while launching settings: exit code " << exitCode << ", exit status " << exitStatus; - return; - } - selected_sysconfig->reloadConfig(); - vm_details->updateData(selected_sysconfig); - }); - } } void @@ -308,6 +311,12 @@ VMManagerMain::currentSelectionIsValid() const return ui->listView->currentIndex().isValid() && selected_sysconfig->isValid(); } +void +VMManagerMain::onConfigUpdated(const QString &uuid) +{ + if (selected_sysconfig->uuid == uuid) + vm_details->updateData(selected_sysconfig); +} // Used from MainWindow during app exit to obtain and persist the current selection QString VMManagerMain::getCurrentSelection() const @@ -470,6 +479,12 @@ VMManagerMain::onPreferencesUpdated() } } +int +VMManagerMain::getActiveMachineCount() +{ + return vm_model->getActiveMachineCount(); +} + #if EMU_BUILD_NUM != 0 void VMManagerMain::backgroundUpdateCheckStart() const @@ -520,10 +535,21 @@ VMManagerMain::showTextFileContents(const QString &title, const QString &path) displayFile.close(); const auto textDisplayDialog = new QDialog(this); - textDisplayDialog->setFixedSize(QSize(540, 360)); + textDisplayDialog->setMinimumSize(QSize(540, 360)); textDisplayDialog->setWindowTitle(QString("%1 - %2").arg(title, fi.fileName())); const auto textEdit = new QPlainTextEdit(); + const auto monospaceFont = new QFont(); +#ifdef Q_OS_WINDOWS + monospaceFont->setFamily("Consolas"); +#elif defined(Q_OS_MACOS) + monospaceFont->setFamily("Menlo"); +#else + monospaceFont->setFamily("Monospace"); +#endif + monospaceFont->setStyleHint(QFont::Monospace); + monospaceFont->setFixedPitch(true); + textEdit->setFont(*monospaceFont); textEdit->setReadOnly(true); textEdit->setPlainText(configFileContents); const auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok); diff --git a/src/qt/qt_vmmanager_main.hpp b/src/qt/qt_vmmanager_main.hpp index fecee2009..fc21d577f 100644 --- a/src/qt/qt_vmmanager_main.hpp +++ b/src/qt/qt_vmmanager_main.hpp @@ -18,8 +18,6 @@ #ifndef QT_VMMANAGER_MAIN_H #define QT_VMMANAGER_MAIN_H -#include "qt_updatecheck.hpp" - #include #include "qt_vmmanager_model.hpp" #include "qt_vmmanager_details.hpp" @@ -29,8 +27,12 @@ extern "C" { #include <86box/86box.h> // for vmm_path +#include <86box/version.h> } +#if EMU_BUILD_NUM != 0 +# include "qt_updatecheck.hpp" +#endif QT_BEGIN_NAMESPACE namespace Ui { class VMManagerMain; } @@ -76,6 +78,8 @@ public slots: #endif void modelDataChange(); void onPreferencesUpdated(); + void onConfigUpdated(const QString &uuid); + int getActiveMachineCount(); private: Ui::VMManagerMain *ui; diff --git a/src/qt/qt_vmmanager_main.ui b/src/qt/qt_vmmanager_main.ui index c19094345..582645b9f 100644 --- a/src/qt/qt_vmmanager_main.ui +++ b/src/qt/qt_vmmanager_main.ui @@ -6,7 +6,7 @@ 0 0 - 815 + 820 472 @@ -16,9 +16,6 @@ 0 - - VMManagerMain - 0 @@ -33,83 +30,83 @@ 0 - - - - 0 - 0 - + + + Qt::Horizontal - - - 0 + + false + + + + + 0 + 0 + - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 200 - 0 - - - - - 200 - 16777215 - - - - - - - - Qt::ClickFocus - - - Search - - - true - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 125 + 0 + + + + + + + + Qt::ClickFocus + + + Search + + + true + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + diff --git a/src/qt/qt_vmmanager_mainwindow.cpp b/src/qt/qt_vmmanager_mainwindow.cpp index d3533482b..f6abc4674 100644 --- a/src/qt/qt_vmmanager_mainwindow.cpp +++ b/src/qt/qt_vmmanager_mainwindow.cpp @@ -19,11 +19,16 @@ #include "qt_vmmanager_main.hpp" #include "qt_vmmanager_preferences.hpp" #include "ui_qt_vmmanager_mainwindow.h" -#include "qt_updatecheckdialog.hpp" +#if EMU_BUILD_NUM != 0 +# include "qt_updatecheckdialog.hpp" +#endif +#include "qt_about.hpp" #include #include #include +#include +#include VMManagerMainWindow:: VMManagerMainWindow(QWidget *parent) @@ -37,15 +42,15 @@ VMManagerMainWindow(QWidget *parent) // Connect signals from the VMManagerMain widget connect(vmm, &VMManagerMain::selectionChanged, this, &VMManagerMainWindow::vmmSelectionChanged); - setWindowTitle(tr("86Box VM Manager")); + setWindowTitle(tr("%1 VM Manager").arg(EMU_NAME)); setCentralWidget(vmm); // Set up the buttons + connect(ui->actionNew_Machine, &QAction::triggered, vmm, &VMManagerMain::newMachineWizard); connect(ui->actionStartPause, &QAction::triggered, vmm, &VMManagerMain::startButtonPressed); connect(ui->actionSettings, &QAction::triggered, vmm, &VMManagerMain::settingsButtonPressed); connect(ui->actionHard_Reset, &QAction::triggered, vmm, &VMManagerMain::restartButtonPressed); connect(ui->actionForce_Shutdown, &QAction::triggered, vmm, &VMManagerMain::shutdownForceButtonPressed); - connect(ui->actionNew_Machine, &QAction::triggered, vmm, &VMManagerMain::newMachineWizard); // Set up menu actions // (Disable this if the EMU_BUILD_NUM == 0) @@ -92,6 +97,9 @@ VMManagerMainWindow(QWidget *parent) auto *completerModel = new QStringListModel(allStrings, completer); completer->setModel(completerModel); searchBar->setCompleter(completer); +#ifdef Q_OS_WINDOWS + ui->toolBar->setBackgroundRole(QPalette::Light); +#endif ui->toolBar->setVisible(false); // END REMOVE @@ -120,6 +128,8 @@ VMManagerMainWindow::vmmSelectionChanged(const QModelIndex ¤tSelection, co ui->actionStartPause->setIcon(QIcon(":/menuicons/qt/icons/pause.ico")); ui->actionStartPause->setText(tr("Pause")); ui->actionStartPause->setToolTip(tr("Pause")); + disconnect(ui->actionStartPause, &QAction::triggered, vmm, &VMManagerMain::startButtonPressed); + connect(ui->actionStartPause, &QAction::triggered, vmm, &VMManagerMain::pauseButtonPressed); ui->actionHard_Reset->setEnabled(true); ui->actionForce_Shutdown->setEnabled(true); ui->actionCtrl_Alt_Del->setEnabled(true); @@ -128,6 +138,8 @@ VMManagerMainWindow::vmmSelectionChanged(const QModelIndex ¤tSelection, co ui->actionStartPause->setIcon(QIcon(":/menuicons/qt/icons/run.ico")); ui->actionStartPause->setText(tr("Start")); ui->actionStartPause->setToolTip(tr("Start")); + disconnect(ui->actionStartPause, &QAction::triggered, vmm, &VMManagerMain::pauseButtonPressed); + connect(ui->actionStartPause, &QAction::triggered, vmm, &VMManagerMain::startButtonPressed); ui->actionHard_Reset->setEnabled(false); ui->actionForce_Shutdown->setEnabled(false); ui->actionCtrl_Alt_Del->setEnabled(false); @@ -155,6 +167,15 @@ VMManagerMainWindow::saveSettings() const void VMManagerMainWindow::closeEvent(QCloseEvent *event) { + int running = vmm->getActiveMachineCount(); + if (running > 0) { + QMessageBox warningbox(QMessageBox::Icon::Warning, tr("%1 VM Manager").arg(EMU_NAME), tr("%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?").arg(running), QMessageBox::Yes | QMessageBox::No, this); + warningbox.exec(); + if (warningbox.result() == QMessageBox::No) { + event->ignore(); + return; + } + } saveSettings(); QMainWindow::closeEvent(event); } @@ -171,19 +192,40 @@ VMManagerMainWindow::setStatusRight(const QString &text) const statusRight->setText(text); } +#if EMU_BUILD_NUM != 0 void VMManagerMainWindow::checkForUpdatesTriggered() { auto updateChannel = UpdateCheck::UpdateChannel::CI; -#ifdef RELEASE_BUILD +# ifdef RELEASE_BUILD updateChannel = UpdateCheck::UpdateChannel::Stable; -#endif - const auto updateCheck = new UpdateCheckDialog(updateChannel); +# endif + const auto updateCheck = new UpdateCheckDialog(updateChannel, this); updateCheck->exec(); } +#endif -void VMManagerMainWindow::on_actionExit_triggered() +void +VMManagerMainWindow::on_actionExit_triggered() { this->close(); } +void +VMManagerMainWindow::on_actionAbout_Qt_triggered() +{ + QApplication::aboutQt(); +} + +void +VMManagerMainWindow::on_actionAbout_86Box_triggered() +{ + const auto msgBox = new About(this); + msgBox->exec(); +} + +void +VMManagerMainWindow::on_actionDocumentation_triggered() +{ + QDesktopServices::openUrl(QUrl(EMU_DOCS_URL)); +} diff --git a/src/qt/qt_vmmanager_mainwindow.hpp b/src/qt/qt_vmmanager_mainwindow.hpp index 12ac5afb1..ca7b0043d 100644 --- a/src/qt/qt_vmmanager_mainwindow.hpp +++ b/src/qt/qt_vmmanager_mainwindow.hpp @@ -50,9 +50,14 @@ public slots: private slots: void vmmSelectionChanged(const QModelIndex ¤tSelection, QProcess::ProcessState processState) const; void preferencesTriggered(); - static void checkForUpdatesTriggered(); +#if EMU_BUILD_NUM != 0 + void checkForUpdatesTriggered(); +#endif void on_actionExit_triggered(); + void on_actionDocumentation_triggered(); + void on_actionAbout_86Box_triggered(); + void on_actionAbout_Qt_triggered(); protected: void closeEvent(QCloseEvent *event) override; diff --git a/src/qt/qt_vmmanager_mainwindow.ui b/src/qt/qt_vmmanager_mainwindow.ui index 0c8dac8bc..fa32241a4 100644 --- a/src/qt/qt_vmmanager_mainwindow.ui +++ b/src/qt/qt_vmmanager_mainwindow.ui @@ -25,30 +25,45 @@ - Tools + &Tools - File + &File + + + &Help + + + + + + + + true + toolBar false + + Qt::TopToolBarArea + 16 @@ -56,7 +71,7 @@ - Qt::ToolButtonStyle::ToolButtonIconOnly + Qt::ToolButtonIconOnly TopToolBarArea @@ -64,18 +79,14 @@ false + + - - - - Do something - - true @@ -85,7 +96,7 @@ :/menuicons/qt/icons/run.ico:/menuicons/qt/icons/run.ico - Start + &Start false @@ -112,7 +123,7 @@ :/menuicons/qt/icons/acpi_shutdown.ico:/menuicons/qt/icons/acpi_shutdown.ico - Force shutdown + &Force shutdown Force shutdown @@ -157,7 +168,7 @@ &Settings... - QAction::MenuRole::NoRole + QAction::NoRole false @@ -169,21 +180,21 @@ :/settings/qt/icons/86Box-yellow.ico:/settings/qt/icons/86Box-yellow.ico - New Machine + &New machine... - New Machine + New machine... - Preferences + &Preferences... - Preferences + Preferences... - QAction::MenuRole::PreferencesRole + QAction::PreferencesRole @@ -195,7 +206,7 @@ :/menuicons/qt/icons/run.ico:/menuicons/qt/icons/run.ico - Start + &Start false @@ -203,18 +214,39 @@ - Check for updates + &Check for updates... - - - - &Exit + E&xit - QAction::MenuRole::QuitRole + QAction::QuitRole + + + + + &Documentation... + + + + + &About 86Box... + + + QAction::AboutRole + + + + + About &Qt + + + false + + + QAction::AboutQtRole diff --git a/src/qt/qt_vmmanager_model.cpp b/src/qt/qt_vmmanager_model.cpp index 848970f80..76fcbffd6 100644 --- a/src/qt/qt_vmmanager_model.cpp +++ b/src/qt/qt_vmmanager_model.cpp @@ -113,6 +113,12 @@ VMManagerModel::reload(QWidget* parent) // TODO: Remove missing configs } +void +VMManagerModel::refreshConfigs() { + for ( const auto& each_config : machines) + each_config->reloadConfig(); +} + QModelIndex VMManagerModel::getIndexForConfigFile(const QFileInfo& config_file) { @@ -160,4 +166,15 @@ VMManagerModel::getProcessStats() } } return stats; +} + +int +VMManagerModel::getActiveMachineCount() +{ + int running = 0; + for (const auto& system: machines) { + if (system->getProcessStatus() != VMManagerSystem::ProcessStatus::Stopped) + running++; + } + return running; } \ No newline at end of file diff --git a/src/qt/qt_vmmanager_model.hpp b/src/qt/qt_vmmanager_model.hpp index bc13cc16f..9fed1ca8c 100644 --- a/src/qt/qt_vmmanager_model.hpp +++ b/src/qt/qt_vmmanager_model.hpp @@ -57,6 +57,8 @@ public: void reload(QWidget* parent = nullptr); void updateDisplayName(const QModelIndex &index, const QString &newDisplayName); QHash getProcessStats(); + int getActiveMachineCount(); + void refreshConfigs(); signals: void systemDataChanged(); diff --git a/src/qt/qt_vmmanager_protocol.cpp b/src/qt/qt_vmmanager_protocol.cpp index ca862a55a..bc1805411 100644 --- a/src/qt/qt_vmmanager_protocol.cpp +++ b/src/qt/qt_vmmanager_protocol.cpp @@ -91,6 +91,8 @@ VMManagerProtocol::getClientMessageType(const QJsonObject &json_document) return VMManagerProtocol::ClientMessage::WindowUnblocked; } else if (message_type == "RunningStateChanged") { return VMManagerProtocol::ClientMessage::RunningStateChanged; + } else if (message_type == "ConfigurationChanged") { + return VMManagerProtocol::ClientMessage::ConfigurationChanged; } else if (message_type == "WinIdMessage") { return VMManagerProtocol::ClientMessage::WinIdMessage; } diff --git a/src/qt/qt_vmmanager_protocol.hpp b/src/qt/qt_vmmanager_protocol.hpp index f50c37ae3..90f7e4eeb 100644 --- a/src/qt/qt_vmmanager_protocol.hpp +++ b/src/qt/qt_vmmanager_protocol.hpp @@ -54,6 +54,7 @@ public: WindowBlocked, WindowUnblocked, RunningStateChanged, + ConfigurationChanged, WinIdMessage, UnknownMessage, }; diff --git a/src/qt/qt_vmmanager_serversocket.cpp b/src/qt/qt_vmmanager_serversocket.cpp index 3630df430..1364ff794 100644 --- a/src/qt/qt_vmmanager_serversocket.cpp +++ b/src/qt/qt_vmmanager_serversocket.cpp @@ -185,6 +185,10 @@ VMManagerServerSocket::jsonReceived(const QJsonObject &json) } } break; + case VMManagerProtocol::ClientMessage::ConfigurationChanged: + qDebug("Configuration change received from client"); + emit configurationChanged(); + break; default: qDebug("Unknown client message type received:"); qDebug() << json; diff --git a/src/qt/qt_vmmanager_serversocket.hpp b/src/qt/qt_vmmanager_serversocket.hpp index 01c719813..30ad02b2c 100644 --- a/src/qt/qt_vmmanager_serversocket.hpp +++ b/src/qt/qt_vmmanager_serversocket.hpp @@ -75,6 +75,7 @@ signals: void dataReceived(); void windowStatusChanged(int status); void runningStatusChanged(VMManagerProtocol::RunningState state); + void configurationChanged(); void winIdReceived(WId id); diff --git a/src/qt/qt_vmmanager_system.cpp b/src/qt/qt_vmmanager_system.cpp index 225b302df..f01038ea4 100644 --- a/src/qt/qt_vmmanager_system.cpp +++ b/src/qt/qt_vmmanager_system.cpp @@ -28,6 +28,7 @@ #include #include #include +#include "qt_util.hpp" #include "qt_vmmanager_system.hpp" // #include "qt_vmmanager_details_section.hpp" #include "qt_vmmanager_detailsection.hpp" @@ -49,11 +50,22 @@ extern "C" { #include <86box/thread.h> // required for network.h #include <86box/timer.h> // required for network.h and fdd.h #include <86box/cdrom.h> +#include <86box/cdrom_interface.h> #include <86box/scsi.h> +#include <86box/scsi_device.h> // required for rdisk.h and mo.h +#include <86box/rdisk.h> +#include <86box/mo.h> #include <86box/fdd.h> +#include <86box/fdc_ext.h> +#include <86box/hdc.h> #include <86box/gameport.h> +#include <86box/isartc.h> +#include <86box/isamem.h> +#include <86box/isarom.h> +#include <86box/lpt.h> #include <86box/midi.h> #include <86box/network.h> +#include <86box/keyboard.h> #include <86box/mouse.h> } @@ -67,16 +79,10 @@ VMManagerSystem::VMManagerSystem(const QString &sysconfig_file) { // that contains the 86box configuration file config_name = config_file.dir().dirName(); // The full path of the directory that contains the 86box configuration file - config_dir = shortened_dir = config_file.dir().path(); + config_dir = shortened_dir = config_file.dir().absolutePath(); process_status = ProcessStatus::Stopped; - // Main 86Box uses usr_path for UUID which includes the trailing slash. - // Make sure to append the slash here so the UUIDs will match - auto uuid_path = config_dir; - if (!uuid_path.endsWith("/")) { - uuid_path.append("/"); - } // In the configuration file the UUID is used as a unique value - uuid = QUuid::createUuidV5(QUuid{}, uuid_path).toString(QUuid::WithoutBraces); + uuid = util::generateUuid(sysconfig_file); // That unique value is used to map the information to each individual system. config_settings = new VMManagerConfig(VMManagerConfig::ConfigType::System, uuid); @@ -126,6 +132,7 @@ VMManagerSystem::scanForConfigs(QWidget* parent, const QString &searchPath) progDialog.setMinimum(0); progDialog.setMaximum(0); progDialog.setWindowFlags(progDialog.windowFlags() & ~Qt::WindowCloseButtonHint); + progDialog.setFixedSize(progDialog.sizeHint()); QElapsedTimer scanTimer; scanTimer.start(); QVector system_configs; @@ -407,16 +414,33 @@ VMManagerSystem::launchMainProcess() { return; } } + // If the system is already running, bring it to front + if (process->processId() != 0) { +#ifdef Q_OS_WINDOWS + if (this->id) { + SetForegroundWindow((HWND)this->id); + } +#endif + return; + } setProcessEnvVars(); QString program = main_binary.filePath(); QStringList args; - args << "-P" << config_dir; + args << "--vmpath" << config_dir; args << "--vmname" << displayName; process->setProgram(program); process->setArguments(args); qDebug() << Q_FUNC_INFO << " Full Command:" << process->program() << " " << process->arguments(); process->start(); updateTimestamp(); + + connect(process, QOverload::of(&QProcess::finished), + [=](const int exitCode, const QProcess::ExitStatus exitStatus){ + if (exitCode != 0 || exitStatus != QProcess::NormalExit) { + qInfo().nospace().noquote() << "Abnormal program termination while launching main process: exit code " << exitCode << ", exit status " << exitStatus; + return; + } + }); } void @@ -431,6 +455,15 @@ VMManagerSystem::launchSettings() { return; } + // start the server first to get the socket name + if (!serverIsRunning) { + if(!startServer()) { + // FIXME: Better error handling + qInfo("Failed to start VM Manager server"); + return; + } + } + // If the system is already running, instruct it to show settings if (process->processId() != 0) { #ifdef Q_OS_WINDOWS @@ -448,11 +481,21 @@ VMManagerSystem::launchSettings() { QString program = main_binary.filePath(); QStringList open_command_args; QStringList args; - args << "-P" << config_dir << "-S"; + args << "--vmpath" << config_dir << "--settings"; process->setProgram(program); process->setArguments(args); qDebug() << Q_FUNC_INFO << " Full Command:" << process->program() << " " << process->arguments(); process->start(); + + connect(process, QOverload::of(&QProcess::finished), + [=](const int exitCode, const QProcess::ExitStatus exitStatus){ + if (exitCode != 0 || exitStatus != QProcess::NormalExit) { + qInfo().nospace().noquote() << "Abnormal program termination while launching settings: exit code " << exitCode << ", exit status " << exitStatus; + return; + } + + configurationChangeReceived(); + }); } void @@ -489,8 +532,10 @@ VMManagerSystem::setupVars() { auto network_config = getCategory("Network"); auto input_config = getCategory("Input devices"); auto floppy_cdrom_config = getCategory("Floppy and CD-ROM drives"); - auto scsi_config = getCategory("Storage controllers"); + auto rdisk_mo_config = getCategory("Other removable devices"); + auto storage_config = getCategory("Storage controllers"); auto ports_config = getCategory("Ports (COM & LPT)"); + auto other_config = getCategory("Other peripherals"); // auto general_config = getCategory("General"); // auto config_uuid = QString("Not set"); // if(!general_config["uuid"].isEmpty()) { @@ -513,17 +558,39 @@ VMManagerSystem::setupVars() { } display_table[Display::Name::Machine] = machine_name; - // CPU: Combine name with speed - auto cpu_name = QString(); + // CPU: Combine name with speed and FPU + QString cpu_name = "Unknown"; while (cpu_families[i].package != 0) { if (cpu_families[i].internal_name == machine_config["cpu_family"]) { + int j = 0; cpu_name = QString("%1 %2").arg(cpu_families[i].manufacturer, cpu_families[i].name); + while (cpu_families[i].cpus[j].cpu_type != 0) { + if (cpu_families[i].cpus[j].rspeed == machine_config["cpu_speed"].toUInt()) { + auto cpu_speed = QString(cpu_families[i].cpus[j].name).split("/").at(0).split(" (").at(0); + cpu_name.append(cpu_speed.prepend(" / ")); + cpu_name.append(QCoreApplication::translate("", "MHz").prepend(' ')); + if (machine_config.contains("fpu_type") && (machine_config["fpu_type"] != QString("none")) && (machine_config["fpu_type"] != QString("internal"))) { + int k = 0; + while (cpu_families[i].cpus[j].fpus[k].internal_name != nullptr) { + if (QString(cpu_families[i].cpus[j].fpus[k].internal_name) == machine_config["fpu_type"]) { + cpu_name.append(QString(cpu_families[i].cpus[j].fpus[k].name).prepend(", ")); + cpu_name.append(QCoreApplication::translate("", "FPU").prepend(' ')); + break; + } + k++; + } + } + break; + } + j++; + } + break; } i++; } - int speed_display = machine_config["cpu_speed"].toInt() / 1000000; - cpu_name.append(QString::number(speed_display).prepend(" / ")); - cpu_name.append(QCoreApplication::translate("", "MHz").prepend(' ')); +// int speed_display = machine_config["cpu_speed"].toInt() / 1000000; +// cpu_name.append(QString::number(speed_display).prepend(" / ")); +// cpu_name.append(QCoreApplication::translate("", "MHz").prepend(' ')); display_table[Display::Name::CPU] = cpu_name; // Memory @@ -537,10 +604,40 @@ VMManagerSystem::setupVars() { int video_int = video_get_video_from_internal_name(video_config["gfxcard"].toUtf8().data()); const device_t* video_dev = video_card_getdevice(video_int); display_table[Display::Name::Video] = DeviceConfig::DeviceName(video_dev, video_get_internal_name(video_int), 1); - if (!video_config["voodoo"].isEmpty()) { - // FIXME: Come back to this later to add more for secondary video -// display_table[Display::Name::Video].append(" (with voodoo)"); - display_table[Display::Name::Voodoo] = "Voodoo enabled"; + + // Secondary video + if (video_config.contains("gfxcard_2")) { + int video2_int = video_get_video_from_internal_name(video_config["gfxcard_2"].toUtf8().data()); + const device_t* video2_dev = video_card_getdevice(video2_int); + display_table[Display::Name::Video].append(DeviceConfig::DeviceName(video2_dev, video_get_internal_name(video2_int), 1).prepend(VMManagerDetailSection::sectionSeparator)); + } + + // Add-on video that's not Voodoo + if (video_config.contains("8514a") && (video_config["8514a"] != 0)) + display_table[Display::Name::Video].append(tr("IBM 8514/A Graphics").prepend(VMManagerDetailSection::sectionSeparator)); + if (video_config.contains("xga") && (video_config["xga"] != 0)) + display_table[Display::Name::Video].append(tr("XGA Graphics").prepend(VMManagerDetailSection::sectionSeparator)); + if (video_config.contains("da2") && (video_config["da2"] != 0)) + display_table[Display::Name::Video].append(tr("IBM PS/55 Display Adapter Graphics").prepend(VMManagerDetailSection::sectionSeparator)); + + // Voodoo + if (video_config.contains("voodoo") && (video_config["voodoo"] != 0)) { + auto voodoo_config = getCategory(DeviceConfig::DeviceName(&voodoo_device, "voodoo", 0)); + int voodoo_type = voodoo_config["type"].toInt(); + QString voodoo_name; + switch (voodoo_type) { + case 0: + default: + voodoo_name = tr("3Dfx Voodoo Graphics"); + break; + case 1: + voodoo_name = tr("Obsidian SB50 + Amethyst (2 TMUs)"); + break; + case 2: + voodoo_name = tr("3Dfx Voodoo 2"); + break; + } + display_table[Display::Name::Voodoo] = voodoo_name; } // Drives @@ -585,25 +682,31 @@ VMManagerSystem::setupVars() { } int diskSizeRaw = (cylinders.toInt() * heads.toInt() * sectors.toInt()) >> 11; QString diskSizeFinal; - QString unit = "MiB"; + QString unit = tr("MiB"); if(diskSizeRaw > 1000) { - unit = "GiB"; + unit = tr("GiB"); diskSizeFinal = QString::number(diskSizeRaw * 1.0 / 1000, 'f', 1); } else { diskSizeFinal = QString::number(diskSizeRaw); } // Only prefix each disk when there are multiple disks - QString diskNumberDisplay = disks.count() > 1 ? QString("Disk %1: ").arg(disk_number) : ""; + QString diskNumberDisplay = disks.count() > 1 ? tr("Disk %1: ").arg(disk_number) : ""; new_disk_display.append(QString("%1%2 %3 (%4)").arg(diskNumberDisplay, diskSizeFinal, unit, bus_type.toUpper())); } if(new_disk_display.isEmpty()) { - new_disk_display = "No disks"; + new_disk_display = tr("No disks"); } display_table[Display::Name::Disks] = new_disk_display; // Floppy & CD-ROM QStringList floppyDevices; QStringList cdromDevices; + // Special case: first two 5.25" 360k FDDs which don't get saved to the .cfg + for (int i = 0; i < 2; i++) { + if (!floppy_cdrom_config.contains(QString("fdd_0%1_type").arg(i + 1))) + floppyDevices.append(QString(fdd_getname(fdd_get_from_internal_name((char *) "525_2dd")))); + } + static auto floppy_match = QRegularExpression("fdd_\\d\\d_type", QRegularExpression::CaseInsensitiveOption); static auto cdrom_match = QRegularExpression("cdrom_\\d\\d_type", QRegularExpression::CaseInsensitiveOption); for(const auto& key: floppy_cdrom_config.keys()) { @@ -645,16 +748,55 @@ VMManagerSystem::setupVars() { display_table[Display::Name::Floppy] = floppyDevices.join(VMManagerDetailSection::sectionSeparator); display_table[Display::Name::CD] = cdromDevices.join(VMManagerDetailSection::sectionSeparator); + // Removable disks & MO + QStringList rdiskDevices; + QStringList moDevices; + static auto rdisk_match = QRegularExpression("rdisk_\\d\\d_parameters", QRegularExpression::CaseInsensitiveOption); + static auto zip_match = QRegularExpression("zip_\\d\\d_parameters", QRegularExpression::CaseInsensitiveOption); // Legacy ZIP drive entries + static auto mo_match = QRegularExpression("mo_\\d\\d_parameters", QRegularExpression::CaseInsensitiveOption); + for(const auto& key: rdisk_mo_config.keys()) { + if(key.contains(rdisk_match) || key.contains(zip_match)) { + auto device_number = key.split("_").at(1); + auto rdisk_parameters = QString(rdisk_mo_config[key]); + auto rdisk_type = rdisk_parameters.split(",").at(0).toInt(); + if (key.contains(zip_match)) + rdisk_type++; + auto rdisk_bus = rdisk_parameters.split(",").at(1).trimmed().toUpper(); + + if((rdisk_type >= 0) && (rdisk_type < KNOWN_RDISK_DRIVE_TYPES)) { + if(!rdisk_bus.isEmpty()) + rdisk_bus = QString(" (%1)").arg(rdisk_bus); + rdiskDevices.append(QString("%1 %2%3").arg(rdisk_drive_types[rdisk_type].vendor, rdisk_drive_types[rdisk_type].model, rdisk_bus)); + } + } + if(key.contains(mo_match)) { + auto device_number = key.split("_").at(1); + auto mo_parameters = QString(rdisk_mo_config[key]); + auto mo_type = mo_parameters.split(",").at(0).toInt(); + auto mo_bus = mo_parameters.split(",").at(1).trimmed().toUpper(); + + if((mo_type >= 0) && (mo_type < KNOWN_MO_DRIVE_TYPES)) { + if(!mo_bus.isEmpty()) + mo_bus = QString(" (%1)").arg(mo_bus); + moDevices.append(QString("%1 %2%3").arg(mo_drive_types[mo_type].vendor, mo_drive_types[mo_type].model, mo_bus)); + } + } + } + + display_table[Display::Name::RDisk] = rdiskDevices.join(VMManagerDetailSection::sectionSeparator); + display_table[Display::Name::MO] = moDevices.join(VMManagerDetailSection::sectionSeparator); + + // SCSI controllers QStringList scsiControllers; static auto scsi_match = QRegularExpression("scsicard_\\d", QRegularExpression::CaseInsensitiveOption); - for(const auto& key: scsi_config.keys()) { + for(const auto& key: storage_config.keys()) { if(key.contains(scsi_match)) { auto device_number = key.split("_").at(1); - auto scsi_internal_name = QString(scsi_config[key]); + auto scsi_internal_name = QString(storage_config[key]); auto scsi_id = scsi_card_get_from_internal_name(scsi_internal_name.toUtf8().data()); auto scsi_device = scsi_card_getdevice(scsi_id); - auto scsi_name = QString(scsi_device->name); + auto scsi_name = DeviceConfig::DeviceName(scsi_device, scsi_card_get_internal_name(scsi_id), 1); if(!scsi_name.isEmpty()) { scsiControllers.append(scsi_name); } @@ -662,14 +804,94 @@ VMManagerSystem::setupVars() { } display_table[Display::Name::SCSIController] = scsiControllers.join(VMManagerDetailSection::sectionSeparator); + // Hard and floppy disk controllers + QStringList storageControllers; + static auto fdc_match = QRegularExpression("fdc(_\\d)?", QRegularExpression::CaseInsensitiveOption); // futureproofing + static auto hdc_match = QRegularExpression("hdc(_\\d)?", QRegularExpression::CaseInsensitiveOption); + for(const auto& key: storage_config.keys()) { + if(key.contains(fdc_match)) { + QString device_number; + if (!key.contains('_')) + device_number = "1"; + else // futureproofing + device_number = key.split("_").at(1); + auto fdc_internal_name = QString(storage_config[key]); + if (!fdc_internal_name.isEmpty() && (fdc_internal_name != "none") && (fdc_internal_name != "internal")) { + auto fdc_id = fdc_card_get_from_internal_name(fdc_internal_name.toUtf8().data()); + auto fdc_device = fdc_card_getdevice(fdc_id); + auto fdc_name = DeviceConfig::DeviceName(fdc_device, fdc_card_get_internal_name(fdc_id), 1); + if(!fdc_name.isEmpty()) { + storageControllers.append(fdc_name); + } + } + } + if(key.contains(hdc_match)) { + QString device_number; + if (!key.contains('_')) // legacy hdc entry + device_number = "1"; + else + device_number = key.split("_").at(1); + auto hdc_internal_name = QString(storage_config[key]); + if (!hdc_internal_name.isEmpty() && (hdc_internal_name != "none") && (hdc_internal_name != "internal")) { + auto hdc_id = hdc_get_from_internal_name(hdc_internal_name.toUtf8().data()); + auto hdc_device = hdc_get_device(hdc_id); + auto hdc_name = DeviceConfig::DeviceName(hdc_device, hdc_get_internal_name(hdc_id), 1); + if(!hdc_name.isEmpty()) { + storageControllers.append(hdc_name); + } + } + } + } + + // CD-ROM controller + if (storage_config.contains("cdrom_interface")) { + auto cdrom_intf_internal_name = storage_config["cdrom_interface"]; + if (!cdrom_intf_internal_name.isEmpty() && (cdrom_intf_internal_name != "none") && (cdrom_intf_internal_name != "internal")) { + auto cdrom_intf_dev = cdrom_interface_get_from_internal_name(cdrom_intf_internal_name.toUtf8().data()); + auto cdrom_intf_dev_name = DeviceConfig::DeviceName(cdrom_interface_get_device(cdrom_intf_dev), cdrom_interface_get_internal_name(cdrom_intf_dev), 1); + storageControllers.append(cdrom_intf_dev_name); + } + } + + // Legacy tertiary/quaternary IDE + QString ide_ter_internal_name = "ide_ter"; + QString ide_qua_internal_name = "ide_qua"; + if (storage_config.contains(ide_ter_internal_name) && (storage_config[ide_ter_internal_name].toInt() != 0)) + storageControllers.append(DeviceConfig::DeviceName(hdc_get_device(hdc_get_from_internal_name(ide_ter_internal_name.toUtf8().data())), ide_ter_internal_name.toUtf8().constData(), 1)); + if (storage_config.contains(ide_qua_internal_name) && (storage_config[ide_qua_internal_name].toInt() != 0)) + storageControllers.append(DeviceConfig::DeviceName(hdc_get_device(hdc_get_from_internal_name(ide_qua_internal_name.toUtf8().data())), ide_qua_internal_name.toUtf8().constData(), 1)); + + display_table[Display::Name::StorageController] = storageControllers.join(VMManagerDetailSection::sectionSeparator); + // Audio - int sound_int = sound_card_get_from_internal_name(audio_config["sndcard"].toUtf8().data()); - const device_t* audio_dev = sound_card_getdevice(sound_int); - display_table[Display::Name::Audio] = DeviceConfig::DeviceName(audio_dev, sound_card_get_internal_name(sound_int), 1); + QStringList sndCards; + static auto sndcard_match = QRegularExpression("sndcard\\d?", QRegularExpression::CaseInsensitiveOption); + for(const auto& key: audio_config.keys()) { + if(key.contains(sndcard_match)) { + auto device_number = key.right(1); + if(device_number == "d") // card #1 has no number + device_number == "1"; + auto audio_internal_name = QString(audio_config[key]); + auto audio_id = sound_card_get_from_internal_name(audio_internal_name.toUtf8().data()); + auto audio_device = sound_card_getdevice(audio_id); + auto audio_name = DeviceConfig::DeviceName(audio_device, sound_card_get_internal_name(audio_id), 1); + if(!audio_name.isEmpty()) { + sndCards.append(audio_name); + } + } + } + if(audio_config.contains("mpu401_standalone")) { + sndCards.append(tr("Standalone MPU-401")); + } + if(sndCards.isEmpty()) { + sndCards.append(tr("None")); + } + display_table[Display::Name::Audio] = sndCards.join(VMManagerDetailSection::sectionSeparator); // MIDI QString midiOutDev; - if(auto midi_out_device = QString(audio_config["midi_device"]); !midi_out_device.isEmpty()) { + if (audio_config.contains("midi_device")) { + auto midi_out_device = QString(audio_config["midi_device"]); auto midi_device_int = midi_out_device_get_from_internal_name(midi_out_device.toUtf8().data()); auto midi_out = midi_out_device_getdevice(midi_device_int); if(auto midiDevName = QString(midi_out->name); !midiDevName.isEmpty()) { @@ -683,7 +905,7 @@ VMManagerSystem::setupVars() { // midi_in_device (input) // Network - QString nicList; + QStringList nicList; static auto nic_match = QRegularExpression("net_\\d\\d_card", QRegularExpression::CaseInsensitiveOption); for(const auto& key: network_config.keys()) { if(key.contains(nic_match)) { @@ -691,14 +913,16 @@ VMManagerSystem::setupVars() { auto nic_internal_name = QString(network_config[key]); auto nic_id = network_card_get_from_internal_name(nic_internal_name.toUtf8().data()); auto nic = network_card_getdevice(nic_id); - auto nic_name = QString(nic->name); - // Add separator for each subsequent value, skipping the first - if(!nicList.isEmpty()) { - nicList.append(QString("%1").arg(VMManagerDetailSection::sectionSeparator)); - } + auto nic_name = DeviceConfig::DeviceName(nic, network_card_get_internal_name(nic_id), 1); auto net_type_key = QString("net_%1_net_type").arg(device_number); auto net_type = network_config[net_type_key]; if (!net_type.isEmpty()) { + if (net_type == "slirp") + net_type = "SLiRP"; + else if (net_type == "pcap") + net_type = "PCap"; + else + net_type = net_type.toUpper(); nicList.append(nic_name + " (" + net_type + ")"); } else { nicList.append(nic_name); @@ -707,21 +931,30 @@ VMManagerSystem::setupVars() { } } if(nicList.isEmpty()) { - nicList = "None"; + nicList.append(tr("None")); + } + display_table[Display::Name::NIC] = nicList.join(VMManagerDetailSection::sectionSeparator); + + // Input (Keyboard) + if (input_config.contains("keyboard_type")) { + auto keyboard_internal_name = input_config["keyboard_type"]; + auto keyboard_dev = keyboard_get_from_internal_name(keyboard_internal_name.toUtf8().data()); + auto keyboard_dev_name = DeviceConfig::DeviceName(keyboard_get_device(keyboard_dev), keyboard_get_internal_name(keyboard_dev), 0); + display_table[Display::Name::Keyboard] = keyboard_dev_name; } - display_table[Display::Name::NIC] = nicList; // Input (Mouse) auto mouse_internal_name = input_config["mouse_type"]; auto mouse_dev = mouse_get_from_internal_name(mouse_internal_name.toUtf8().data()); - auto mouse_dev_name = mouse_get_name(mouse_dev); + auto mouse_dev_name = DeviceConfig::DeviceName(mouse_get_device(mouse_dev), mouse_get_internal_name(mouse_dev), 0); display_table[Display::Name::Mouse] = mouse_dev_name; // Input (joystick) QString joystickDevice; - if(auto joystick_internal = QString(input_config["joystick_type"]); !joystick_internal.isEmpty()) { + if(input_config.contains("joystick_type")) { + auto joystick_internal = QString(input_config["joystick_type"]); auto joystick_dev = joystick_get_from_internal_name(joystick_internal.toUtf8().data()); - if (auto joystickName = QString(joystick_get_name(joystick_dev)); !joystickName.isEmpty()) { + if (auto joystickName = tr(joystick_get_name(joystick_dev)); !joystickName.isEmpty()) { joystickDevice = joystickName; } } @@ -769,16 +1002,67 @@ VMManagerSystem::setupVars() { break; } portIndex = 0; + bool hasLptDevices = false; while (true) { - if (lpt_enabled[portIndex]) - lptFinal.append(QString("LPT%1").arg(portIndex + 1)); + if (lpt_enabled[portIndex]) { + auto lpt_device_key = QString("lpt%1_device").arg(portIndex + 1); + QString lpt_device_name = ""; + if (ports_config.contains(lpt_device_key)) { + auto lpt_internal_name = QString(ports_config[lpt_device_key]); + auto lpt_id = lpt_device_get_from_internal_name(lpt_internal_name.toUtf8().data()); + lpt_device_name = " (" + tr(lpt_device_get_name(lpt_id)) + ")"; + hasLptDevices = true; + } + lptFinal.append(QString("LPT%1%2").arg(portIndex + 1).arg(lpt_device_name)); + } ++portIndex; if (portIndex == PARALLEL_MAX) break; } - display_table[Display::Name::Serial] = serialFinal.empty() ? tr("None") : serialFinal.join(", "); - display_table[Display::Name::Parallel] = lptFinal.empty() ? tr("None") : lptFinal.join(", "); + display_table[Display::Name::Serial] = (serialFinal.empty() ? tr("None") : serialFinal.join(", ")); + display_table[Display::Name::Parallel] = (lptFinal.empty() ? tr("None") : lptFinal.join((hasLptDevices ? VMManagerDetailSection::sectionSeparator : ", "))); + // ISA RTC + if (other_config.contains("isartc_type")) { + auto isartc_internal_name = other_config["isartc_type"]; + auto isartc_dev = isartc_get_from_internal_name(isartc_internal_name.toUtf8().data()); + auto isartc_dev_name = DeviceConfig::DeviceName(isartc_get_device(isartc_dev), isartc_get_internal_name(isartc_dev), 0); + display_table[Display::Name::IsaRtc] = isartc_dev_name; + } + + // ISA RAM + QStringList IsaMemCards; + static auto isamem_match = QRegularExpression("isamem\\d_type", QRegularExpression::CaseInsensitiveOption); + for(const auto& key: other_config.keys()) { + if(key.contains(isamem_match)) { + auto device_number = QString(key.split("_").at(0).right(1).toInt() + 1); + auto isamem_internal_name = QString(other_config[key]); + auto isamem_id = isamem_get_from_internal_name(isamem_internal_name.toUtf8().data()); + auto isamem_device = isamem_get_device(isamem_id); + auto isamem_name = DeviceConfig::DeviceName(isamem_device, isamem_get_internal_name(isamem_id), 0); + if(!isamem_name.isEmpty()) { + IsaMemCards.append(isamem_name); + } + } + } + display_table[Display::Name::IsaMem] = IsaMemCards.join(VMManagerDetailSection::sectionSeparator); + + // ISA ROM + QStringList IsaRomCards; + static auto isarom_match = QRegularExpression("isarom\\d_type", QRegularExpression::CaseInsensitiveOption); + for(const auto& key: other_config.keys()) { + if(key.contains(isarom_match)) { + auto device_number = QString(key.split("_").at(0).right(1).toInt() + 1); + auto isarom_internal_name = QString(other_config[key]); + auto isarom_id = isarom_get_from_internal_name(isarom_internal_name.toUtf8().data()); + auto isarom_device = isarom_get_device(isarom_id); + auto isarom_name = DeviceConfig::DeviceName(isarom_device, isarom_get_internal_name(isarom_id), 0); + if(!isarom_name.isEmpty()) { + IsaRomCards.append(isarom_name); + } + } + } + display_table[Display::Name::IsaRom] = IsaRomCards.join(VMManagerDetailSection::sectionSeparator); } bool @@ -788,6 +1072,7 @@ VMManagerSystem::startServer() { connect(socket_server, &VMManagerServerSocket::dataReceived, this, &VMManagerSystem::dataReceived); connect(socket_server, &VMManagerServerSocket::windowStatusChanged, this, &VMManagerSystem::windowStatusChangeReceived); connect(socket_server, &VMManagerServerSocket::runningStatusChanged, this, &VMManagerSystem::runningStatusChangeReceived); + connect(socket_server, &VMManagerServerSocket::configurationChanged, this, &VMManagerSystem::configurationChangeReceived); connect(socket_server, &VMManagerServerSocket::winIdReceived, this, [this] (WId id) { this->id = id; }); return true; } else { @@ -926,6 +1211,12 @@ VMManagerSystem::runningStatusChangeReceived(VMManagerProtocol::RunningState sta processStatusChanged(); } void +VMManagerSystem::configurationChangeReceived() +{ + reloadConfig(); + emit configurationChanged(this->uuid); +} +void VMManagerSystem::reloadConfig() { loadSettings(); diff --git a/src/qt/qt_vmmanager_system.hpp b/src/qt/qt_vmmanager_system.hpp index a73b31886..27b9fda57 100644 --- a/src/qt/qt_vmmanager_system.hpp +++ b/src/qt/qt_vmmanager_system.hpp @@ -46,7 +46,10 @@ enum class Name { Disks, Floppy, CD, + RDisk, + MO, SCSIController, + StorageController, MidiOut, Joystick, Serial, @@ -54,7 +57,11 @@ enum class Name { Audio, Voodoo, NIC, + Keyboard, Mouse, + IsaRtc, + IsaMem, + IsaRom, Unknown }; Q_ENUM_NS(Name) @@ -148,6 +155,7 @@ signals: void windowStatusChanged(); void itemDataChanged(); void clientProcessStatusChanged(); + void configurationChanged(const QString &uuid); private: void loadSettings(); @@ -188,6 +196,7 @@ private: void dataReceived(); void windowStatusChangeReceived(int status); void runningStatusChangeReceived(VMManagerProtocol::RunningState state); + void configurationChangeReceived(); void processStatusChanged(); void statusRefresh(); }; diff --git a/src/qt/win_cdrom_ioctl.c b/src/qt/win_cdrom_ioctl.c index ff72e58fe..cd558c2ec 100644 --- a/src/qt/win_cdrom_ioctl.c +++ b/src/qt/win_cdrom_ioctl.c @@ -315,6 +315,7 @@ ioctl_get_track_info(const void *local, const uint32_t track, const raw_track_info_t *rti = (const raw_track_info_t *) ioctl->cur_rti; int ret = 1; int trk = -1; + int next = -1; if ((track >= 1) && (track < 99)) for (int i = 0; i < ioctl->blocks_num; i++) @@ -323,13 +324,35 @@ ioctl_get_track_info(const void *local, const uint32_t track, break; } + if ((track >= 1) && (track < 98)) + for (int i = 0; i < ioctl->blocks_num; i++) + if ((rti[i].point == (track + 1)) && (rti[i].session == rti[trk].session)) { + next = i; + break; + } + + if ((track >= 1) && (track < 99) && (trk != -1) && (next == -1)) + for (int i = 0; i < ioctl->blocks_num; i++) + if ((rti[i].point == 0xa2) && (rti[i].session == rti[trk].session)) { + next = i; + break; + } + if ((track == 0xaa) || (trk == -1)) { ioctl_log(ioctl->log, "ioctl_get_track_info(%02i)\n", track); ret = 0; } else { - ti->m = rti[trk].pm; - ti->s = rti[trk].ps; - ti->f = rti[trk].pf; + if (end) { + if (next != -1) { + ti->m = rti[next].pm; + ti->s = rti[next].ps; + ti->f = rti[next].pf; + } + } else { + ti->m = rti[trk].pm; + ti->s = rti[trk].ps; + ti->f = rti[trk].pf; + } ti->number = rti[trk].point; ti->attr = rti[trk].adr_ctl; diff --git a/src/qt_resources.qrc b/src/qt_resources.qrc index f0ea8d945..01bbc866a 100644 --- a/src/qt_resources.qrc +++ b/src/qt_resources.qrc @@ -1,6 +1,5 @@ - qt/icons/browse.ico qt/icons/cartridge.ico qt/icons/cartridge_image.ico qt/icons/cassette_image.ico @@ -13,8 +12,6 @@ qt/icons/cdrom_folder.ico qt/icons/cdrom_host.ico qt/icons/display.ico - qt/icons/eject.ico - qt/icons/export.ico qt/icons/fast_forward.ico qt/icons/floppy_35.ico qt/icons/floppy_35_image.ico @@ -29,10 +26,12 @@ qt/icons/mo_image.ico qt/icons/mo_disabled.ico qt/icons/network.ico - qt/icons/new.ico qt/icons/other_peripherals.ico qt/icons/other_removable_devices.ico qt/icons/ports.ico + qt/icons/rdisk.ico + qt/icons/rdisk_image.ico + qt/icons/rdisk_disabled.ico qt/icons/record.ico qt/icons/rewind.ico qt/icons/sound.ico @@ -40,10 +39,11 @@ qt/icons/superdisk.ico qt/icons/superdisk_image.ico qt/icons/superdisk_disabled.ico - qt/icons/zip.ico - qt/icons/zip_image.ico - qt/icons/zip_disabled.ico qt/icons/active.ico + qt/icons/browse.ico + qt/icons/eject.ico + qt/icons/export.ico + qt/icons/new.ico qt/icons/write_protected.ico qt/icons/write_active.ico qt/icons/disabled.ico diff --git a/src/scsi/scsi.c b/src/scsi/scsi.c index 0b0ca7211..a2bdc92ce 100644 --- a/src/scsi/scsi.c +++ b/src/scsi/scsi.c @@ -33,7 +33,7 @@ #include <86box/scsi.h> #include <86box/scsi_device.h> #include <86box/cdrom.h> -#include <86box/zip.h> +#include <86box/rdisk.h> #include <86box/scsi_disk.h> #include <86box/scsi_aha154x.h> #include <86box/scsi_buslogic.h> diff --git a/src/scsi/scsi_aha154x.c b/src/scsi/scsi_aha154x.c index 7c887e28b..7161a53bb 100644 --- a/src/scsi/scsi_aha154x.c +++ b/src/scsi/scsi_aha154x.c @@ -1006,8 +1006,10 @@ aha_init(const device_t *info) switch (dev->type) { case AHA_154xA: strcpy(dev->name, "AHA-154xA"); - dev->fw_rev = "A003"; /* The 3.07 microcode says A006. */ - dev->bios_path = "roms/scsi/adaptec/aha1540a307.bin"; /*Only for port 0x330*/ + bios_rev = (char *) device_get_config_bios("bios_rev"); + dev->bios_path = (char *) device_get_bios_file(info, bios_rev, 0); + dev->fw_rev = "A006"; /*3.07 (Port 0x330) normal microcode (M_E7BC.BIN)*/ + /* This is configurable from the configuration for the 154xB, the rest of the controllers read it from the EEPROM. */ dev->HostID = device_get_config_int("hostid"); @@ -1018,19 +1020,19 @@ aha_init(const device_t *info) case AHA_154xB: strcpy(dev->name, "AHA-154xB"); - switch (dev->Base) { - case 0x0330: - dev->bios_path = "roms/scsi/adaptec/aha1540b320_330.bin"; - break; + bios_rev = (char *) device_get_config_bios("bios_rev"); + dev->bios_path = (char *) device_get_bios_file(info, bios_rev, 0); + if (!strcmp(bios_rev, "v3_08")) + dev->fw_rev = "A003"; /*3.08 (Port 0x330) normal microcode (U12 27C128 Microcode v3.08.bin)*/ + else if (!strcmp(bios_rev, "v3_10") || !strcmp(bios_rev, "v3_10_p334") || !strcmp(bios_rev, "v3_1b_p334")) + dev->fw_rev = "A005"; /*3.10 (and revisions) normal microcode (M_FC8A.BIN)*/ + else if (!strcmp(bios_rev, "v3_11")) + dev->fw_rev = "A008"; /*3.11 (Port 0x330) normal microcode (1542BU12V311.BIN)*/ + else if (!strcmp(bios_rev, "v3_20") || !strcmp(bios_rev, "v3_20_p334")) + dev->fw_rev = "A014"; /*3.20 normal microcode (M_3054.BIN)*/ + else + dev->fw_rev = "A012"; /*3.20 (port 0x330) extended timeout microcode (M_5D98.BIN)*/ - case 0x0334: - dev->bios_path = "roms/scsi/adaptec/aha1540b320_334.bin"; - break; - - default: - break; - } - dev->fw_rev = "A005"; /* The 3.2 microcode says A012. */ /* This is configurable from the configuration for the 154xB, the rest of the controllers read it from the EEPROM. */ dev->HostID = device_get_config_int("hostid"); @@ -1156,6 +1158,125 @@ aha_init(const device_t *info) } // clang-format off +static const device_config_t aha_154xa_config[] = { + { + .name = "base", + .description = "Address", + .type = CONFIG_HEX16, + .default_string = NULL, + .default_int = 0x334, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "None", .value = 0 }, + { .description = "0x330", .value = 0x330 }, + { .description = "0x334", .value = 0x334 }, + { .description = "0x230", .value = 0x230 }, + { .description = "0x234", .value = 0x234 }, + { .description = "0x130", .value = 0x130 }, + { .description = "0x134", .value = 0x134 }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { + .name = "irq", + .description = "IRQ", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = 11, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "IRQ 9", .value = 9 }, + { .description = "IRQ 10", .value = 10 }, + { .description = "IRQ 11", .value = 11 }, + { .description = "IRQ 12", .value = 12 }, + { .description = "IRQ 14", .value = 14 }, + { .description = "IRQ 15", .value = 15 }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { + .name = "dma", + .description = "DMA", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = 6, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "DMA 5", .value = 5 }, + { .description = "DMA 6", .value = 6 }, + { .description = "DMA 7", .value = 7 }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { + .name = "hostid", + .description = "Host ID", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = 7, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "0", .value = 0 }, + { .description = "1", .value = 1 }, + { .description = "2", .value = 2 }, + { .description = "3", .value = 3 }, + { .description = "4", .value = 4 }, + { .description = "5", .value = 5 }, + { .description = "6", .value = 6 }, + { .description = "7", .value = 7 }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { + .name = "bios_rev", + .description = "BIOS Revision", + .type = CONFIG_BIOS, + .default_string = "v3_07", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .bios = { + { + .name = "Version 3.07 (Port 0x330)", + .internal_name = "v3_07", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 16384, + .files = { "roms/scsi/adaptec/aha1540a307.bin", "" } + }, + { .files_no = 0 } + }, + }, + { + .name = "bios_addr", + .description = "BIOS address", + .type = CONFIG_HEX20, + .default_string = NULL, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "Disabled", .value = 0 }, + { .description = "C800H", .value = 0xc8000 }, + { .description = "D000H", .value = 0xd0000 }, + { .description = "D800H", .value = 0xd8000 }, + { .description = "DC00H", .value = 0xdc000 }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { .name = "", .description = "", .type = CONFIG_END } +}; + static const device_config_t aha_154xb_config[] = { { .name = "base", @@ -1233,9 +1354,93 @@ static const device_config_t aha_154xb_config[] = { }, .bios = { { 0 } } }, + { + .name = "bios_rev", + .description = "BIOS Revision", + .type = CONFIG_BIOS, + .default_string = "v3_20_p334", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .bios = { + { + .name = "Version 3.08 (Port 0x330)", + .internal_name = "v3_08", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 16384, + .files = { "roms/scsi/adaptec/U13 27C128 BIOS v3.08.bin", "" } + }, + { + .name = "Version 3.10 (Port 0x330)", + .internal_name = "v3_10", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 16384, + .files = { "roms/scsi/adaptec/aha1540b310.bin", "" } + }, + { + .name = "Version 3.10 (Port 0x334)", + .internal_name = "v3_10_p334", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 16384, + .files = { "roms/scsi/adaptec/154xp334.bin", "" } + }, + { + .name = "Version 3.1b (Port 0x334)", + .internal_name = "v3_1b_p334", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 16384, + .files = { "roms/scsi/adaptec/154xp334_v31b.bin", "" } + }, + { + .name = "Version 3.11 (Port 0x330)", + .internal_name = "v3_11", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 16384, + .files = { "roms/scsi/adaptec/1542BU13V311.BIN", "" } + }, + { + .name = "Version 3.20 (Port 0x330)", + .internal_name = "v3_20", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 16384, + .files = { "roms/scsi/adaptec/aha1540b320_330.bin", "" } + }, + { + .name = "Version 3.20 (Port 0x330) (Ext. Timeout)", + .internal_name = "v3_20_exttimeout", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 16384, + .files = { "roms/scsi/adaptec/B_B300.BIN", "" } + }, + { + .name = "Version 3.20 (Port 0x334)", + .internal_name = "v3_20_p334", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 16384, + .files = { "roms/scsi/adaptec/aha1540b320_334.bin", "" } + }, + { .files_no = 0 } + }, + }, { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0, @@ -1254,7 +1459,7 @@ static const device_config_t aha_154xb_config[] = { { .name = "", .description = "", .type = CONFIG_END } }; -static const device_config_t aha_154x_config[] = { +static const device_config_t aha_154xc_config[] = { { .name = "base", .description = "Address", @@ -1312,7 +1517,7 @@ static const device_config_t aha_154x_config[] = { }, { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0, @@ -1389,7 +1594,7 @@ static const device_config_t aha_154xcf_config[] = { }, { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0, @@ -1481,7 +1686,7 @@ const device_t aha154xa_device = { .available = NULL, .speed_changed = NULL, .force_redraw = NULL, - .config = aha_154xb_config + .config = aha_154xa_config }; const device_t aha154xb_device = { @@ -1509,7 +1714,7 @@ const device_t aha154xc_device = { .available = NULL, .speed_changed = NULL, .force_redraw = NULL, - .config = aha_154x_config + .config = aha_154xc_config }; const device_t aha154xcf_device = { diff --git a/src/scsi/scsi_buslogic.c b/src/scsi/scsi_buslogic.c index 0e8954aff..c2ecc7b62 100644 --- a/src/scsi/scsi_buslogic.c +++ b/src/scsi/scsi_buslogic.c @@ -1874,7 +1874,7 @@ static const device_config_t BT_ISA_Config[] = { }, { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0, diff --git a/src/scsi/scsi_cdrom.c b/src/scsi/scsi_cdrom.c index 95c8c3640..afafa00ba 100644 --- a/src/scsi/scsi_cdrom.c +++ b/src/scsi/scsi_cdrom.c @@ -1048,7 +1048,7 @@ scsi_cdrom_read_data(scsi_cdrom_t *dev, const int msf, const int type, const int dev->sectors_num = 0; - if (dev->drv->cd_status == CD_STATUS_EMPTY) + if ((dev->drv->cd_status == CD_STATUS_EMPTY) || (dev->drv->cd_status == CD_STATUS_DVD_REJECTED)) scsi_cdrom_not_ready(dev); else if (dev->sector_pos > dev->drv->cdrom_capacity) { scsi_cdrom_lba_out_of_range(dev); @@ -1242,10 +1242,10 @@ scsi_cdrom_pre_execution_check(scsi_cdrom_t *dev, const uint8_t *cdb) if (!(scsi_cdrom_command_flags[cdb[0]] & ALLOW_UA)) scsi_cdrom_insert((void *) dev); - ready = (dev->drv->cd_status != CD_STATUS_EMPTY); + ready = (dev->drv->cd_status != CD_STATUS_EMPTY) && (dev->drv->cd_status != CD_STATUS_DVD_REJECTED); } } else - ready = (dev->drv->cd_status != CD_STATUS_EMPTY); + ready = (dev->drv->cd_status != CD_STATUS_EMPTY) && (dev->drv->cd_status != CD_STATUS_DVD_REJECTED); skip_ready_check: /* @@ -1325,10 +1325,18 @@ scsi_cdrom_update_sector_flags(scsi_cdrom_t *dev) dev->sector_type = 0x08 | ((2048 / dev->drv->sector_size) << 4); dev->sector_flags = 0x0010; break; + case 2052: + dev->sector_type = 0x18; + dev->sector_flags = 0x0030; + break; case 2056: dev->sector_type = 0x18; dev->sector_flags = 0x0050; break; + case 2060: + dev->sector_type = 0x18; + dev->sector_flags = 0x0070; + break; case 2324: case 2328: dev->sector_type = (dev->drv->sector_size == 2328) ? 0x1a : 0x1b; dev->sector_flags = 0x0018; @@ -1437,7 +1445,8 @@ scsi_cdrom_request_sense_for_scsi(scsi_common_t *sc, uint8_t *buffer, uint8_t al { scsi_cdrom_t *dev = (scsi_cdrom_t *) sc; - if ((dev->drv->cd_status == CD_STATUS_EMPTY) && dev->unit_attention) { + if (((dev->drv->cd_status == CD_STATUS_EMPTY) || + (dev->drv->cd_status == CD_STATUS_DVD_REJECTED)) && dev->unit_attention) { /* If the drive is not ready, there is no reason to keep the UNIT ATTENTION condition present, as we only use it to mark disc changes. @@ -2849,7 +2858,7 @@ scsi_cdrom_command(scsi_common_t *sc, const uint8_t *cdb) Also, the max_len variable is reused as this command does otherwise not use it, to avoid having to declare another variable. */ - if (dev->drv->cd_status == CD_STATUS_EMPTY) + if ((dev->drv->cd_status == CD_STATUS_EMPTY) || (dev->drv->cd_status == CD_STATUS_DVD_REJECTED)) max_len = 70; /* No media inserted. */ else if (dev->drv->cd_status == CD_STATUS_DVD) max_len = 65; /* DVD. */ @@ -2926,7 +2935,7 @@ scsi_cdrom_command(scsi_common_t *sc, const uint8_t *cdb) alloc_length = 0; - if (dev->drv->cd_status != CD_STATUS_EMPTY) { + if ((dev->drv->cd_status != CD_STATUS_EMPTY) && (dev->drv->cd_status != CD_STATUS_DVD_REJECTED)) { if (dev->drv->cd_status == CD_STATUS_DVD) { b[6] = (MMC_PROFILE_DVD_ROM >> 8) & 0xff; b[7] = MMC_PROFILE_DVD_ROM & 0xff; @@ -2950,7 +2959,8 @@ scsi_cdrom_command(scsi_common_t *sc, const uint8_t *cdb) alloc_length += 4; b += 4; - for (uint8_t i = 0; i < 2; i++) { + int max_profiles = cdrom_is_dvd(dev->drv->type) ? 2 : 1; + for (uint8_t i = 0; i < max_profiles; i++) { b[0] = (profiles[i] >> 8) & 0xff; b[1] = profiles[i] & 0xff; @@ -2958,7 +2968,7 @@ scsi_cdrom_command(scsi_common_t *sc, const uint8_t *cdb) b[2] |= 1; alloc_length += 4; - b += 4; + b += 4; } } if ((feature == 1) || ((cdb[1] & 3) < 2)) { @@ -3026,7 +3036,7 @@ scsi_cdrom_command(scsi_common_t *sc, const uint8_t *cdb) alloc_length += 8; b += 8; } - if ((feature == 0x1f) || ((cdb[1] & 3) < 2)) { + if (cdrom_is_dvd(dev->drv->type) && ((feature == 0x1f) || ((cdb[1] & 3) < 2))) { b[1] = 0x1f; b[2] = (0 << 2) | 0x02 | 0x01; /* persistent and current */ b[3] = 0; @@ -3096,7 +3106,7 @@ scsi_cdrom_command(scsi_common_t *sc, const uint8_t *cdb) gesn_event_header->notification_class |= GESN_MEDIA; /* Bits 7-4 = Reserved, Bits 4-1 = Media Status. */ - if (dev->drv->cd_status == CD_STATUS_EMPTY) + if ((dev->drv->cd_status == CD_STATUS_EMPTY) || (dev->drv->cd_status == CD_STATUS_DVD_REJECTED)) dev->buffer[4] = MEC_MEDIA_REMOVAL; else dev->buffer[4] = dev->unit_attention ? MEC_NEW_MEDIA : MEC_NO_CHANGE; diff --git a/src/scsi/scsi_ncr53c400.c b/src/scsi/scsi_ncr53c400.c index 7a87b4ac9..5f2302b4f 100644 --- a/src/scsi/scsi_ncr53c400.c +++ b/src/scsi/scsi_ncr53c400.c @@ -821,7 +821,7 @@ corel_ls2000_available(void) static const device_config_t ncr53c400_mmio_config[] = { { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0xD8000, @@ -892,7 +892,7 @@ static const device_config_t rt1000b_config[] = { }, { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0xD8000, @@ -953,7 +953,7 @@ static const device_config_t rt1000b_mc_config[] = { static const device_config_t t130b_config[] = { { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0xD8000, diff --git a/src/scsi/scsi_pcscsi.c b/src/scsi/scsi_pcscsi.c index 1b1f6113d..163245f33 100644 --- a/src/scsi/scsi_pcscsi.c +++ b/src/scsi/scsi_pcscsi.c @@ -46,9 +46,13 @@ #include <86box/scsi_pcscsi.h> #include <86box/vid_ati_eeprom.h> #include <86box/fifo8.h> +#include "cpu.h" -#define DC390_ROM "roms/scsi/esp_pci/INT13.BIN" -#define AM53C974_ROM "roms/scsi/esp_pci/harom.bin" +#define DC390_ROM "roms/scsi/esp_pci/INT13.BIN" +#define AM53C974_3_43_ROM "roms/scsi/esp_pci/2974BIOS.BIN" +#define AM53C974_4_00_ROM "roms/scsi/esp_pci/2974bios-4-00.bin" +#define AM53C974_5_00_ROM "roms/scsi/esp_pci/2974bios-5-00.bin" +#define AM53C974_5_11_ROM "roms/scsi/esp_pci/2974bios-5-11.bin" #define ESP_REGS 16 #define ESP_FIFO_SZ 16 @@ -166,8 +170,7 @@ enum ESPASCMode { #define SBAC_PABTEN (1 << 25) typedef struct esp_t { - mem_mapping_t mmio_mapping; - mem_mapping_t ram_mapping; + char *bios_path; char nvr_path[64]; uint8_t pci_slot; int has_bios; @@ -220,6 +223,8 @@ typedef struct esp_t { uint8_t pos_regs[8]; } esp_t; +static esp_t reset_state = { 0 }; + #define READ_FROM_DEVICE 1 #define WRITE_TO_DEVICE 0 @@ -294,10 +299,10 @@ esp_pci_update_irq(esp_t *dev) if (level) { pci_set_irq(dev->pci_slot, PCI_INTA, &dev->irq_state); - esp_log("Raising PCI IRQ...\n"); + esp_log("Raising PCI IRQ..., SCSIL=%d, DMAL=%d\n", scsi_level, dma_level); } else { pci_clear_irq(dev->pci_slot, PCI_INTA, &dev->irq_state); - esp_log("Lowering PCI IRQ...\n"); + esp_log("Lowering PCI IRQ..., SCSIL=%d, DMAL=%d\n", scsi_level, dma_level); } } @@ -324,6 +329,7 @@ esp_irq(esp_t *dev, int level) * DMA_STAT_DONE and the ESP IRQ arriving which is visible to the * guest that can cause confusion e.g. Linux */ + esp_log("ESP IRQ issuing: WBC=%d, CMDMask=%03x.\n", dev->dma_regs[DMA_WBC], dev->dma_regs[DMA_CMD] & DMA_CMD_MASK); if (((dev->dma_regs[DMA_CMD] & DMA_CMD_MASK) == 0x03) && (dev->dma_regs[DMA_WBC] == 0)) dev->dma_regs[DMA_STAT] |= DMA_STAT_DONE; @@ -419,6 +425,8 @@ esp_set_tc(esp_t *dev, uint32_t dmalen) esp_log("OLDTC=%d, DMALEN=%d.\n", old_tc, dmalen); if (old_tc && !dmalen) dev->rregs[ESP_RSTAT] |= STAT_TC; + else if (!old_tc && dmalen) + dev->rregs[ESP_RSTAT] &= ~STAT_TC; } static uint32_t @@ -552,7 +560,7 @@ esp_do_command_phase(esp_t *dev) dev->ti_size = sd->buffer_length; dev->xfer_counter = sd->buffer_length; - esp_log("ESP SCSI Command = 0x%02x, ID = %d, LUN = %d, len = %d, phase = %02x.\n", buf[0], dev->id, dev->lun, sd->buffer_length, sd->phase); + esp_log("ESP SCSI Command = 0x%02x, ID = %d, LUN = %d, len = %d, phase = %02x, PCI DMA cmd mask = %02x.\n", buf[0], dev->id, dev->lun, sd->buffer_length, sd->phase, dev->dma_regs[DMA_CMD] & DMA_CMD_MASK); fifo8_reset(&dev->cmdfifo); @@ -591,6 +599,7 @@ esp_do_message_phase(esp_t *dev) dev->lun = message & 7; dev->cmdfifo_cdb_offset--; + esp_log("Scanning LUN=%d.\n", dev->lun); if (scsi_device_present(&scsi_devices[dev->bus][dev->id]) && (dev->lun > 0)) { /* We only support LUN 0 */ esp_log("LUN = %i\n", dev->lun); @@ -620,8 +629,8 @@ esp_do_cmd(esp_t *dev) { esp_log("DO CMD.\n"); esp_do_message_phase(dev); - assert(dev->cmdfifo_cdb_offset == 0); - esp_do_command_phase(dev); + if (dev->cmdfifo_cdb_offset >= 0) + esp_do_command_phase(dev); } static void @@ -632,7 +641,10 @@ esp_dma_enable(esp_t *dev, int level) dev->dma_enabled = 1; timer_stop(&dev->timer); if (((dev->rregs[ESP_CMD] & CMD_CMD) != CMD_TI) && ((dev->rregs[ESP_CMD] & CMD_CMD) != CMD_PAD)) { - timer_on_auto(&dev->timer, 40.0); + if (dev->wregs[ESP_WCCF] & 0x07) + timer_on_auto(&dev->timer, ((double)(dev->wregs[ESP_WCCF] & 0x07)) * 5.0); + else + timer_on_auto(&dev->timer, 40.0); } else { esp_log("Period = %lf\n", dev->period); timer_on_auto(&dev->timer, dev->period); @@ -655,6 +667,8 @@ 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->rregs[ESP_TCHI] = dev->mca ? 0 : TCHI_AM53C974; + esp_log("ESP Reset\n"); timer_stop(&dev->timer); @@ -702,13 +716,14 @@ esp_do_dma(esp_t *dev) uint8_t buf[ESP_CMDFIFO_SZ]; uint32_t len; - esp_log("ESP SCSI Actual DMA len = %d\n", esp_get_tc(dev)); - len = esp_get_tc(dev); + esp_log("ESP SCSI Actual DMA len=%d, cfg3=%02x.\n", len, dev->rregs[ESP_CFG3]); + switch (esp_get_phase(dev)) { case STAT_MO: len = MIN(len, fifo8_num_free(&dev->cmdfifo)); + esp_log("ESP SCSI Message Out len=%d.\n", len); if (len) { if (dev->mca) { dma_set_drq(dev->DmaChannel, 1); @@ -975,6 +990,9 @@ esp_do_dma(esp_t *dev) esp_raise_irq(dev); } break; + + default: + break; } break; @@ -1023,6 +1041,7 @@ esp_do_nodma(esp_t *dev) uint8_t buf[ESP_FIFO_SZ]; int len; + esp_log("No DMA phase=%x.\n", esp_get_phase(dev)); switch (esp_get_phase(dev)) { case STAT_MO: switch (dev->rregs[ESP_CMD]) { @@ -1030,8 +1049,10 @@ esp_do_nodma(esp_t *dev) /* Copy FIFO into cmdfifo */ len = esp_fifo_pop_buf(dev, buf, fifo8_num_used(&dev->fifo)); len = MIN(fifo8_num_free(&dev->cmdfifo), len); + esp_log("ESP Message Out CMD SelAtn len=%d.\n", len); fifo8_push_all(&dev->cmdfifo, buf, len); + esp_log("ESP Message Out CMD SelAtn FIFO num used=%d.\n", fifo8_num_used(&dev->cmdfifo)); if (fifo8_num_used(&dev->cmdfifo) >= 1) { /* First byte received, switch to command phase */ esp_set_phase(dev, STAT_CD); @@ -1047,11 +1068,13 @@ esp_do_nodma(esp_t *dev) case CMD_SELATNS: /* Copy one byte from FIFO into cmdfifo */ - len = esp_fifo_pop_buf(dev, buf, - MIN(fifo8_num_used(&dev->fifo), 1)); + len = esp_fifo_pop_buf(dev, buf, MIN(fifo8_num_used(&dev->fifo), 1)); + esp_log("ESP Message Out CMD SelAtnStop len1=%d.\n", len); len = MIN(fifo8_num_free(&dev->cmdfifo), len); + esp_log("ESP Message Out CMD SelAtnStop len2=%d.\n", len); fifo8_push_all(&dev->cmdfifo, buf, len); + esp_log("ESP Message Out CMD SelAtnStop FIFO num used=%d.\n", fifo8_num_used(&dev->cmdfifo)); if (fifo8_num_used(&dev->cmdfifo) >= 1) { /* First byte received, stop in message out phase */ dev->rregs[ESP_RSEQ] = SEQ_MO; @@ -1066,11 +1089,14 @@ esp_do_nodma(esp_t *dev) case CMD_TI: /* Copy FIFO into cmdfifo */ len = esp_fifo_pop_buf(dev, buf, fifo8_num_used(&dev->fifo)); + esp_log("ESP Message Out CMD TI len1=%d.\n", len); len = MIN(fifo8_num_free(&dev->cmdfifo), len); + esp_log("ESP Message Out CMD TI len2=%d.\n", len); fifo8_push_all(&dev->cmdfifo, buf, len); /* ATN remains asserted until FIFO empty */ dev->cmdfifo_cdb_offset = fifo8_num_used(&dev->cmdfifo); + esp_log("ESP Message Out CMD TI CDB offset=%d.\n", dev->cmdfifo_cdb_offset); esp_set_phase(dev, STAT_CD); dev->rregs[ESP_CMD] = 0; dev->rregs[ESP_RINTR] |= INTR_BS; @@ -1176,6 +1202,7 @@ esp_do_nodma(esp_t *dev) case STAT_ST: switch (dev->rregs[ESP_CMD]) { case CMD_ICCS: + esp_log("ICCS Status=%x.\n", dev->status); esp_fifo_push(dev, dev->status); esp_set_phase(dev, STAT_MI); @@ -1243,15 +1270,18 @@ esp_command_complete(void *priv, uint32_t status) static void esp_timer_on(esp_t *dev, scsi_device_t *sd, double p) { - if (dev->mca) { - /* Normal SCSI: 5000000 bytes per second */ - dev->period = (p > 0.0) ? p : (((double) sd->buffer_length) * 0.2); - } else { + if ((dev->rregs[ESP_CFG3] & 0x18) == 0x18) { /* Fast SCSI: 10000000 bytes per second */ dev->period = (p > 0.0) ? p : (((double) sd->buffer_length) * 0.1); + } else { + /* Normal SCSI: 5000000 bytes per second */ + dev->period = (p > 0.0) ? p : (((double) sd->buffer_length) * 0.2); } - timer_on_auto(&dev->timer, dev->period + 40.0); + if ((dev->wregs[ESP_WCCF] & 0x07) == 0x00) + timer_on_auto(&dev->timer, dev->period + 40.0); + else + timer_on_auto(&dev->timer, dev->period + (((double)(dev->wregs[ESP_WCCF] & 0x07)) * 5.0)); } static void @@ -1321,8 +1351,8 @@ handle_satn_stop(void *priv) if (esp_select(dev) < 0) return; + esp_log("Selection with ATN and Stop.\n"); esp_set_phase(dev, STAT_MO); - dev->cmdfifo_cdb_offset = 0; if (dev->dma) esp_do_dma(dev); @@ -1400,30 +1430,40 @@ esp_reg_read(esp_t *dev, uint32_t saddr) /* Clear sequence step, interrupt register and all status bits except TC */ ret = dev->rregs[ESP_RINTR]; - dev->rregs[ESP_RINTR] = 0; - dev->rregs[ESP_RSTAT] &= ~STAT_TC; - esp_log("ESP SCSI Clear sequence step\n"); - esp_lower_irq(dev); - esp_log("ESP RINTR read old val = %02x\n", ret); + if (dev->rregs[ESP_RSTAT] & STAT_INT) { + dev->rregs[ESP_RINTR] = 0; + dev->rregs[ESP_RSTAT] &= ~(0x08 | STAT_PE | STAT_GE); + esp_lower_irq(dev); + } + 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) { - ret = dev->rregs[ESP_TCHI]; - } else { - if (!dev->tchi_written) - ret = TCHI_AM53C974; - else - ret = dev->rregs[ESP_TCHI]; - } + if (!dev->mca && !dev->tchi_written) + dev->rregs[ESP_TCHI] = TCHI_AM53C974; + + ret = dev->rregs[ESP_TCHI]; + esp_log("Read TCHI Register=%02x.\n", ret); break; case ESP_RFLAGS: ret = fifo8_num_used(&dev->fifo); break; + case ESP_RSTAT: + ret = dev->rregs[ESP_RSTAT]; + esp_log("Read SCSI Status Register=%02x.\n", ret); + break; + case ESP_RSEQ: + ret = dev->rregs[ESP_RSEQ]; + esp_log("Read Sequence Step=%02x, intr=%02x.\n", ret, dev->rregs[ESP_RINTR]); + break; + case ESP_CFG2: + ret = dev->rregs[ESP_CFG2] & 0x40; + esp_log("Read CFG2 Register=%02x.\n", ret); + break; default: ret = dev->rregs[saddr]; break; } - esp_log("Read reg %02x = %02x\n", saddr, ret); + esp_log("%04X:%08X: Read ESP reg%02x=%02x\n", CS, cpu_state.pc, saddr, ret); return ret; } @@ -1448,7 +1488,7 @@ esp_reg_write(esp_t *dev, uint32_t saddr, uint32_t val) break; case ESP_CMD: dev->rregs[ESP_CMD] = val; - if (!esp_cmd_is_valid(dev, dev->rregs[saddr])) { + if (!esp_cmd_is_valid(dev, dev->rregs[ESP_CMD])) { dev->rregs[ESP_RSTAT] |= INTR_IL; esp_raise_irq(dev); break; @@ -1487,19 +1527,21 @@ esp_reg_write(esp_t *dev, uint32_t saddr, uint32_t val) esp_pci_soft_reset(dev); break; case CMD_BUSRESET: - for (uint8_t i = 0; i < 16; i++) + esp_log("ESP Bus Reset val=%02x.\n", (dev->rregs[ESP_CFG1] & CFG1_RESREPT)); + for (uint8_t i = 0; i < 16; i++) { scsi_device_reset(&scsi_devices[dev->bus][i]); - - if (!(dev->wregs[ESP_CFG1] & CFG1_RESREPT)) { + } + if (!(dev->rregs[ESP_CFG1] & CFG1_RESREPT)) { dev->rregs[ESP_RINTR] |= INTR_RST; esp_log("ESP Bus Reset with IRQ\n"); esp_raise_irq(dev); } break; case CMD_TI: - esp_log("Transfer Information val = %02X\n", val); + esp_log("Transfer Information val=%02X\n", val); break; case CMD_ICCS: + esp_log("ESP SCSI ICCS\n"); esp_write_response(dev); dev->rregs[ESP_RINTR] |= INTR_FC; dev->rregs[ESP_RSTAT] |= STAT_MI; @@ -1532,7 +1574,7 @@ esp_reg_write(esp_t *dev, uint32_t saddr, uint32_t val) break; case CMD_ENSEL: dev->rregs[ESP_RINTR] = 0; - esp_log("ESP Enable Selection, do cmd = %d\n", dev->do_cmd); + esp_log("ESP Enable Selection.\n"); break; case CMD_DISSEL: dev->rregs[ESP_RINTR] = 0; @@ -1552,7 +1594,13 @@ esp_reg_write(esp_t *dev, uint32_t saddr, uint32_t val) case ESP_WSYNO: break; case ESP_CFG1: + dev->rregs[ESP_CFG1] = val; + esp_log("ESP CFG1=%02x.\n", val); + break; case ESP_CFG2: + dev->rregs[ESP_CFG2] = val & ~0x8f; + esp_log("ESP CFG2=%02x.\n", dev->rregs[ESP_CFG2]); + break; case ESP_CFG3: case ESP_RES3: case ESP_RES4: @@ -1571,9 +1619,12 @@ esp_reg_write(esp_t *dev, uint32_t saddr, uint32_t val) static void esp_pci_dma_memory_rw(esp_t *dev, uint8_t *buf, uint32_t len, int dir) { - uint32_t sg_pos = 0; uint32_t addr; int expected_dir; + int sg_pos = 0; + uint32_t DMALen; + uint32_t DMAPtr; + uint32_t WAC = 0; if (dev->dma_regs[DMA_CMD] & DMA_CMD_DIR) expected_dir = READ_FROM_DEVICE; @@ -1585,39 +1636,55 @@ esp_pci_dma_memory_rw(esp_t *dev, uint8_t *buf, uint32_t len, int dir) return; } - if (dev->dma_regs[DMA_CMD] & DMA_CMD_MDL) { - if (dev->dma_regs[DMA_STC]) { - if (dev->dma_regs[DMA_WBC] > len) - dev->dma_regs[DMA_WBC] = len; + if (dev->dma_regs[DMA_WBC] < len) + len = dev->dma_regs[DMA_WBC]; + + if (dev->dma_regs[DMA_CMD] & DMA_CMD_MDL) { + if (len) { + dma_bm_read(dev->dma_regs[DMA_WMAC], (uint8_t *)&DMAPtr, 4, 4); + dev->dma_regs[DMA_WAC] = DMAPtr | dev->dma_regs[DMA_SPA]; + DMALen = len; + WAC = dev->dma_regs[DMA_SPA]; + for (uint32_t i = 0; i < len; i += 4) { + if (WAC == 0) { + dma_bm_read(dev->dma_regs[DMA_WMAC], (uint8_t *)&DMAPtr, 4, 4); + dev->dma_regs[DMA_WAC] = DMAPtr; + } - esp_log("WAC MDL=%08x, STC=%d, ID=%d.\n", dev->dma_regs[DMA_WAC] | (dev->dma_regs[DMA_WMAC] & 0xff000), dev->dma_regs[DMA_STC], dev->id); - for (uint32_t i = 0; i < len; i++) { addr = dev->dma_regs[DMA_WAC]; - if (expected_dir) - dma_bm_write(addr | (dev->dma_regs[DMA_WMAC] & 0xff000), &buf[sg_pos], len, 4); - else - dma_bm_read(addr | (dev->dma_regs[DMA_WMAC] & 0xff000), &buf[sg_pos], len, 4); + esp_log("Data Buffer %s: length %d (%u), pointer 0x%04X\n", + expected_dir ? "read" : "write", len, len, addr); - sg_pos++; - dev->dma_regs[DMA_WBC]--; - dev->dma_regs[DMA_WAC]++; - - if (dev->dma_regs[DMA_WAC] & 0x1000) { - dev->dma_regs[DMA_WAC] = 0; - dev->dma_regs[DMA_WMAC] += 0x1000; + if (addr && DMALen) { + if (expected_dir) + dma_bm_write(addr, &buf[sg_pos], DMALen, 4); + else + dma_bm_read(addr, &buf[sg_pos], DMALen, 4); } + sg_pos += 4; + DMALen -= 4; + + /* update status registers */ + dev->dma_regs[DMA_WBC] -= 4; + dev->dma_regs[DMA_WAC] += 4; + WAC += 4; + if (WAC >= 0x1000) { + WAC = 0; + dev->dma_regs[DMA_WMAC] += 4; + } + + if (DMALen < 0) + DMALen = 0; + if (dev->dma_regs[DMA_WBC] <= 0) { dev->dma_regs[DMA_WBC] = 0; - dev->dma_regs[DMA_STAT] |= DMA_STAT_DONE; + break; } } } } else { - if (dev->dma_regs[DMA_WBC] < len) - len = dev->dma_regs[DMA_WBC]; - addr = dev->dma_regs[DMA_WAC]; if (expected_dir) @@ -1628,9 +1695,12 @@ esp_pci_dma_memory_rw(esp_t *dev, uint8_t *buf, uint32_t len, int dir) /* update status registers */ dev->dma_regs[DMA_WBC] -= len; dev->dma_regs[DMA_WAC] += len; + } - if (dev->dma_regs[DMA_WBC] == 0) - dev->dma_regs[DMA_STAT] |= DMA_STAT_DONE; + esp_log("Finished count=%d.\n", dev->dma_regs[DMA_WBC]); + if (dev->dma_regs[DMA_WBC] == 0) { + esp_log("DMA transfer finished.\n"); + dev->dma_regs[DMA_STAT] |= DMA_STAT_DONE; } } @@ -1643,13 +1713,13 @@ esp_pci_dma_read(esp_t *dev, uint16_t saddr) if (saddr == DMA_STAT) { if (!(dev->sbac & SBAC_STATUS)) { - dev->dma_regs[DMA_STAT] &= ~(DMA_STAT_ERROR | DMA_STAT_ABORT | DMA_STAT_DONE); + dev->dma_regs[DMA_STAT] &= ~(DMA_STAT_PWDN | DMA_STAT_ERROR | DMA_STAT_ABORT | DMA_STAT_DONE); esp_log("ESP PCI DMA Read done cleared\n"); esp_pci_update_irq(dev); } } - esp_log("ESP PCI DMA Read regs addr = %04x, temp = %06x\n", saddr, ret); + esp_log("ESP PCI DMA Read regs addr=%04x, ret=%06x, STAT=%02x\n", saddr, ret, dev->dma_regs[DMA_STAT]); return ret; } @@ -1664,8 +1734,8 @@ esp_pci_dma_write(esp_t *dev, uint16_t saddr, uint32_t val) esp_log("ESP PCI DMA Write CMD = %02x\n", val & DMA_CMD_MASK); switch (val & DMA_CMD_MASK) { case 0: /*IDLE*/ + esp_log("IDLE/NOP\n"); esp_dma_enable(dev, 0); - esp_log("PCI DMA disable\n"); break; case 1: /*BLAST*/ dev->dma_regs[DMA_STAT] |= DMA_STAT_BCMBLT; @@ -1674,12 +1744,12 @@ esp_pci_dma_write(esp_t *dev, uint16_t saddr, uint32_t val) scsi_device_command_stop(&scsi_devices[dev->bus][dev->id]); break; case 3: /*START*/ + dev->dma_regs[DMA_WBC] = dev->dma_regs[DMA_STC]; dev->dma_regs[DMA_WAC] = dev->dma_regs[DMA_SPA]; - dev->dma_regs[DMA_WMAC] = dev->dma_regs[DMA_SMDLA] & 0xfffffffc; - if (!dev->dma_regs[DMA_STC]) - dev->dma_regs[DMA_STC] = 0x1000000; - dev->dma_regs[DMA_WBC] = dev->dma_regs[DMA_STC]; + if (val & DMA_CMD_MDL) + dev->dma_regs[DMA_WMAC] = dev->dma_regs[DMA_SMDLA] & 0xfffffffc; + dev->dma_regs[DMA_STAT] &= ~(DMA_STAT_BCMBLT | DMA_STAT_SCSIINT | DMA_STAT_DONE | DMA_STAT_ABORT | DMA_STAT_ERROR | DMA_STAT_PWDN); esp_dma_enable(dev, 1); esp_log("PCI DMA enable, MDL bit=%02x, SPA=%08x, SMDLA=%08x, STC=%d, ID=%d, SCSICMD=%02x.\n", val & DMA_CMD_MDL, dev->dma_regs[DMA_SPA], dev->dma_regs[DMA_SMDLA], dev->dma_regs[DMA_STC], dev->id, dev->cmdfifo.data[1]); @@ -1754,7 +1824,7 @@ esp_io_pci_read(esp_t *dev, uint32_t addr, unsigned int size) } else if (addr == 0x70) { /* DMA SCSI Bus and control */ ret = dev->sbac; - esp_log("ESP PCI SBAC read = %02x\n", ret); + esp_log("ESP PCI SBAC read=%08x\n", ret); } else { /* Invalid region */ ret = 0; @@ -1764,7 +1834,11 @@ esp_io_pci_read(esp_t *dev, uint32_t addr, unsigned int size) ret >>= (addr & 3) * 8; ret &= ~(~(uint64_t) 0 << (8 * size)); - esp_log("ESP PCI I/O read: addr = %02x, val = %02x\n", addr, ret); + if (addr == 0x70) + esp_log("%04X:%08X: SBAC PCI I/O read: addr=%02x, val=%02x\n", CS, cpu_state.pc, addr, ret); + else + esp_log("%04X:%08X: ESP PCI I/O read: addr=%02x, val=%02x\n", CS, cpu_state.pc, addr, ret); + return ret; } @@ -1809,6 +1883,7 @@ esp_io_pci_write(esp_t *dev, uint32_t addr, uint32_t val, unsigned int size) esp_pci_dma_write(dev, (addr - 0x40) >> 2, val); } else if (addr == 0x70) { /* DMA SCSI Bus and control */ + esp_log("ESP PCI SBAC write=%08x\n", val); dev->sbac = val; } } @@ -2084,7 +2159,7 @@ esp_pci_read(UNUSED(int func), int addr, void *priv) { esp_t *dev = (esp_t *) priv; - // esp_log("ESP PCI: Reading register %02X\n", addr & 0xff); + esp_log("ESP PCI: Reading register %02X\n", addr & 0xff); switch (addr) { case 0x00: @@ -2120,6 +2195,8 @@ esp_pci_read(UNUSED(int func), int addr, void *priv) return 0; /*devubclass*/ case 0x0B: return 1; /*Class code*/ + case 0x0C: + return esp_pci_regs[0x0c]; case 0x0E: return 0; /*Header type */ case 0x10: @@ -2150,9 +2227,11 @@ esp_pci_read(UNUSED(int func), int addr, void *priv) return dev->irq; case 0x3D: return PCI_INTA; - + case 0x3E: + return 0x04; + case 0x3F: + return 0x28; case 0x40 ... 0x4f: - esp_log("ESP PCI: Read value %02X to register %02X, ID=%d\n", esp_pci_regs[addr], addr, dev->id); return esp_pci_regs[addr]; default: @@ -2170,7 +2249,7 @@ esp_pci_write(UNUSED(int func), int addr, uint8_t val, void *priv) int eesk; int eedi; - // esp_log("ESP PCI: Write value %02X to register %02X\n", val, addr); + esp_log("%04X:%08X: ESP PCI: Write value %02X to register %02X\n", CS, cpu_state.pc, val, addr); if (!dev->local) { if ((addr >= 0x80) && (addr <= 0xFF)) { @@ -2211,6 +2290,10 @@ esp_pci_write(UNUSED(int func), int addr, uint8_t val, void *priv) esp_pci_regs[addr] &= ~(val & 0xf9); break; + case 0x0c: + esp_pci_regs[addr] = val; + break; + case 0x10: case 0x11: case 0x12: @@ -2261,7 +2344,6 @@ esp_pci_write(UNUSED(int func), int addr, uint8_t val, void *priv) return; case 0x40 ... 0x4f: - esp_log("ESP PCI: Write value %02X to register %02X, ID=%i.\n", val, addr, dev->id); esp_pci_regs[addr] = val; return; @@ -2270,10 +2352,30 @@ esp_pci_write(UNUSED(int func), int addr, uint8_t val, void *priv) } } +static void +esp_pci_reset(void *priv) +{ + esp_t *dev = (esp_t *) priv; + + timer_disable(&dev->timer); + + reset_state.bios.mapping = dev->bios.mapping; + + reset_state.timer = dev->timer; + + reset_state.pci_slot = dev->pci_slot; + + memcpy(dev, &reset_state, sizeof(esp_t)); + + dev->sbac = 1 << 19; +} + static void * -dc390_init(UNUSED(const device_t *info)) +dc390_init(const device_t *info) { esp_t *dev = calloc(1, sizeof(esp_t)); + const char *bios_rev = NULL; + uint32_t mask = 0; dev->bus = scsi_get_bus(); @@ -2293,11 +2395,16 @@ dc390_init(UNUSED(const device_t *info)) dev->has_bios = device_get_config_int("bios"); if (dev->has_bios) { - dev->BIOSBase = 0xd0000; + dev->BIOSBase = 0xc8000; if (dev->local) { - ;//rom_init(&dev->bios, AM53C974_ROM, 0xd0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); + bios_rev = (char *) device_get_config_bios("bios_rev"); + dev->bios_path = (char *) device_get_bios_file(info, bios_rev, 0); + if (!strcmp(bios_rev, "v3_43")) + mask = 0x4000; + + rom_init(&dev->bios, dev->bios_path, dev->BIOSBase, 0x8000, 0x7fff, mask, MEM_MAPPING_EXTERNAL); } else - rom_init(&dev->bios, DC390_ROM, 0xd0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); + rom_init(&dev->bios, DC390_ROM, dev->BIOSBase, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); } /* Enable our BIOS space in PCI, if needed. */ @@ -2317,13 +2424,16 @@ dc390_init(UNUSED(const device_t *info)) } esp_pci_hard_reset(dev); - for (uint8_t i = 0; i < 16; i++) + for (uint8_t i = 0; i < 16; i++) { scsi_device_reset(&scsi_devices[dev->bus][i]); + } timer_add(&dev->timer, esp_callback, dev, 0); scsi_bus_set_speed(dev->bus, 10000000.0); + memcpy(&reset_state, dev, sizeof(esp_t)); + return dev; } @@ -2505,7 +2615,7 @@ ncr53c9x_mca_init(const device_t *info) timer_add(&dev->timer, esp_callback, dev, 0); - scsi_bus_set_speed(dev->bus, 5000000.0); + scsi_bus_set_speed(dev->bus, 10000000.0); return dev; } @@ -2541,6 +2651,71 @@ static const device_config_t bios_enable_config[] = { // clang-format on }; +static const device_config_t am53c974a_bios_enable_config[] = { + // clang-format off + { + .name = "bios_rev", + .description = "BIOS Revision", + .type = CONFIG_BIOS, + .default_string = "v3_43", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .bios = { + { + .name = "Version 3.43", + .internal_name = "v3_43", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 32768, + .files = { AM53C974_3_43_ROM, "" } + }, + { + .name = "Version 4.00", + .internal_name = "v4_00", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 32768, + .files = { AM53C974_4_00_ROM, "" } + }, + { + .name = "Version 5.00", + .internal_name = "v5_00", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 32768, + .files = { AM53C974_5_00_ROM, "" } + }, + { + .name = "Version 5.11", + .internal_name = "v5_11", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 32768, + .files = { AM53C974_5_11_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 +}; + const device_t dc390_pci_device = { .name = "Tekram DC-390 PCI", .internal_name = "dc390", @@ -2548,7 +2723,7 @@ const device_t dc390_pci_device = { .local = 0, .init = dc390_init, .close = esp_close, - .reset = NULL, + .reset = esp_pci_reset, .available = NULL, .speed_changed = NULL, .force_redraw = NULL, @@ -2562,11 +2737,11 @@ const device_t am53c974_pci_device = { .local = 1, .init = dc390_init, .close = esp_close, - .reset = NULL, + .reset = esp_pci_reset, .available = NULL, .speed_changed = NULL, .force_redraw = NULL, - .config = NULL + .config = am53c974a_bios_enable_config }; const device_t ncr53c90a_mca_device = { diff --git a/src/scsi/scsi_t128.c b/src/scsi/scsi_t128.c index c5a1c4e67..e2f963900 100644 --- a/src/scsi/scsi_t128.c +++ b/src/scsi/scsi_t128.c @@ -548,7 +548,7 @@ t128_available(void) static const device_config_t t128_config[] = { { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0xD8000, diff --git a/src/sio/sio_ali5123.c b/src/sio/sio_ali5123.c index 7dc522b30..cbb949395 100644 --- a/src/sio/sio_ali5123.c +++ b/src/sio/sio_ali5123.c @@ -523,7 +523,7 @@ ali5123_init(const device_t *info) io_sethandler(FDC_PRIMARY_ADDR, 0x0002, ali5123_read, NULL, NULL, ali5123_write, NULL, NULL, dev); - device_add(&keyboard_ps2_ali_pci_device); + device_add(&kbc_ps2_ali_pci_device); return dev; } diff --git a/src/sio/sio_fdc37c93x.c b/src/sio/sio_fdc37c93x.c index dce5b11dc..305aa3e3b 100644 --- a/src/sio/sio_fdc37c93x.c +++ b/src/sio/sio_fdc37c93x.c @@ -1835,20 +1835,20 @@ fdc37c93x_init(const device_t *info) switch (dev->kbc_type) { case FDC37C931: - dev->kbc = device_add(&keyboard_ps2_compaq_device); + dev->kbc = device_add(&kbc_ps2_compaq_device); break; case FDC37C932: - dev->kbc = device_add(&keyboard_ps2_intel_ami_pci_device); + dev->kbc = device_add(&kbc_ps2_intel_ami_pci_device); break; case FDC37C933: default: - dev->kbc = device_add(&keyboard_ps2_pci_device); + dev->kbc = device_add(&kbc_ps2_pci_device); break; case FDC37C935: - dev->kbc = device_add(&keyboard_ps2_phoenix_device); + dev->kbc = device_add(&kbc_ps2_phoenix_device); break; case FDC37C937: - dev->kbc = device_add(&keyboard_ps2_phoenix_pci_device); + dev->kbc = device_add(&kbc_ps2_phoenix_pci_device); break; } diff --git a/src/sio/sio_pc87307.c b/src/sio/sio_pc87307.c index 7e51c5975..2d23a95ac 100644 --- a/src/sio/sio_pc87307.c +++ b/src/sio/sio_pc87307.c @@ -853,14 +853,14 @@ pc87307_init(const device_t *info) switch (info->local & PCX730X_KBC) { default: case PCX730X_AMI: - dev->kbc = device_add(&keyboard_ps2_intel_ami_pci_device); + dev->kbc = device_add(&kbc_ps2_intel_ami_pci_device); break; /* Optiplex! */ case PCX730X_PHOENIX_42: - dev->kbc = device_add(&keyboard_ps2_phoenix_device); + dev->kbc = device_add(&kbc_ps2_phoenix_device); break; case PCX730X_PHOENIX_42I: - dev->kbc = device_add(&keyboard_ps2_phoenix_pci_device); + dev->kbc = device_add(&kbc_ps2_phoenix_pci_device); break; } diff --git a/src/sio/sio_pc87309.c b/src/sio/sio_pc87309.c index 5a3f0d828..63aad03b4 100644 --- a/src/sio/sio_pc87309.c +++ b/src/sio/sio_pc87309.c @@ -688,14 +688,14 @@ pc87309_init(const device_t *info) switch (info->local & PCX730X_KBC) { default: case PCX730X_AMI: - dev->kbc = device_add(&keyboard_ps2_intel_ami_pci_device); + dev->kbc = device_add(&kbc_ps2_intel_ami_pci_device); break; /* Optiplex! */ case PCX730X_PHOENIX_42: - dev->kbc = device_add(&keyboard_ps2_phoenix_device); + dev->kbc = device_add(&kbc_ps2_phoenix_device); break; case PCX730X_PHOENIX_42I: - dev->kbc = device_add(&keyboard_ps2_phoenix_pci_device); + dev->kbc = device_add(&kbc_ps2_phoenix_pci_device); break; } diff --git a/src/sio/sio_vl82c113.c b/src/sio/sio_vl82c113.c index b000fe5dd..bf63e9023 100644 --- a/src/sio/sio_vl82c113.c +++ b/src/sio/sio_vl82c113.c @@ -143,7 +143,7 @@ vl82c113_init(UNUSED(const device_t *info)) dev->nvr_base = 0x0070; /* Commands are standard. */ - dev->kbc = device_add(&keyboard_at_device); + dev->kbc = device_add(&kbc_at_device); vl82c113_reset(dev); diff --git a/src/sound/CMakeLists.txt b/src/sound/CMakeLists.txt index 66a0ee4e3..9e2a75198 100644 --- a/src/sound/CMakeLists.txt +++ b/src/sound/CMakeLists.txt @@ -36,6 +36,7 @@ add_library(snd OBJECT snd_azt2316a.c snd_cms.c snd_cmi8x38.c + snd_covox.c snd_cs423x.c snd_gus.c snd_sb.c diff --git a/src/sound/midi_opl4.c b/src/sound/midi_opl4.c index 5ec15cc7c..25f44c9e7 100644 --- a/src/sound/midi_opl4.c +++ b/src/sound/midi_opl4.c @@ -436,7 +436,8 @@ note_on(uint8_t note, uint8_t velocity, MIDI_CHANNEL_DATA *midi_channel, opl4_mi const YRW801_REGION_DATA_PTR *region_ptr = &snd_yrw801_regions[0]; const YRW801_WAVE_DATA *wave_data[2]; VOICE_DATA *voice[2]; - uint8_t i = 0, voices = 0; + int i = 0; + uint8_t voices = 0; while (opl4_midi->gen_in_progress) { } diff --git a/src/sound/snd_adlib.c b/src/sound/snd_adlib.c index 17990e842..b21a1f472 100644 --- a/src/sound/snd_adlib.c +++ b/src/sound/snd_adlib.c @@ -1,3 +1,21 @@ +/* + * 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. + * + * Adlib emulation. + * + * Authors: Sarah Walker, + * Miran Grca, + * Jasmine Iwanek, + * + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2025 Miran Grca. + * Copyright 2024-2025 Jasmine Iwanek. + */ #include #include #include @@ -33,7 +51,7 @@ adlib_log(const char *fmt, ...) # define adlib_log(fmt, ...) #endif -typedef struct adlib_t { +typedef struct adlib_s { fm_drv_t opl; uint8_t pos_regs[8]; diff --git a/src/sound/snd_covox.c b/src/sound/snd_covox.c new file mode 100644 index 000000000..aaffbcf08 --- /dev/null +++ b/src/sound/snd_covox.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. + * + * Rainbow Arts PC-Soundman Emulation + * + * Authors: Jasmine Iwanek, + * + * Copyright 2025 Jasmine Iwanek. + */ +#include +#include +#include +#include +#include +#define HAVE_STDARG_H + +#include <86box/86box.h> +#include <86box/device.h> +#include <86box/io.h> +#include <86box/mca.h> +#include <86box/sound.h> +#include <86box/filters.h> +#include <86box/timer.h> +#include <86box/snd_opl.h> +#include <86box/plat_fallthrough.h> +#include <86box/plat_unused.h> + +#define COVOX_SOUNDMAN 0 +#define COVOX_VOICEMASTERKEY 1 +#define COVOX_SOUNDMASTERPLUS 2 +#define COVOX_ISADACR0 3 +#define COVOX_ISADACR1 4 + +#ifdef ENABLE_COVOX_LOG +int covox_do_log = ENABLE_COVOX_LOG; + +static void +covox_log(const char *fmt, ...) +{ + va_list ap; + + if (covox_do_log) { + va_start(ap, fmt); + pclog_ex(fmt, ap); + va_end(ap); + } +} +#else +# define covox_log(fmt, ...) +#endif + +typedef struct covox_s { + fm_drv_t opl; + + uint8_t dac_val; + + int16_t buffer[2][SOUNDBUFLEN]; + int pos; +} covox_t; + +// TODO: Can this be rolled into covox_get_buffer? +static void +covox_update(covox_t *covox) +{ + for (; covox->pos < sound_pos_global; covox->pos++) { + covox->buffer[0][covox->pos] = (int8_t) (covox->dac_val ^ 0x80) * 0x40; + covox->buffer[1][covox->pos] = (int8_t) (covox->dac_val ^ 0x80) * 0x40; + } +} + +uint8_t +covox_read(uint16_t addr, void *priv) +{ +#if 0 + const covox_t *covox = (covox_t *) priv; +#endif + + covox_log("covox_read: addr=%04x\n", addr); + + return 0xff; +} + +void +covox_write(uint16_t addr, uint8_t val, void *priv) +{ + covox_t *covox = (covox_t *) priv; + + covox_log("covox_write: addr=%04x val=%02x\n", addr, val); + + switch (addr) { + case 0x221: // Soundman + case 0x229: // Soundman + case 0x22f: // Soundman, voicemasterkey + case 0x231: // isadac-r1? + case 0x24f: // voicemasterkey + case 0x279: // isadac-r0 (lPT2) + case 0x28f: // voicemasterkey + case 0x2cf: // voicemasterkey + case 0x301: // Soundman + case 0x309: // Soundman + case 0x30f: // soundman + case 0x331: // soundmasterplus + case 0x339: // soundmasterplus + case 0x371: // isadac-r0 + case 0x379: // isadac-r0 (lPT1) + case 0x381: // isadac-r0 + case 0x3bd: // isadac-r0 (lPT1-Mono) + covox->dac_val = val; + // TODO: Is this needed here? + covox_update(covox); + break; + + default: + break; + } +} + +static void +covox_get_buffer(int32_t *buffer, int len, void *priv) +{ + covox_t *covox = (covox_t *) priv; + + covox_update(covox); + + for (int c = 0; c < len; c++) { + buffer[c * 2] += dac_iir(0, covox->buffer[0][c]); + buffer[c * 2 + 1] += dac_iir(1, covox->buffer[1][c]); + } + covox->pos = 0; +} + +static void +covox_get_music_buffer(int32_t *buffer, int len, void *priv) +{ + covox_t *covox = (covox_t *) priv; + + const int32_t *opl_buf = covox->opl.update(covox->opl.priv); + + for (int c = 0; c < len * 2; c++) + buffer[c] += opl_buf[c]; + + if (covox->opl.reset_buffer) + covox->opl.reset_buffer(covox->opl.priv); +} + +#define IO_SETHANDLER_COVOX_DAC(addr, len) \ + io_sethandler((addr), (len), \ + covox_read, NULL, NULL, \ + covox_write, NULL, NULL, \ + covox) + +#define IO_SETHANDLER_COVOX_ADLIB(addr, len) \ + io_sethandler((addr), (len), \ + covox->opl.read, NULL, NULL, \ + covox->opl.write, NULL, NULL, \ + covox->opl.priv) + +void * +covox_init(UNUSED(const device_t *info)) +{ + covox_t *covox = calloc(1, sizeof(covox_t)); + uint8_t has_adlib = 0; + uint8_t has_stereo = 0; + uint8_t fixed_address = 0; + if (!covox) + return NULL; + + covox_log("covox_init\n"); + switch (info->local) { + case COVOX_SOUNDMAN: + fixed_address = 1; + fallthrough; + case COVOX_SOUNDMASTERPLUS: + has_adlib = 1; + break; + + case COVOX_ISADACR0: + has_stereo = 1; + break; + + case COVOX_ISADACR1: + has_stereo = 2; + break; + + default: + break; + } + + if (fixed_address) { + IO_SETHANDLER_COVOX_DAC(0x220, 0x0002); + IO_SETHANDLER_COVOX_DAC(0x228, 0x0002); + IO_SETHANDLER_COVOX_DAC(0x22e, 0x0002); +#if 0 + // According to vgmpf, this is the address + IO_SETHANDLER_COVOX_DAC(0x22f, 0x0001); +#endif + IO_SETHANDLER_COVOX_DAC(0x300, 0x0002); + IO_SETHANDLER_COVOX_DAC(0x308, 0x0002); + IO_SETHANDLER_COVOX_DAC(0x30e, 0x0002); + } else { + IO_SETHANDLER_COVOX_DAC(device_get_config_hex16("base"), 0x0002); + + // TODO: Needs more work + if (has_stereo) + IO_SETHANDLER_COVOX_DAC(device_get_config_hex16("base2"), 0x0002); + } + sound_add_handler(covox_get_buffer, covox); + + if (has_adlib) { + fm_driver_get(FM_YM3812, &covox->opl); + if (fixed_address) { + // Adlib Clone part + IO_SETHANDLER_COVOX_ADLIB(0x380, 0x0002); + IO_SETHANDLER_COVOX_ADLIB(0x388, 0x0002); + IO_SETHANDLER_COVOX_ADLIB(0x38e, 0x0002); + } else + IO_SETHANDLER_COVOX_ADLIB(device_get_config_hex16("adlibbase"), 0x0002); + + music_add_handler(covox_get_music_buffer, covox); + } + + return covox; +} + +void +covox_close(void *priv) +{ + covox_t *covox = (covox_t *) priv; + + if (covox) + free(covox); +} + +// clang-format off +static const device_config_t voicemasterkey_config[] = { + { + .name = "base", + .description = "Address", + .type = CONFIG_HEX16, + .default_string = NULL, + .default_int = 0x388, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "0x22f", .value = 0x22f }, + { .description = "0x24f", .value = 0x24f }, + { .description = "0x28f", .value = 0x28f }, + { .description = "0x2cf", .value = 0x2cf }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { .name = "", .description = "", .type = CONFIG_END } +}; +// clang-format on + +// Note: We don't support sound input on this yet +const device_t voicemasterkey_device = { + .name = "Covox Voice Master Key", + .internal_name = "voicemasterkey", + .flags = DEVICE_ISA | DEVICE_SIDECAR, + .local = COVOX_VOICEMASTERKEY, + .init = covox_init, + .close = covox_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = voicemasterkey_config +}; + +// clang-format off +static const device_config_t soundmasterplus_config[] = { + { + .name = "base", + .description = "Address", + .type = CONFIG_HEX16, + .default_string = NULL, + .default_int = 0x330, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "0x330", .value = 0x330 }, + { .description = "0x338", .value = 0x338 }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { + .name = "adlibbase", + .description = "Adlib Address", + .type = CONFIG_HEX16, + .default_string = NULL, + .default_int = 0x388, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "0x388", .value = 0x388 }, + { .description = "0x380", .value = 0x380 }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { .name = "", .description = "", .type = CONFIG_END } +}; +// clang-format on + +const device_t soundmasterplus_device = { + .name = "Covox Sound Master Plus", + .internal_name = "soundmasterplus", + .flags = DEVICE_ISA | DEVICE_SIDECAR, + .local = COVOX_SOUNDMASTERPLUS, + .init = covox_init, + .close = covox_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = soundmasterplus_config +}; + +// clang-format off +static const device_config_t isadacr0_config[] = { + { + .name = "base", + .description = "Address", + .type = CONFIG_HEX16, + .default_string = NULL, + .default_int = 0x380, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "0x220", .value = 0x220 }, + { .description = "0x228", .value = 0x228 }, + { .description = "0x22e", .value = 0x22e }, + { .description = "0x230", .value = 0x230 }, + { .description = "0x24e", .value = 0x24e }, + { .description = "0x278", .value = 0x278 }, + { .description = "0x28e", .value = 0x28e }, + { .description = "0x2ce", .value = 0x2ce }, + { .description = "0x300", .value = 0x300 }, + { .description = "0x308", .value = 0x308 }, + { .description = "0x303", .value = 0x30e }, + { .description = "0x330", .value = 0x330 }, + { .description = "0x338", .value = 0x338 }, + { .description = "0x370", .value = 0x370 }, + { .description = "0x378", .value = 0x378 }, + { .description = "0x380", .value = 0x380 }, + { .description = "0x3bc", .value = 0x3bc }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { + .name = "base2", + .description = "Address", + .type = CONFIG_HEX16, + .default_string = NULL, + .default_int = 0x370, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "0x220", .value = 0x220 }, + { .description = "0x228", .value = 0x228 }, + { .description = "0x22e", .value = 0x22e }, + { .description = "0x230", .value = 0x230 }, + { .description = "0x24e", .value = 0x24e }, + { .description = "0x278", .value = 0x278 }, + { .description = "0x28e", .value = 0x28e }, + { .description = "0x2ce", .value = 0x2ce }, + { .description = "0x300", .value = 0x300 }, + { .description = "0x308", .value = 0x308 }, + { .description = "0x303", .value = 0x30e }, + { .description = "0x330", .value = 0x330 }, + { .description = "0x338", .value = 0x338 }, + { .description = "0x370", .value = 0x370 }, + { .description = "0x378", .value = 0x378 }, + { .description = "0x380", .value = 0x380 }, + { .description = "0x3bc", .value = 0x3bc }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { .name = "", .description = "", .type = CONFIG_END } +}; +// clang-format on + +// Note: We don't support stereo on this yet +const device_t isadacr0_device = { + .name = "ISA DAC-r0", + .internal_name = "isadacr0", + .flags = DEVICE_ISA | DEVICE_SIDECAR, + .local = COVOX_ISADACR0, + .init = covox_init, + .close = covox_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = isadacr0_config +}; + +// clang-format off +static const device_config_t isadacr1_config[] = { + { + .name = "base", + .description = "Address", + .type = CONFIG_HEX16, + .default_string = NULL, + .default_int = 0x378, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "0x378", .value = 0x378 }, + { .description = "0x3bc", .value = 0x3bc }, + { .description = "0x278", .value = 0x278 }, + { .description = "0x230", .value = 0x230 }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { + .name = "base2", + .description = "Address", + .type = CONFIG_HEX16, + .default_string = NULL, + .default_int = 0x278, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "0x378", .value = 0x378 }, + { .description = "0x3bc", .value = 0x3bc }, + { .description = "0x278", .value = 0x278 }, + { .description = "0x230", .value = 0x230 }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { .name = "", .description = "", .type = CONFIG_END } +}; +// clang-format on + +// Note: We don't support stereo on this yet +const device_t isadacr1_device = { + .name = "ISA DAC-r1", + .internal_name = "isadacr1", + .flags = DEVICE_ISA | DEVICE_SIDECAR, + .local = COVOX_ISADACR1, + .init = covox_init, + .close = covox_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = isadacr1_config +}; + +const device_t soundman_device = { + .name = "Rainbow Arts PC-Soundman", + .internal_name = "soundman", + .flags = DEVICE_ISA | DEVICE_SIDECAR, + .local = COVOX_SOUNDMAN, + .init = covox_init, + .close = covox_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; diff --git a/src/sound/sound.c b/src/sound/sound.c index 615df88bc..c81dc47b0 100644 --- a/src/sound/sound.c +++ b/src/sound/sound.c @@ -12,9 +12,11 @@ * * Authors: Sarah Walker, * Miran Grca, + * Jasmine Iwanek, * * Copyright 2008-2020 Sarah Walker. - * Copyright 2016-2020 Miran Grca. + * Copyright 2016-2025 Miran Grca. + * Copyright 2024-2025 Jasmine Iwanek. */ #include #include @@ -111,6 +113,11 @@ static const SOUND_CARD sound_cards[] = { { &ssi2001_device }, { &mmb_device }, { &pasplus_device }, + { &voicemasterkey_device }, + { &soundmasterplus_device }, + { &soundman_device }, + { &isadacr0_device }, + { &isadacr1_device }, { &sb_1_device }, { &sb_15_device }, { &sb_2_device }, diff --git a/src/unix/CMakeLists.txt b/src/unix/CMakeLists.txt index 91fa25f39..724ab041f 100644 --- a/src/unix/CMakeLists.txt +++ b/src/unix/CMakeLists.txt @@ -32,6 +32,16 @@ set(THREADS_PREFER_PTHREAD_FLAG TRUE) find_package(Threads REQUIRED) target_link_libraries(86Box Threads::Threads) +find_package(SDL2 REQUIRED) +include_directories(${SDL2_INCLUDE_DIRS}) +if(STATIC_BUILD AND TARGET SDL2::SDL2-static) + target_link_libraries(86Box SDL2::SDL2-static) +elseif(TARGET SDL2::SDL2) + target_link_libraries(86Box SDL2::SDL2) +else() + target_link_libraries(86Box ${SDL2_LIBRARIES}) +endif() + add_library(ui OBJECT unix_sdl.c unix_cdrom.c diff --git a/src/unix/unix.c b/src/unix/unix.c index cfd5d9244..5bd7eac46 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -1006,12 +1006,12 @@ monitor_thread(UNUSED(void *param)) printf( "fddload - Load floppy disk image into drive .\n" "cdload - Load CD-ROM image into drive .\n" - "zipload - Load ZIP image into ZIP drive .\n" + "rdiskload - Load removable disk image into removable disk drive .\n" "cartload - Load cartridge image into cartridge drive .\n" "moload - Load MO image into MO drive .\n\n" "fddeject - eject disk from floppy drive .\n" "cdeject - eject disc from CD-ROM drive .\n" - "zipeject - eject ZIP image from ZIP drive .\n" + "rdiskeject - eject removable disk image from removable disk drive .\n" "carteject - eject cartridge from drive .\n" "moeject - eject image from MO drive .\n\n" "hardreset - hard reset the emulated system.\n" @@ -1116,8 +1116,8 @@ monitor_thread(UNUSED(void *param)) mo_eject(atoi(xargv[1])); } else if (strncasecmp(xargv[0], "carteject", 8) == 0 && cmdargc >= 2) { cartridge_eject(atoi(xargv[1])); - } else if (strncasecmp(xargv[0], "zipeject", 8) == 0 && cmdargc >= 2) { - zip_eject(atoi(xargv[1])); + } else if (strncasecmp(xargv[0], "rdiskeject", 8) == 0 && cmdargc >= 2) { + rdisk_eject(atoi(xargv[1])); } else if (strncasecmp(xargv[0], "fddload", 7) == 0 && cmdargc >= 4) { uint8_t id; uint8_t wp; @@ -1184,7 +1184,7 @@ monitor_thread(UNUSED(void *param)) printf("Inserting tape into cartridge holder %hhu: %s\n", id, fn); cartridge_mount(id, fn, wp); } - } else if (strncasecmp(xargv[0], "zipload", 7) == 0 && cmdargc >= 4) { + } else if (strncasecmp(xargv[0], "rdiskload", 7) == 0 && cmdargc >= 4) { uint8_t id; uint8_t wp; bool err = false; @@ -1203,8 +1203,8 @@ monitor_thread(UNUSED(void *param)) if (fn[strlen(fn) - 1] == '\'' || fn[strlen(fn) - 1] == '"') fn[strlen(fn) - 1] = '\0'; - printf("Inserting disk into ZIP drive %c: %s\n", id + 'A', fn); - zip_mount(id, fn, wp); + printf("Inserting disk into removable disk drive %c: %s\n", id + 'A', fn); + rdisk_mount(id, fn, wp); } } free(line); diff --git a/src/unix/unix_cdrom.c b/src/unix/unix_cdrom.c index b1096b0b4..09aaa5092 100644 --- a/src/unix/unix_cdrom.c +++ b/src/unix/unix_cdrom.c @@ -6,7 +6,7 @@ * * This file is part of the 86Box distribution. * - * Handle the platform-side of CDROM/ZIP/MO drives. + * Handle the platform-side of CDROM/RDisk/MO drives. * * * @@ -34,7 +34,7 @@ #include <86box/cdrom.h> #include <86box/cdrom_image.h> #include <86box/mo.h> -#include <86box/zip.h> +#include <86box/rdisk.h> #include <86box/scsi_disk.h> #include <86box/plat.h> #include <86box/ui.h> @@ -220,58 +220,58 @@ mo_reload(uint8_t id) } void -zip_eject(uint8_t id) +rdisk_eject(uint8_t id) { - zip_t *dev = (zip_t *) zip_drives[id].priv; + rdisk_t *dev = (rdisk_t *) rdisk_drives[id].priv; - zip_disk_close(dev); - if (zip_drives[id].bus_type) { + rdisk_disk_close(dev); + if (rdisk_drives[id].bus_type) { /* Signal disk change to the emulated machine. */ - zip_insert(dev); + rdisk_insert(dev); } - ui_sb_update_icon_state(SB_ZIP | id, 1); + ui_sb_update_icon_state(SB_RDISK | id, 1); #if 0 - media_menu_update_zip(id); + media_menu_update_rdisk(id); #endif - ui_sb_update_tip(SB_ZIP | id); + ui_sb_update_tip(SB_RDISK | id); config_save(); } void -zip_mount(uint8_t id, char *fn, uint8_t wp) +rdisk_mount(uint8_t id, char *fn, uint8_t wp) { - zip_t *dev = (zip_t *) zip_drives[id].priv; + rdisk_t *dev = (rdisk_t *) rdisk_drives[id].priv; - zip_disk_close(dev); - zip_drives[id].read_only = wp; - zip_load(dev, fn, 0); + rdisk_disk_close(dev); + rdisk_drives[id].read_only = wp; + rdisk_load(dev, fn, 0); - ui_sb_update_icon_state(SB_ZIP | id, strlen(zip_drives[id].image_path) ? 0 : 1); + ui_sb_update_icon_state(SB_RDISK | id, strlen(rdisk_drives[id].image_path) ? 0 : 1); #if 0 - media_menu_update_zip(id); + media_menu_update_rdisk(id); #endif - ui_sb_update_tip(SB_ZIP | id); + ui_sb_update_tip(SB_RDISK | id); config_save(); } void -zip_reload(uint8_t id) +rdisk_reload(uint8_t id) { - zip_t *dev = (zip_t *) zip_drives[id].priv; + rdisk_t *dev = (rdisk_t *) rdisk_drives[id].priv; - zip_disk_reload(dev); - if (strlen(zip_drives[id].image_path) == 0) { - ui_sb_update_icon_state(SB_ZIP | id, 1); + rdisk_disk_reload(dev); + if (strlen(rdisk_drives[id].image_path) == 0) { + ui_sb_update_icon_state(SB_RDISK | id, 1); } else { - ui_sb_update_icon_state(SB_ZIP | id, 0); + ui_sb_update_icon_state(SB_RDISK | id, 0); } #if 0 - media_menu_update_zip(id); + media_menu_update_rdisk(id); #endif - ui_sb_update_tip(SB_ZIP | id); + ui_sb_update_tip(SB_RDISK | id); config_save(); } diff --git a/src/utils/crc32.c b/src/utils/crc32.c index 5ea85773c..2d3ad867a 100644 --- a/src/utils/crc32.c +++ b/src/utils/crc32.c @@ -22,6 +22,13 @@ #include #include +#define __USE_LARGEFILE64 +#include + +#if (defined(__HAIKU__) || defined(__unix__) || defined(__APPLE__)) && !defined(__linux__) +# define off64_t off_t +#endif + #ifdef MAKECRCH # include # ifndef DYNAMIC_CRC_TABLE @@ -515,6 +522,44 @@ static void braid(crc_t ltl[][256], word_t big[][256], int n, int w) { */ #ifdef ARMCRC32 +/* + Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial, + reflected. For speed, this requires that a not be zero. + */ +static crc_t multmodp(crc_t a, crc_t b) { + crc_t m, p; + + m = (crc_t)1 << 31; + p = 0; + for (;;) { + if (a & m) { + p ^= b; + if ((a & (m - 1)) == 0) + break; + } + m >>= 1; + b = b & 1 ? (b >> 1) ^ POLY : b >> 1; + } + return p; +} + +/* + Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been + initialized. + */ +static crc_t x2nmodp(off64_t n, unsigned k) { + crc_t p; + + p = (crc_t)1 << 31; /* x^0 == 1 */ + while (n) { + if (n & 1) + p = multmodp(x2n_table[k & 31], p); + n >>= 1; + k++; + } + return p; +} + /* Constants empirically determined to maximize speed. These values are from measurements on a Cortex-A57. Your mileage may vary. diff --git a/src/video/vid_8514a.c b/src/video/vid_8514a.c index c8191a876..1c9a482af 100644 --- a/src/video/vid_8514a.c +++ b/src/video/vid_8514a.c @@ -334,6 +334,9 @@ ibm8514_accel_out_fifo(svga_t *svga, uint16_t port, uint32_t val, int len) { ibm8514_t *dev = (ibm8514_t *) svga->dev8514; + if (dev == NULL) + return; + if (port & 0x8000) { if ((port != 0xe2e8) && (port != 0xe2e9) && (port != 0xe6e8) && (port != 0xe6e9)) { if (port & 0x4000) @@ -743,6 +746,9 @@ ibm8514_accel_out(uint16_t port, uint32_t val, svga_t *svga, int len) { ibm8514_t *dev = (ibm8514_t *) svga->dev8514; + if (dev == NULL) + return; + if (port & 0x8000) { if (dev->accel.cmd_back) { dev->fifo_idx++; @@ -777,6 +783,9 @@ ibm8514_accel_in_fifo(svga_t *svga, uint16_t port, int len) uint16_t temp = 0; int cmd = 0; + if (dev == NULL) + return 0xffff; + switch (port) { case 0x82e8: if (len == 2) @@ -4087,7 +4096,7 @@ static const device_config_t isa_ext8514_config[] = { }, { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0xc8000, diff --git a/src/video/vid_bochs_vbe.c b/src/video/vid_bochs_vbe.c index fd5772b19..0ea268ef7 100644 --- a/src/video/vid_bochs_vbe.c +++ b/src/video/vid_bochs_vbe.c @@ -511,7 +511,7 @@ bochs_vbe_outw(const uint16_t addr, const uint16_t val, void *priv) svga_recalctimings(&dev->svga); if (!(val & VBE_DISPI_NOCLEARMEM)) { memset(dev->svga.vram, 0, - dev->vbe_regs[VBE_DISPI_INDEX_YRES] * dev->svga.rowoffset); + (size_t) dev->vbe_regs[VBE_DISPI_INDEX_YRES] * dev->svga.rowoffset); } } else dev->svga.read_bank = dev->svga.write_bank = 0; diff --git a/src/video/vid_sigma.c b/src/video/vid_sigma.c index 6be21ce69..d67b13c0d 100644 --- a/src/video/vid_sigma.c +++ b/src/video/vid_sigma.c @@ -889,7 +889,7 @@ device_config_t sigma_config[] = { }, { .name = "bios_addr", - .description = "BIOS Address", + .description = "BIOS address", .type = CONFIG_HEX20, .default_string = NULL, .default_int = 0xc0000, diff --git a/src/video/vid_svga.c b/src/video/vid_svga.c index 9d5841a94..113a8984f 100644 --- a/src/video/vid_svga.c +++ b/src/video/vid_svga.c @@ -1212,7 +1212,7 @@ svga_recalctimings(svga_t *svga) int y_start = enable_overscan ? 0 : (svga->monitor->mon_overscan_y >> 1); int x_start = enable_overscan ? 0 : (svga->monitor->mon_overscan_x >> 1); video_wait_for_buffer_monitor(svga->monitor_index); - memset(svga->monitor->target_buffer->dat, 0, svga->monitor->target_buffer->w * svga->monitor->target_buffer->h * 4); + memset(svga->monitor->target_buffer->dat, 0, (size_t) svga->monitor->target_buffer->w * svga->monitor->target_buffer->h * 4); video_blit_memtoscreen_monitor(x_start, y_start, svga->monitor->mon_xsize + x_add, svga->monitor->mon_ysize + y_add, svga->monitor_index); video_wait_for_buffer_monitor(svga->monitor_index); svga->dpms_ui = 1; @@ -1443,8 +1443,10 @@ svga_poll(void *priv) svga->memaddr_backup = (svga->memaddr_backup << 2); svga->scanline = 0; - if (svga->attrregs[0x10] & 0x20) - svga->panning_blank = 1; + if (svga->attrregs[0x10] & 0x20) { + svga->scrollcache = 0; + svga->x_add = svga->left_overscan; + } } } if (svga->vc == svga->dispend) { @@ -1534,27 +1536,6 @@ svga_poll(void *priv) svga->dispon = 1; svga->displine = (svga->interlace && svga->oddeven) ? 1 : 0; - svga->linecountff = 0; - - svga->hwcursor_on = 0; - svga->hwcursor_latch = svga->hwcursor; - - svga->dac_hwcursor_on = 0; - svga->dac_hwcursor_latch = svga->dac_hwcursor; - - svga->overlay_on = 0; - svga->overlay_latch = svga->overlay; - - svga->panning_blank = 0; - } - - if (svga->scanline == (svga->crtc[10] & 31)) - svga->cursorvisible = 1; - - if (svga->panning_blank) { - svga->scrollcache = 0; - svga->x_add = svga->left_overscan; - } else { svga->scrollcache = (svga->attrregs[0x13] & 0x0f); if (!(svga->gdcreg[6] & 1) && !(svga->attrregs[0x10] & 1)) { /*Text mode*/ if (svga->seqregs[1] & 1) @@ -1574,7 +1555,20 @@ svga_poll(void *priv) svga->scrollcache <<= 1; svga->x_add = svga->left_overscan - svga->scrollcache; + + svga->linecountff = 0; + + svga->hwcursor_on = 0; + svga->hwcursor_latch = svga->hwcursor; + + svga->dac_hwcursor_on = 0; + svga->dac_hwcursor_latch = svga->dac_hwcursor; + + svga->overlay_on = 0; + svga->overlay_latch = svga->overlay; } + if (svga->scanline == (svga->crtc[10] & 31)) + svga->cursorvisible = 1; } } diff --git a/src/video/vid_svga_render.c b/src/video/vid_svga_render.c index b3a5c0192..f43db41c4 100644 --- a/src/video/vid_svga_render.c +++ b/src/video/vid_svga_render.c @@ -86,9 +86,14 @@ svga_render_blank(svga_t *svga) } uint32_t *line_ptr = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add]; - uint32_t line_width = (uint32_t) (svga->hdisp + svga->scrollcache) * char_width * sizeof(uint32_t); + int32_t line_width = (uint32_t) (svga->hdisp + svga->scrollcache) * char_width * sizeof(uint32_t); - if ((svga->hdisp + svga->scrollcache) > 0) + if (svga->x_add < 0) { + line_ptr = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][0]; + line_width -= svga->x_add; + } + + if (((svga->hdisp + svga->scrollcache) > 0) && (line_width >= 0)) memset(line_ptr, 0, line_width); } @@ -102,7 +107,8 @@ svga_render_overscan_left(svga_t *svga) return; uint32_t *line_ptr = svga->monitor->target_buffer->line[svga->displine + svga->y_add]; - for (int i = 0; i < svga->x_add; i++) + + if (svga->x_add >= 0) for (int i = 0; i < svga->x_add; i++) *line_ptr++ = svga->overscan_color; } @@ -746,7 +752,7 @@ svga_render_indexed_gfx(svga_t *svga, bool highres, bool combine8bits) if (svga->render_line_offset) { if (svga->render_line_offset > 0) { - memset(p, svga->overscan_color, charwidth * svga->render_line_offset * sizeof(uint32_t)); + memset(p, svga->overscan_color, (size_t) charwidth * svga->render_line_offset * sizeof(uint32_t)); p += charwidth * svga->render_line_offset; } } @@ -911,7 +917,7 @@ svga_render_indexed_gfx(svga_t *svga, bool highres, bool combine8bits) if (svga->render_line_offset < 0) { uint32_t *orig_line = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add]; memmove(orig_line, orig_line + (charwidth * -svga->render_line_offset), (svga->hdisp) * 4); - memset((orig_line + svga->hdisp) - (charwidth * -svga->render_line_offset), svga->overscan_color, charwidth * -svga->render_line_offset * 4); + memset((orig_line + svga->hdisp) - (charwidth * -svga->render_line_offset), svga->overscan_color, (size_t) charwidth * -svga->render_line_offset * 4); } } diff --git a/src/video/video.c b/src/video/video.c index 785479e15..c8dc137c5 100644 --- a/src/video/video.c +++ b/src/video/video.c @@ -1058,20 +1058,20 @@ loadfont_common(FILE *fp, int format) for (uint16_t c = d; c < d + 256; c++) { (void) !fread(&fontdatm[c][8], 1, 8, fp); } - for (uint16_t c = d + 256; c < d + 512; c++) { + for (uint32_t c = d + 256; c < d + 512; c++) { (void) !fread(&fontdatm[c][8], 1, 8, fp); } - for (uint16_t c = d; c < d + 256; c++) { + for (uint32_t c = d; c < d + 256; c++) { (void) !fread(&fontdatm[c][0], 1, 8, fp); } - for (uint16_t c = d + 256; c < d + 512; c++) { + for (uint32_t c = d + 256; c < d + 512; c++) { (void) !fread(&fontdatm[c][0], 1, 8, fp); } fseek(fp, 4096, SEEK_CUR); /* Skip blank section */ - for (uint16_t c = d; c < d + 256; c++) { + for (uint32_t c = d; c < d + 256; c++) { (void) !fread(&fontdat[c][0], 1, 8, fp); } - for (uint16_t c = d + 256; c < d + 512; c++) { + for (uint32_t c = d + 256; c < d + 512; c++) { (void) !fread(&fontdat[c][0], 1, 8, fp); } }