From f7c5d9e4f5f1c9c0f6bc4c750630ac7df965a8bb Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Thu, 16 Dec 2021 10:04:38 +0100 Subject: isa wyse700: Make it not completely crash --- src/devices/bus/isa/cga.cpp | 15 ++++++++------- src/devices/bus/isa/cga.h | 1 + src/devices/bus/isa/isa.cpp | 5 +++++ src/devices/bus/isa/isa.h | 1 + 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/devices/bus/isa/cga.cpp b/src/devices/bus/isa/cga.cpp index 532cb06b3d1..d8fb5302eff 100644 --- a/src/devices/bus/isa/cga.cpp +++ b/src/devices/bus/isa/cga.cpp @@ -1367,11 +1367,8 @@ void isa8_cga_pc1512_device::device_reset() void isa8_wyse700_device::change_resolution(uint8_t mode) { int width = 0, height = 0; - if (mode & 2) { - machine().root_device().membank("bank_wy1")->set_base(&m_vram[0x10000]); - } else { - machine().root_device().membank("bank_wy1")->set_base(&m_vram[0x00000]); - } + m_vrambank->set_entry((mode >> 1) & 1); + fprintf(stderr, "screen reconfiguration, mode %02x control %02x\n", mode, m_control); if ((m_control & 0xf0) == (mode & 0xf0)) return; switch(mode & 0xf0) { @@ -1441,7 +1438,7 @@ DEFINE_DEVICE_TYPE(ISA8_WYSE700, isa8_wyse700_device, "wyse700", "Wyse 700") //------------------------------------------------- isa8_wyse700_device::isa8_wyse700_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - isa8_cga_device(mconfig, ISA8_WYSE700, tag, owner, clock), m_bank_offset(0), m_bank_base(0), m_control(0) + isa8_cga_device(mconfig, ISA8_WYSE700, tag, owner, clock), m_vrambank(*this, "wy1"), m_bank_offset(0), m_bank_base(0), m_control(0) { m_vram_size = 0x20000; m_start_offset = 0x18000; @@ -1480,7 +1477,8 @@ void isa8_wyse700_device::device_start() isa8_cga_device::device_start(); m_isa->install_device(0x3d0, 0x3df, read8sm_delegate(*this, FUNC(isa8_wyse700_device::io_read)), write8sm_delegate(*this, FUNC(isa8_wyse700_device::io_write))); - m_isa->install_bank(0xa0000, 0xaffff, &m_vram[0x00000]); + m_vrambank->configure_entries(0, 2, m_vram.data(), 0x10000); + m_isa->install_bank(0xa0000, 0xaffff, m_vrambank); m_isa->install_bank(0xb0000, 0xbffff, &m_vram[0x10000]); } @@ -1490,6 +1488,9 @@ void isa8_wyse700_device::device_reset() m_control = 0; m_bank_offset = 0; m_bank_base = 0; + int width = 640, height = 400; + rectangle visarea(0, width-1, 0, height-1); + m_screen->configure(width, height, visarea, HZ_TO_ATTOSECONDS(60)); } uint32_t isa8_wyse700_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) diff --git a/src/devices/bus/isa/cga.h b/src/devices/bus/isa/cga.h index 070ba54c657..029dc35095f 100644 --- a/src/devices/bus/isa/cga.h +++ b/src/devices/bus/isa/cga.h @@ -192,6 +192,7 @@ public: virtual uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) override; void change_resolution(uint8_t mode); + memory_bank_creator m_vrambank; uint8_t m_bank_offset; uint8_t m_bank_base; uint8_t m_control; diff --git a/src/devices/bus/isa/isa.cpp b/src/devices/bus/isa/isa.cpp index 25f8ea7de5c..d8ac97b547f 100644 --- a/src/devices/bus/isa/isa.cpp +++ b/src/devices/bus/isa/isa.cpp @@ -361,6 +361,11 @@ void isa8_device::install_bank(offs_t start, offs_t end, uint8_t *data) m_memspace->install_ram(start, end, data); } +void isa8_device::install_bank(offs_t start, offs_t end, memory_bank *bank) +{ + m_memspace->install_readwrite_bank(start, end, bank); +} + void isa8_device::unmap_bank(offs_t start, offs_t end) { m_memspace->unmap_readwrite(start, end); diff --git a/src/devices/bus/isa/isa.h b/src/devices/bus/isa/isa.h index 1e9fdaeddfe..ebbfefda262 100644 --- a/src/devices/bus/isa/isa.h +++ b/src/devices/bus/isa/isa.h @@ -152,6 +152,7 @@ public: m_iospace->install_device(addrstart, addrend, device, map, unitmask); } void install_bank(offs_t start, offs_t end, uint8_t *data); + void install_bank(offs_t start, offs_t end, memory_bank *bank); void install_rom(device_t *dev, offs_t start, offs_t end, const char *region); template void install_memory(offs_t start, offs_t end, R rhandler, W whandler) { -- cgit v1.2.3