From 7348a45802f6422a330058484432b5a60b59ecd0 Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 21 Jan 2018 13:59:21 +0100 Subject: [PATCH] The ATi Mach64GX now uses a different bios for the VLB variant, and also added the ISA variant. --- src/video/vid_ati_mach64.c | 38 +++++++++++++++++++++++++++++++++----- src/video/vid_ati_mach64.h | 7 ++++--- src/video/vid_table.c | 8 +++++--- src/video/video.h | 9 +++++---- src/win/win_keyboard.c | 13 ++++++++----- 5 files changed, 55 insertions(+), 20 deletions(-) diff --git a/src/video/vid_ati_mach64.c b/src/video/vid_ati_mach64.c index ca73f3401..864332f4c 100644 --- a/src/video/vid_ati_mach64.c +++ b/src/video/vid_ati_mach64.c @@ -8,13 +8,13 @@ * * ATi Mach64 graphics card emulation. * - * Version: @(#)vid_ati_mach64.c 1.0.8 2017/11/04 + * Version: @(#)vid_ati_mach64.c 1.0.9 2018/01/21 * * Authors: Sarah Walker, * Miran Grca, * - * Copyright 2008-2017 Sarah Walker. - * Copyright 2016,2017 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ #include #include @@ -41,6 +41,8 @@ #endif #define BIOS_ROM_PATH L"roms/video/mach64/bios.bin" +#define BIOS_ISA_ROM_PATH L"roms/video/mach64/mach64.bin" +#define BIOS_VLB_ROM_PATH L"roms/video/mach64/mach64_vlb_dram.bin" #define BIOS_ROMVT2_PATH L"roms/video/mach64/atimach64vt2pci.bin" @@ -3392,7 +3394,12 @@ static void *mach64gx_init(device_t *info) ati_eeprom_load(&mach64->eeprom, L"mach64.nvr", 1); - rom_init(&mach64->bios_rom, BIOS_ROM_PATH, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); + if (info->flags & DEVICE_PCI) + rom_init(&mach64->bios_rom, BIOS_ROM_PATH, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); + else if (info->flags & DEVICE_VLB) + rom_init(&mach64->bios_rom, BIOS_VLB_ROM_PATH, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); + else + rom_init(&mach64->bios_rom, BIOS_ISA_ROM_PATH, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); return mach64; } @@ -3421,6 +3428,14 @@ int mach64gx_available(void) { return rom_present(BIOS_ROM_PATH); } +int mach64gx_isa_available(void) +{ + return rom_present(BIOS_ISA_ROM_PATH); +} +int mach64gx_vlb_available(void) +{ + return rom_present(BIOS_VLB_ROM_PATH); +} int mach64vt2_available(void) { return rom_present(BIOS_ROMVT2_PATH); @@ -3546,13 +3561,26 @@ static device_config_t mach64vt2_config[] = } }; +device_t mach64gx_isa_device = +{ + "ATI Mach64GX ISA", + DEVICE_ISA, + 0, + mach64gx_init, mach64_close, NULL, + mach64gx_isa_available, + mach64_speed_changed, + mach64_force_redraw, + mach64_add_status_info, + mach64gx_config +}; + device_t mach64gx_vlb_device = { "ATI Mach64GX VLB", DEVICE_VLB, 0, mach64gx_init, mach64_close, NULL, - mach64gx_available, + mach64gx_vlb_available, mach64_speed_changed, mach64_force_redraw, mach64_add_status_info, diff --git a/src/video/vid_ati_mach64.h b/src/video/vid_ati_mach64.h index 755619050..49dc5b9c8 100644 --- a/src/video/vid_ati_mach64.h +++ b/src/video/vid_ati_mach64.h @@ -8,14 +8,15 @@ * * ATi Mach64 graphics card emulation. * - * Version: @(#)vid_ati_mach64.h 1.0.0 2017/05/30 + * Version: @(#)vid_ati_mach64.h 1.0.1 2018/01/21 * * Author: Sarah Walker, * Miran Grca, - * Copyright 2008-2017 Sarah Walker. - * Copyright 2016-2017 Miran Grca. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. */ +extern device_t mach64gx_isa_device; extern device_t mach64gx_vlb_device; extern device_t mach64gx_pci_device; extern device_t mach64vt2_device; diff --git a/src/video/vid_table.c b/src/video/vid_table.c index e9b1145d7..5a4e9d6f7 100644 --- a/src/video/vid_table.c +++ b/src/video/vid_table.c @@ -8,13 +8,13 @@ * * Define all known video cards. * - * Version: @(#)vid_table.c 1.0.8 2017/12/31 + * Version: @(#)vid_table.c 1.0.9 2018/01/21 * * Authors: Miran Grca, * Fred N. van Kempen, * - * Copyright 2016,2017 Miran Grca. - * Copyright 2017 Fred N. van Kempen. + * Copyright 2016-2018 Miran Grca. + * Copyright 2017,2018 Fred N. van Kempen. */ #include #include @@ -82,6 +82,8 @@ video_cards[] = { NULL, GFX_NONE }, { "Internal", "internal", NULL, GFX_INTERNAL }, + { "[ISA] ATI Graphics Pro Turbo (Mach64 GX)", "mach64x_vlb", + &mach64gx_isa_device, GFX_MACH64GX_ISA }, { "[ISA] ATI VGA Charger (ATI-28800-5)", "ati28800", &ati28800_device, GFX_VGACHARGER }, { "[ISA] ATI VGA Charger (ATI-28800-5)", "ati28800", diff --git a/src/video/video.h b/src/video/video.h index 338ff6009..6d1ccbfa5 100644 --- a/src/video/video.h +++ b/src/video/video.h @@ -8,15 +8,15 @@ * * Definitions for the video controller module. * - * Version: @(#)video.h 1.0.7 2017/12/31 + * Version: @(#)video.h 1.0.8 2018/01/21 * * Authors: Sarah Walker, * Miran Grca, * Fred N. van Kempen, * - * Copyright 2008-2017 Sarah Walker. - * Copyright 2016,2017 Miran Grca. - * Copyright 2017 Fred N. van Kempen. + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. + * Copyright 2017,2018 Fred N. van Kempen. */ #ifndef EMU_VIDEO_H # define EMU_VIDEO_H @@ -49,6 +49,7 @@ enum { GFX_VGAEDGE16, /* ATI VGA Edge-16 (18800-1) */ GFX_VGACHARGER, /* ATI VGA Charger (28800-5) */ GFX_OTI067, /* Oak OTI-067 */ + GFX_MACH64GX_ISA, /* ATI Graphics Pro Turbo (Mach64) VLB */ GFX_MACH64GX_VLB, /* ATI Graphics Pro Turbo (Mach64) VLB */ GFX_MACH64GX_PCI, /* ATI Graphics Pro Turbo (Mach64) PCI */ GFX_CL_GD5429, /* Cirrus Logic CL-GD5429 */ diff --git a/src/win/win_keyboard.c b/src/win/win_keyboard.c index 287fa2c08..b38cf1fc3 100644 --- a/src/win/win_keyboard.c +++ b/src/win/win_keyboard.c @@ -8,7 +8,7 @@ * * Windows raw keyboard input handler. * - * Version: @(#)win_keyboard.c 1.0.6 2018/01/20 + * Version: @(#)win_keyboard.c 1.0.7 2018/01/20 * * Author: Miran Grca, * @@ -44,7 +44,10 @@ convert_scan_code(UINT16 scan_code) scan_code |= 0x0100; } else if (scan_code == 0xE11D) scan_code = 0xE000; - else if (scan_code > 0x00FF) { + /* E0 00 is sent by some USB keyboards for their special keys, as it is an + invalid scan code (it has no untranslated set 2 equivalent), we mark it + appropriately so it does not get passed through. */ + else if ((scan_code > 0x00FF) || (scan_code == 0xE000)) { scan_code = 0xFFFF; } @@ -134,9 +137,8 @@ keyboard_handle(LPARAM lParam, int infocus) /* If it's not a scan code that starts with 0xE1 */ if (!(rawKB.Flags & RI_KEY_E1)) { - if (rawKB.Flags & RI_KEY_E0) { + if (rawKB.Flags & RI_KEY_E0) scancode |= (0xE0 << 8); - } /* Translate the scan code to 9-bit */ scancode = convert_scan_code(scancode); @@ -180,7 +182,8 @@ keyboard_handle(LPARAM lParam, int infocus) anyway). Also, take a potential mapping into account. */ - } + } else + scancode = 0xFFFF; if (scancode != 0xFFFF) keyboard_input(!(rawKB.Flags & RI_KEY_BREAK), scancode); }