From 0d38db90dc6e48627d0c174d0543bd5262371016 Mon Sep 17 00:00:00 2001 From: angelosa Date: Sat, 24 Dec 2022 02:06:03 +0100 Subject: misc/gamtor.cpp: offset bit 1 in VGA memory bankswitches to char RAM, make it to display initial POST messages --- src/devices/video/pc_vga.cpp | 16 ++++++++++++++-- src/devices/video/pc_vga.h | 3 +++ src/mame/misc/gamtor.cpp | 8 ++++---- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/devices/video/pc_vga.cpp b/src/devices/video/pc_vga.cpp index 158a1c66a9f..4e6304d820e 100644 --- a/src/devices/video/pc_vga.cpp +++ b/src/devices/video/pc_vga.cpp @@ -4996,18 +4996,24 @@ void s3_vga_device::mem_w(offs_t offset, uint8_t data) /****************************************** -gamtor.c implementation (TODO: identify the video card) +gamtor.cpp implementation ******************************************/ +// TODO: looks like custom SVGA implementation, move to own file uint8_t gamtor_vga_device::mem_r(offs_t offset) { + if (!machine().side_effects_disabled()) + logerror("Reading gamtor SVGA memory %08x\n", offset); return vga.memory[offset]; } void gamtor_vga_device::mem_w(offs_t offset, uint8_t data) { - vga.memory[offset] = data; + if (offset & 2) + vga.memory[(offset >> 2) + 0x20000] = data; + else + vga.memory[(offset & 1) | (offset >> 1)] = data; } @@ -5083,6 +5089,12 @@ void gamtor_vga_device::port_03d0_w(offs_t offset, uint8_t data) } } +uint16_t gamtor_vga_device::offset() +{ + // TODO: pinpoint whatever extra register that wants this shifted by 1 + return vga_device::offset() << 1; +} + uint16_t ati_vga_device::offset() { //popmessage("Offset: %04x %s %s %s %s",vga.crtc.offset,vga.crtc.dw?"DW":"--",vga.crtc.word_mode?"BYTE":"WORD",(ati.ext_reg[0x33] & 0x40) ? "PEL" : "---",(ati.ext_reg[0x30] & 0x20) ? "256" : "---"); diff --git a/src/devices/video/pc_vga.h b/src/devices/video/pc_vga.h index ff381d0340e..1d470821ec7 100644 --- a/src/devices/video/pc_vga.h +++ b/src/devices/video/pc_vga.h @@ -691,6 +691,9 @@ public: virtual void port_03d0_w(offs_t offset, uint8_t data) override; virtual uint8_t mem_r(offs_t offset) override; virtual void mem_w(offs_t offset, uint8_t data) override; + +protected: + virtual uint16_t offset() override; }; diff --git a/src/mame/misc/gamtor.cpp b/src/mame/misc/gamtor.cpp index 45822e65730..e6f5b87bc3f 100644 --- a/src/mame/misc/gamtor.cpp +++ b/src/mame/misc/gamtor.cpp @@ -68,11 +68,11 @@ void gaminator_state::gaminator_map(address_map &map) /* standard VGA */ //map(0x40000000, 0x40000fff).ram(); // regs - map(0x400003b0, 0x400003bf).rw("vga", FUNC(vga_device::port_03b0_r), FUNC(vga_device::port_03b0_w)); - map(0x400003c0, 0x400003cf).rw("vga", FUNC(vga_device::port_03c0_r), FUNC(vga_device::port_03c0_w)); - map(0x400003d0, 0x400003df).rw("vga", FUNC(vga_device::port_03d0_r), FUNC(vga_device::port_03d0_w)); + map(0x400003b0, 0x400003bf).rw("vga", FUNC(gamtor_vga_device::port_03b0_r), FUNC(gamtor_vga_device::port_03b0_w)); + map(0x400003c0, 0x400003cf).rw("vga", FUNC(gamtor_vga_device::port_03c0_r), FUNC(gamtor_vga_device::port_03c0_w)); + map(0x400003d0, 0x400003df).rw("vga", FUNC(gamtor_vga_device::port_03d0_r), FUNC(gamtor_vga_device::port_03d0_w)); - map(0x44000000, 0x4401ffff).rw("vga", FUNC(vga_device::mem_r), FUNC(vga_device::mem_w)); // VRAM + map(0x44000000, 0x4401ffff).rw("vga", FUNC(gamtor_vga_device::mem_r), FUNC(gamtor_vga_device::mem_w)); // VRAM // map(0x44000000, 0x44007fff).ram().share("tmapram1"); // puts strings here, looks almost like a tilemap, but where are the tiles? // map(0x440a0000, 0x440a1fff).ram().share("tmapram2"); // beetlem (like above, mirror?) -- cgit v1.2.3