summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2021-07-14 15:20:20 +0200
committer Olivier Galibert <galibert@pobox.com>2021-07-14 15:20:20 +0200
commit14c5988e12c083852b2b6c361d40a4f36f9274bb (patch)
tree3dda610e8c8a73523f1dc1e0bd5e25a7ac660dbe
parent10f7e19aafbe15295af2b9acbbc54d6a6c63800b (diff)
sx1010: main screen turn on
-rw-r--r--src/mame/drivers/sx1000.cpp42
1 files changed, 33 insertions, 9 deletions
diff --git a/src/mame/drivers/sx1000.cpp b/src/mame/drivers/sx1000.cpp
index a2beb876f3f..42e25982647 100644
--- a/src/mame/drivers/sx1000.cpp
+++ b/src/mame/drivers/sx1000.cpp
@@ -69,6 +69,8 @@ public:
: driver_device(mconfig, type, tag)
, m_cpu(*this, "cpu")
, m_ram(*this, "ram")
+ , m_vram(*this, "vram")
+ , m_eprom(*this, "eprom")
, m_pic(*this, "pic")
, m_screen(*this, "screen")
, m_crtc(*this, "crtc")
@@ -87,11 +89,13 @@ protected:
void common(machine_config &config);
private:
- MC6845_UPDATE_ROW(crtc_update_row) {}
+ MC6845_UPDATE_ROW(crtc_update_row);
// devices
required_device<m68010_device> m_cpu;
required_device<ram_device> m_ram;
+ required_shared_ptr<u16> m_vram;
+ required_memory_region m_eprom;
required_device<pic8259_device> m_pic;
@@ -113,17 +117,35 @@ void sx1000_state::init_common()
void sx1000_state::cpu_map(address_map &map)
{
- map(0x000000, 0x007fff).rom().region("eprom", 0x8000); // FIXME: probably mapped/unmapped during reset
+ map(0x000000, 0x00ffff).rom().region(m_eprom, 0); // FIXME: probably mapped/unmapped during reset
- map(0xf00000, 0xf07fff).rom().region("eprom", 0x8000);
- map(0xf08000, 0xf0ffff).rom().region("eprom", 0x0000);
+ map(0xf00000, 0xf0ffff).rom().region(m_eprom, 0);
map(0xf13801, 0xf13801).w(m_crtc, FUNC(hd6345_device::address_w));
map(0xf13901, 0xf13901).rw(m_crtc, FUNC(hd6345_device::register_r), FUNC(hd6345_device::register_w));
map(0xf14001, 0xf14001).lrw8([this]() { return m_pic->read(0); }, "pic_r0", [this](u8 data) { m_pic->write(0, data); }, "pic_w0");
map(0xf14101, 0xf14101).lrw8([this]() { return m_pic->read(1); }, "pic_r1", [this](u8 data) { m_pic->write(1, data); }, "pic_w1");
- map(0xf20000, 0xf23fff).ram().share("nvram");
+ map(0xf20000, 0xf23fff).ram().share(m_vram);
+}
+
+MC6845_UPDATE_ROW( sx1000_state::crtc_update_row )
+{
+ // logerror("ma=%x ra=%d y=%d x_count=%d cursor_x=%d de=%d hbp=%d vbp=%d\n", ma*2, ra, y, x_count, cursor_x, de, hbp, vbp);
+ const u16 *charset = reinterpret_cast<const u16 *>(m_eprom->base() + 0x5c40);
+ const u16 *vram = m_vram + ma;
+ u32 *dest = &bitmap.pix(y);
+ for(u32 x0 = 0; x0 != x_count; x0 ++) {
+ u16 data = *vram++;
+ u16 bitmap = charset[((data & 0xff) << 3) | (ra >> 1)];
+ if(!(ra & 1))
+ bitmap >>= 8;
+ for(u32 x1 = 0; x1 != 8; x1 ++) {
+ u32 color = BIT(bitmap, 7-x1) ? 0xffffff : 0x000000;
+ *dest ++ = color;
+ *dest ++ = color;
+ }
+ }
}
void sx1000_state::common(machine_config &config)
@@ -135,12 +157,12 @@ void sx1000_state::common(machine_config &config)
RAM(config, m_ram);
m_ram->set_default_size("1M");
- NVRAM(config, "nvram");
+ // NVRAM(config, "nvram");
PIC8259(config, m_pic);
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
- m_screen->set_raw(48'800'000, 80*16, 0, 80*16, 25*16, 0, 25*16);
+ m_screen->set_raw(48'800'000 / 2, 80*8, 0, 80*8, 25*16, 0, 25*16);
m_screen->set_screen_update(m_crtc, FUNC(hd6345_device::screen_update));
// htotal = 117
@@ -166,8 +188,10 @@ INPUT_PORTS_END
ROM_START(sx1010)
ROM_REGION16_BE(0x10000, "eprom", 0)
ROM_SYSTEM_BIOS(0, "sx1010", "sx1010")
- ROMX_LOAD("pc1a.u6l8", 0x0001, 0x8000, CRC(75d0f02c) SHA1(dfcc7efc1b5e7b43fc1ee030bef5c75c23d5e742), ROM_SKIP(1) | ROM_BIOS(0))
- ROMX_LOAD("pc1a.u6h8", 0x0000, 0x8000, CRC(a928c0c9) SHA1(712601ee889a0790a7579fe06df20ec7e0a4bb49), ROM_SKIP(1) | ROM_BIOS(0))
+ ROMX_LOAD("pc1a.u6l8", 0x8001, 0x4000, CRC(75d0f02c) SHA1(dfcc7efc1b5e7b43fc1ee030bef5c75c23d5e742), ROM_SKIP(1) | ROM_BIOS(0))
+ ROM_CONTINUE ( 0x0001, 0x4000)
+ ROMX_LOAD("pc1a.u6h8", 0x8000, 0x4000, CRC(a928c0c9) SHA1(712601ee889a0790a7579fe06df20ec7e0a4bb49), ROM_SKIP(1) | ROM_BIOS(0))
+ ROM_CONTINUE ( 0x0000, 0x4000)
ROM_END
} // anonymous namespace