From 3ba42de527543564b1f91a79e2cc9754d0a55890 Mon Sep 17 00:00:00 2001 From: cam900 Date: Sat, 30 May 2020 11:41:03 +0900 Subject: [PATCH] k037122.cpp: Update hardware information (#6759) * k037122.cpp: Update hardware information hornet.cpp: Add screen raw parameters (verified in both voodoo and K037122 display timing parameters), Add notes * k037122.cpp: Adjust value in display timing is still unknown * k037122.cpp: Adjust display timing register --- src/mame/drivers/hornet.cpp | 24 +++++++---------- src/mame/video/k037122.cpp | 54 +++++++++++++++++++++++++++++++++++++ src/mame/video/k037122.h | 2 ++ 3 files changed, 65 insertions(+), 15 deletions(-) diff --git a/src/mame/drivers/hornet.cpp b/src/mame/drivers/hornet.cpp index 6efaf62cc7f..f55c4ac1330 100644 --- a/src/mame/drivers/hornet.cpp +++ b/src/mame/drivers/hornet.cpp @@ -1157,7 +1157,7 @@ void hornet_state::hornet(machine_config &config) // PCB description at top doesn't mention any EEPROM on the base board... // EEPROM_93C46_16BIT(config, "eeprom"); - VOODOO_1(config, m_voodoo[0], STD_VOODOO_1_CLOCK); + VOODOO_1(config, m_voodoo[0], XTAL(50'000'000)); m_voodoo[0]->set_fbmem(2); m_voodoo[0]->set_tmumem(4,0); m_voodoo[0]->set_screen_tag("screen"); @@ -1168,10 +1168,8 @@ void hornet_state::hornet(machine_config &config) /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - // Screeen size and timing is re-calculated later in voodoo card - screen.set_refresh_hz(60); - screen.set_size(64 * 8, 48 * 8); - screen.set_visarea(0, 64 * 8 - 1, 0, 48 * 8 - 1); + // default 24KHz parameter in both 037122 and voodoo, input clock correct? (58~Hz Vsync, 50MHz/3 or 64MHz/4?) + screen.set_raw(XTAL(64'000'000) / 4, 644, 41, 41 + 512, 428, 27, 27 + 384); screen.set_screen_update(FUNC(hornet_state::screen_update)); PALETTE(config, "palette").set_entries(65536); @@ -1223,13 +1221,13 @@ void hornet_state::sscope(machine_config &config) m_k037122_1->set_screen("lscreen"); m_k037122_1->set_palette("palette"); - K037122(config, m_k037122_2, 0); + K037122(config, m_k037122_2, 0); // unknown input clock m_k037122_2->set_screen("rscreen"); m_k037122_2->set_palette("palette"); m_voodoo[0]->set_screen_tag("lscreen"); - VOODOO_1(config, m_voodoo[1], STD_VOODOO_1_CLOCK); + VOODOO_1(config, m_voodoo[1], XTAL(50'000'000)); m_voodoo[1]->set_fbmem(2); m_voodoo[1]->set_tmumem(4, 0); m_voodoo[1]->set_screen_tag("rscreen"); @@ -1242,17 +1240,13 @@ void hornet_state::sscope(machine_config &config) config.device_remove("screen"); screen_device &lscreen(SCREEN(config, "lscreen", SCREEN_TYPE_RASTER)); - // Screeen size and timing is re-calculated later in voodoo card - lscreen.set_refresh_hz(60); - lscreen.set_size(512, 384); - lscreen.set_visarea(0, 512 - 1, 0, 384 - 1); + // default 24KHz parameter in both 037122 and voodoo, input clock correct? (58~Hz Vsync, 50MHz/3 or 64MHz/4?) + lscreen.set_raw(XTAL(64'000'000) / 4, 644, 41, 41 + 512, 428, 27, 27 + 384); lscreen.set_screen_update(FUNC(hornet_state::screen_update)); screen_device &rscreen(SCREEN(config, "rscreen", SCREEN_TYPE_RASTER)); - // Screeen size and timing is re-calculated later in voodoo card - rscreen.set_refresh_hz(60); - rscreen.set_size(512, 384); - rscreen.set_visarea(0, 512 - 1, 0, 384 - 1); + // default 24KHz parameter in both 037122 and voodoo, input clock correct? (58~Hz Vsync, 50MHz/3 or 64MHz/4?) + rscreen.set_raw(XTAL(64'000'000) / 4, 644, 41, 41 + 512, 428, 27, 27 + 384); rscreen.set_screen_update(FUNC(hornet_state::screen_update_rscreen)); /* ADC12138(config, m_adc12138_2, 0); diff --git a/src/mame/video/k037122.cpp b/src/mame/video/k037122.cpp index f03f405d3c3..a4fe25b5884 100644 --- a/src/mame/video/k037122.cpp +++ b/src/mame/video/k037122.cpp @@ -2,6 +2,60 @@ // copyright-holders:Fabio Priuli,Acho A. Tang, R. Belmont /* Konami 037122 + + This chip has CLUT, CRTC, Variable size single tilemap + + Color lookup table is 16 bit BRG format, total 8192 entries (256 color per each tile * 32 banks)) + + Color format (4 byte (1x32bit word) per each color) + Bits Description + fedcba9876543210 fedcba9876543210 + ---------------- xxxxx----------- Blue + ---------------- -----xxxxx------ Red + ---------------- ----------xxxxxx Green + + Tilemap is can be rotated, zoomed, similar as K053936 "simple mode" + Tilemap size is 256x64 (2048x512 pixels) or 128x64 (1024x512 pixels), Each tile is 8bpp 8x8. + + Tile format (4 byte (1x32bit word) per each tile) + Bits Description + fedcba9876543210 fedcba9876543210 + --------x------- ---------------- Flip Y + ---------x------ ---------------- Flip X + ----------xxxxx- ---------------- CLUT Bank index (256 color granularity) + ---------------- --xxxxxxxxxxxxxx Tile code (from character RAM, 8x8 pixel granularity (128 byte)) + + Other bits unknown + + Register map + 00-0f Display timing + 20-2f Scroll/ROZ register + 30-3f Control, etc + + Offset Bits Description + fedcba9876543210 fedcba9876543210 + 00 xxxxxxxxxxxxxxxx ---------------- Horizontal total pixels - 1 + ---------------- xxxxxxxxxxxxxxxx Horizontal sync width - 1 + 04 xxxxxxxxxxxxxxxx ---------------- Horizontal front porch - 5 + ---------------- xxxxxxxxxxxxxxxx Horizontal back porch + 5 + 08 xxxxxxxxxxxxxxxx ---------------- Vertical total pixels - 1 + ---------------- xxxxxxxxxxxxxxxx Vertical sync width - 1 + 0c xxxxxxxxxxxxxxxx ---------------- Vertical front porch + 1 + ---------------- xxxxxxxxxxxxxxxx Vertical back porch - 2 + 20 sxxxxxxxxxxxxxxx ---------------- X counter starting value (12.4 fixed point) + ---------------- sxxxxxxxxxxxxxxx Y counter starting value (12.4 fixed point) + 24 ---------------- sxxxxxxxxxxxxxxx amount to add to the Y counter after each line (4.12 fixed point) + 28 sxxxxxxxxxxxxxxx ---------------- amount to add to the X counter after each horizontal pixel (4.12 fixed point) + 30 ---------------x ---------------- VRAM mapping mode + ---------------0 ---------------- CLUT at 0x00000-0x08000, Display tilemap area at 0x08000-0x18000 (256x64) + ---------------1 ---------------- CLUT at 0x18000-0x20000, Display tilemap area at 0x00000-0x08000 (128x64) + ---------------- -------------xxx Character RAM bank + + Other bits/registers unknown, some registers are used + +TODO: + - verify and implement scroll, ROZ, display timing registers + - verify other unknown but used registers */ #include "emu.h" diff --git a/src/mame/video/k037122.h b/src/mame/video/k037122.h index 36a6b716ded..a39c1d572d5 100644 --- a/src/mame/video/k037122.h +++ b/src/mame/video/k037122.h @@ -11,6 +11,8 @@ class k037122_device : public device_t, public device_gfx_interface { public: + static constexpr feature_type imperfect_features() { return feature::GRAPHICS; } // unimplemented tilemap ROZ, scroll registers + k037122_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // configuration