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
This commit is contained in:
cam900 2020-05-30 11:41:03 +09:00 committed by GitHub
parent 57da50ab51
commit 3ba42de527
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 65 additions and 15 deletions

View File

@ -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);

View File

@ -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"

View File

@ -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