new NOT WORKING machines (TCH Power Ball) (#12339)

* new NOT WORKING machines
---------
Power Ball [OldComputers ES]
Kong Ball (early prototype) [OldComputers ES]
Radical Enduro (early prototype) [OldComputers ES]

---------
Co-authored-by: David Haywood <hazemamewip@hotmail.com>
This commit is contained in:
mamehaze 2024-05-15 00:45:15 +01:00 committed by GitHub
parent f95fa332ca
commit ff08802442
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 180 additions and 23 deletions

View File

@ -44026,6 +44026,9 @@ speedspn // (c) 1994
topdrive // (c) 1995
@source:tch/wheelfir.cpp
kongball // (c) 199? TCH
pwball // (c) 199? TCH
radendur // (c) 199? TCH
wheelfir // (c) 199? TCH
@source:teamconcepts/comquest.cpp

View File

@ -1,11 +1,11 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood,Tomasz Slanina
// copyright-holders:Tomasz Slanina
/****************************************************************
Wheels & Fire
Power Ball
driver by
David Haywood
Tomasz Slanina
@ -204,12 +204,19 @@ public:
m_eeprom(*this, "eeprom"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
m_adc_eoc(0)
m_adc_eoc(0),
m_is_pwball(false),
m_disable_raster_irq(false)
{ }
void wheelfir(machine_config &config);
void kongball(machine_config &config);
int adc_eoc_r();
void init_pwball();
void init_kongball();
protected:
virtual void machine_start() override;
virtual void video_start() override;
@ -262,6 +269,9 @@ private:
void wheelfir_main(address_map &map);
void wheelfir_sub(address_map &map);
int m_adc_eoc;
bool m_is_pwball;
bool m_disable_raster_irq;
};
@ -328,13 +338,16 @@ void wheelfir_state::wheelfir_blit_w(offs_t offset, uint16_t data, uint16_t mem_
int page=((m_blitter_data[6])>>10)*0x40000;
if(page>=0x400000) /* src set to unav. page before direct write to the framebuffer */
if (!m_is_pwball)
{
m_direct_write_x0=dst_x0;
m_direct_write_x1=dst_x1;
m_direct_write_y0=dst_y0;
m_direct_write_y1=dst_y1;
m_direct_write_idx=0;
if (page >= 0x400000) /* src set to unav. page before direct write to the framebuffer */
{
m_direct_write_x0 = dst_x0;
m_direct_write_x1 = dst_x1;
m_direct_write_y0 = dst_y0;
m_direct_write_y1 = dst_y1;
m_direct_write_idx = 0;
}
}
if(x_dst_step<0)
@ -409,10 +422,14 @@ void wheelfir_state::wheelfir_blit_w(offs_t offset, uint16_t data, uint16_t mem_
if(scale_x==0 || scale_y==0) return;
const float scale_x_step=100.f/scale_x;
const float scale_y_step=100.f/scale_y;
float scale_x_step = 100.f / scale_x;
float scale_y_step = 100.f / scale_y;
if (m_is_pwball)
{
scale_x_step = 1.0f;
scale_y_step = 1.0f;
}
int vpage=LAYER_FG;
if(m_blitter_data[0x7]&0x10)
@ -445,8 +462,8 @@ void wheelfir_state::wheelfir_blit_w(offs_t offset, uint16_t data, uint16_t mem_
float idx_y = 0;
for(int y=dst_y0; !endy; y+=y_dst_step, idx_y+=scale_y_step)
{
endx=(x==dst_x1);
endy=(y==dst_y1);
endx=(x==(dst_x1+1));
endy=(y==(dst_y1+1));
int xx=src_x0+x_src_step*idx_x;
@ -460,7 +477,7 @@ void wheelfir_state::wheelfir_blit_w(offs_t offset, uint16_t data, uint16_t mem_
int screen_y=y;
if(page>=0x400000)
if ((page>=0x400000) && (!m_is_pwball))
{
//hack for clear
if(screen_x >0 && screen_y >0 && screen_x < width && screen_y <height)
@ -468,7 +485,7 @@ void wheelfir_state::wheelfir_blit_w(offs_t offset, uint16_t data, uint16_t mem_
// m_tmp_bitmap[vpage]->pix(screen_y , screen_x ) =0;
}
}
else
{
if (vpage == LAYER_FG) screen_y&=0xff;
@ -598,7 +615,7 @@ void wheelfir_state::wheelfir_sub(address_map &map)
}
static INPUT_PORTS_START( wheelfir )
static INPUT_PORTS_START( pwball )
PORT_START("P1") /* 16bit */
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
@ -629,12 +646,21 @@ static INPUT_PORTS_START( wheelfir )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("STEERING")
PORT_START("ACCELERATOR")
PORT_START("BRAKE")
INPUT_PORTS_END
static INPUT_PORTS_START( wheelfir )
PORT_INCLUDE(pwball)
PORT_MODIFY("STEERING")
PORT_BIT(0xff, 0x80, IPT_PADDLE) PORT_INVERT PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Steering Wheel") PORT_REVERSE
PORT_START("ACCELERATOR")
PORT_MODIFY("ACCELERATOR")
PORT_BIT(0xff, 0x00, IPT_PEDAL) PORT_INVERT PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Accelerator Pedal") PORT_MINMAX(0x00, 0xff) PORT_REVERSE
PORT_START("BRAKE")
PORT_MODIFY("BRAKE")
PORT_BIT(0xff, 0x00, IPT_PEDAL2) PORT_INVERT PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Brake Pedal") PORT_MINMAX(0x00, 0xff) PORT_REVERSE
INPUT_PORTS_END
@ -664,11 +690,17 @@ TIMER_DEVICE_CALLBACK_MEMBER(wheelfir_state::scanline_timer_callback)
//visible scanline
m_scanline_cnt--;
if(m_scanline_cnt==0)
if ((m_scanline_cnt==0) && (!m_disable_raster_irq))
{
m_maincpu->set_input_line(5, HOLD_LINE); // raster IRQ, changes scroll values for road
}
//m_screen->update_partial(param);
if ((param == 0) && m_is_pwball)
{
m_maincpu->set_input_line(1, HOLD_LINE);
}
}
else
{
@ -719,6 +751,27 @@ void wheelfir_state::ramdac_map(address_map &map)
map(0x000, 0x3ff).rw("ramdac", FUNC(ramdac_device::ramdac_pal_r), FUNC(ramdac_device::ramdac_rgb888_w));
}
static const uint32_t texlayout_xoffset[512] = { STEP512(0,8) };
static const uint32_t texlayout_yoffset[512] = { STEP512(0,4096) };
static const gfx_layout wheelfir512x5125x8_texlayout =
{
512, 512,
RGN_FRAC(1,1),
8,
{ 0,1,2,3,4,5,6,7 },
EXTENDED_XOFFS,
EXTENDED_YOFFS,
512*512*8,
texlayout_xoffset,
texlayout_yoffset
};
static GFXDECODE_START( gfx_wheelfir )
GFXDECODE_ENTRY( "gfx1", 0, wheelfir512x5125x8_texlayout, 0x0, 1 )
GFXDECODE_END
void wheelfir_state::wheelfir(machine_config &config)
{
M68000(config, m_maincpu, 32000000/2);
@ -745,6 +798,8 @@ void wheelfir_state::wheelfir(machine_config &config)
m_screen->screen_vblank().set(FUNC(wheelfir_state::screen_vblank_wheelfir));
m_screen->set_palette(m_palette);
GFXDECODE(config, "gfxdecode", m_palette, gfx_wheelfir);
PALETTE(config, m_palette).set_entries(NUM_COLORS);
ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, m_palette));
ramdac.set_addrmap(0, &wheelfir_state::ramdac_map);
@ -758,7 +813,13 @@ void wheelfir_state::wheelfir(machine_config &config)
SPEAKER(config, "rspeaker").front_right();
DAC_10BIT_R2R(config, "ldac", 0).add_route(ALL_OUTPUTS, "lspeaker", 1.0); // unknown DAC
DAC_10BIT_R2R(config, "rdac", 0).add_route(ALL_OUTPUTS, "rspeaker", 1.0); // unknown DAC
;
}
void wheelfir_state::kongball(machine_config& config)
{
wheelfir(config);
m_subcpu->set_disable(); // sound ROMS were not present, so don't run sound CPU
}
@ -771,7 +832,7 @@ ROM_START( wheelfir )
ROM_LOAD16_BYTE( "tch3.u83", 0x00001, 0x80000, CRC(43c014a6) SHA1(6c01a08dda204f36e8768795dd5d405576a49140) )
ROM_LOAD16_BYTE( "tch11.u65", 0x00000, 0x80000, CRC(fc894b2e) SHA1(ebe6d1adf889731fb6f53b4ce5f09c60e2aefb97) )
ROM_REGION( 0x1000000, "gfx1", ROMREGION_ERASE00 ) // 512x512 gfx pages
ROM_REGION( 0x1000000, "gfx1", ROMREGION_ERASE00 ) // each ROM contains 2 512x512 8bpp gfx pages
ROM_LOAD( "tch4.u52", 0x000000, 0x80000, CRC(fe4bc2c7) SHA1(33a2ef79cb13f9e7e7d513915c6e13c4e7fe0188) )
ROM_LOAD( "tch5.u53", 0x080000, 0x80000, CRC(a38b9ca5) SHA1(083c9f700b9df1039fb553e918e205c6d32057ad) )
ROM_LOAD( "tch6.u54", 0x100000, 0x80000, CRC(2733ae6b) SHA1(ebd91e123b670159f79be19a552d1ae0c8a0faff) )
@ -785,7 +846,100 @@ ROM_START( wheelfir )
ROM_LOAD16_WORD_SWAP( "eeprom", 0x000000, 0x000080, CRC(961e4bc9) SHA1(8944504bf56a272e9aa08185e73c6b4212d52383) )
ROM_END
ROM_START( pwball )
ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "pball.u19", 0x00001, 0x80000, CRC(52f433ce) SHA1(f25c43188c320636d69fec2de2605303ef79a2f8) )
ROM_LOAD16_BYTE( "pball.u21", 0x00000, 0x80000, CRC(c0250bc8) SHA1(c7ad2dd0e7fde337a638b09fd325c0cfe1b0b966) )
ROM_REGION( 0x100000, "subcpu", 0 ) /* 68000 Code + sound samples */
ROM_LOAD16_BYTE( "pball.u63", 0x00001, 0x80000, CRC(ab8bba31) SHA1(cc89d1c8b5998b712161dda4283856acd8d91723) )
ROM_LOAD16_BYTE( "pball.u65", 0x00000, 0x80000, CRC(f2583796) SHA1(f044a575ae3dafaac8ad05aee6d4b672166af969) )
ROM_REGION( 0x1000000, "gfx1", ROMREGION_ERASE00 ) // each ROM contains 2 512x512 8bpp gfx pages
ROM_LOAD( "pball.u52", 0x000000, 0x80000, CRC(ad8567d3) SHA1(348a85388a5a98b3baa9484c947af6f878c4b70b) )
ROM_LOAD( "pball.u53", 0x080000, 0x80000, CRC(9b954f59) SHA1(2cd9afea1677bb11e6d914c14e013da84e623356) )
ROM_LOAD( "pball.u54", 0x100000, 0x80000, CRC(6979682d) SHA1(517abe80f4a44810427dd6da9187141ffd4a881c) )
ROM_LOAD( "pball.u55", 0x180000, 0x80000, CRC(33593547) SHA1(9d13af4644e7fab01005609897c61acc50db8282) )
ROM_LOAD( "pball.u56", 0x200000, 0x80000, CRC(bb64c0ed) SHA1(fa39121978412c02e7eb7adcf4d3b0b012904fee) )
ROM_LOAD( "pball.u57", 0x280000, 0x80000, CRC(eb187063) SHA1(accd174cf5f582d6ed7ab3373bbe9e1bb1d1dbb8) )
ROM_LOAD( "pball.u58", 0x300000, 0x80000, CRC(2cf2057d) SHA1(da075980892b43cac89d11c76d30b91c85c09af6) )
ROM_LOAD( "pball.u59", 0x380000, 0x80000, CRC(e1c656f4) SHA1(9bc3713d4b5185b417f4d027ae97dace1feec065) )
ROM_LOAD( "pball.u200",0x400000, 0x80000, CRC(26e68e24) SHA1(d88994a521ad14ac91e2c3cdc646ea7fb1ca8e72) )
ROM_LOAD( "pball.u201",0x480000, 0x80000, CRC(bc8575fc) SHA1(0b1e237ee321f046f9b268e3515d07be206b4d76) )
ROM_LOAD( "pball.u202",0x500000, 0x80000, CRC(97e2cf4f) SHA1(82ce199b0918762b0593b56bc8c19947993cfb59) )
ROM_LOAD( "pball.u203",0x580000, 0x80000, CRC(89605b33) SHA1(6fb4ebacfd686266142317b3f864705d90ce97ca) )
ROM_LOAD( "pball.u204",0x600000, 0x80000, CRC(efddd379) SHA1(903a931a7012f16df516b3cbec8b689a4fc0ba9c) )
// u205 is empty (missing or unused?)
ROM_END
ROM_START( kongball )
ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "kong.u19", 0x00001, 0x80000, CRC(0283df0a) SHA1(559b547127728c78ba66191278bba4b4cce37eba) )
ROM_LOAD16_BYTE( "kong.u21", 0x00000, 0x80000, CRC(ca6ad0da) SHA1(d5e07d7827587263b8d3028ab006dc0be454a7c7) )
ROM_REGION( 0x100000, "subcpu", 0 ) /* 68000 Code + sound samples */
// these were not present on the PCB (empty sockets) was sound never programmed, or were they removed at some point?
ROM_LOAD16_BYTE( "kong.u63", 0x00001, 0x80000, NO_DUMP )
ROM_LOAD16_BYTE( "kong.u65", 0x00000, 0x80000, NO_DUMP )
ROM_REGION( 0x1000000, "gfx1", ROMREGION_ERASE00 ) // each ROM contains 2 512x512 8bpp gfx pages
ROM_LOAD( "kong.u52", 0x000000, 0x80000, CRC(52487271) SHA1(a15a4011b1b23f5b2af0d7b6d05b3df3ae1daebb) )
ROM_LOAD( "kong.u53", 0x080000, 0x80000, CRC(aaaa3840) SHA1(0dcd2d70687d3c646198c40743b8b0a64cafced0) )
ROM_LOAD( "kong.u54", 0x100000, 0x80000, CRC(cb7ef2c2) SHA1(293b694e201221a5b27b22a1b729db5d7e52bf99) )
ROM_LOAD( "kong.u55", 0x180000, 0x80000, CRC(c9596c6f) SHA1(dd989d3e0c0be696331a8c42e03439fec8685bc8) )
ROM_LOAD( "kong.u56", 0x200000, 0x80000, CRC(cbb69adc) SHA1(244d36e6913feb7edc606fdaa7a80f2a8a480efa) )
ROM_LOAD( "kong.u57", 0x280000, 0x80000, CRC(f33af567) SHA1(8cbf9cc78b95edf33fb250bd232f032b4d7f4881) )
ROM_LOAD( "kong.u58", 0x300000, 0x80000, CRC(17818ee8) SHA1(7e857f7c5c146cfcdaa9b1077c63bbee1d143438) )
ROM_LOAD( "kong.u59", 0x380000, 0x80000, CRC(6d35e911) SHA1(d37bc2d364ced0d828598af9b2fe7abf6ffb4f82) )
ROM_LOAD( "kong.u200",0x400000, 0x80000, CRC(ec552e97) SHA1(7a9a06ff77ef7fc51782caa4d4514864bf8099e7) )
ROM_END
ROM_START( radendur )
ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "endu.u19", 0x00001, 0x80000, CRC(d24ca61c) SHA1(64d2648959579d35fbf4c8479c0ff75781d28146) )
ROM_LOAD16_BYTE( "endu.u21", 0x00000, 0x80000, CRC(45244675) SHA1(69be2eca3548644f97b9f6956bb3ff979740b1e4) )
ROM_REGION( 0x100000, "subcpu", 0 ) /* 68000 Code + sound samples */
ROM_LOAD16_BYTE( "endu.u63", 0x00001, 0x80000, CRC(43c35368) SHA1(62167a434bfe00825f2f97ecadd0af3e2d2b63f2) )
ROM_LOAD16_BYTE( "endu.u65", 0x00000, 0x80000, CRC(25259894) SHA1(b260324760dba1595ab8bd53e1bbc20c04b640dd) )
ROM_REGION( 0x1000000, "gfx1", ROMREGION_ERASE00 ) // each ROM contains 2 512x512 8bpp gfx pages
ROM_LOAD( "endu.u52", 0x000000, 0x80000, CRC(2b686f81) SHA1(9d9aa0f6e1a3dc7e96f647ddda3214f1f4c6bf1d) )
ROM_LOAD( "endu.u53", 0x080000, 0x80000, CRC(1a224c69) SHA1(ed1a8fdd97ea0caa649d3f1238fa13b1fd19376c) )
ROM_LOAD( "endu.u54", 0x100000, 0x80000, CRC(217a9725) SHA1(14240e457967c5b23c54d4395fc1ab7394a59fc9) )
ROM_LOAD( "endu.u55", 0x180000, 0x80000, CRC(bfce1b17) SHA1(415ab6815836dafb1a0b86464e84f3aaa5d1075d) )
ROM_LOAD( "endu.u56", 0x200000, 0x80000, CRC(4b9460a8) SHA1(d2b9484f133d5d9abbe6a163c57d079944b3221f) )
ROM_LOAD( "endu.u57", 0x280000, 0x80000, CRC(f17d5752) SHA1(354a76e9e130f10fc103ab83ea15bf1f47fca391) ) // mostly blank ROM (contains a single image)
ROM_LOAD( "endu.u58", 0x300000, 0x80000, CRC(75660aac) SHA1(6a521e1d2a632c26e53b83d2cc4b0edecfc1e68c) ) // blank ROM (intentional)
ROM_LOAD( "endu.u59", 0x380000, 0x80000, CRC(037648df) SHA1(19b0cbdb60ac4b14f06dd71ddf4e3b2d2dbdb19d) ) // FIXED BITS (111xxxxx) but correct, not all 8bpp used
ROM_LOAD( "endu.u200",0x400000, 0x80000, CRC(e1417f94) SHA1(dba02ce1f9bbe18e78c67e770fe84184e227799b) )
ROM_LOAD( "endu.u201",0x480000, 0x80000, CRC(25d9db1c) SHA1(c61491ae2dc97ea5c9f0f0d58f32edf0a3a94d95) )
ROM_LOAD( "endu.u202",0x500000, 0x80000, CRC(15f4fbd4) SHA1(2ad28af1bd0924fc3f1f6e026ca834c7df774b64) )
ROM_LOAD( "endu.u203",0x580000, 0x80000, CRC(e6361a27) SHA1(826be3b326e68c3b7c0f5c3d84993a971b32f84e) )
ROM_LOAD( "endu.u204",0x600000, 0x80000, CRC(0db97872) SHA1(56e38a9034082c3ceb78c0f3aba6125ce6fabd49) )
ROM_LOAD( "endu.u205",0x680000, 0x80000, CRC(75660aac) SHA1(6a521e1d2a632c26e53b83d2cc4b0edecfc1e68c) ) // blank ROM (intentional)
ROM_END
} // anonymous namespace
void wheelfir_state::init_pwball()
{
// temp hack as pwball doesn't like zooming and other things (maybe different FPGA programming?)
m_is_pwball = true;
}
GAME( 199?, wheelfir, 0, wheelfir, wheelfir, wheelfir_state, empty_init, ROT0, "TCH", "Wheels & Fire", MACHINE_IMPERFECT_GRAPHICS)
void wheelfir_state::init_kongball()
{
init_pwball();
m_disable_raster_irq = true; // the raster interrupt points outside of code
}
GAME( 199?, wheelfir, 0, wheelfir, wheelfir, wheelfir_state, empty_init, ROT0, "TCH", "Wheels & Fire", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )
GAME( 199?, pwball, 0, wheelfir, pwball, wheelfir_state, init_pwball, ROT0, "TCH", "Power Ball (prototype)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) // mostly complete
// these might not be fully functional games
GAME( 199?, kongball, 0, kongball, pwball, wheelfir_state, init_kongball, ROT0, "TCH", "Kong Ball (early prototype)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // can't get ingame?
GAME( 199?, radendur, 0, wheelfir, pwball, wheelfir_state, init_kongball, ROT0, "TCH / Sator Videogames", "Radical Enduro (early prototype)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) // can get ingame if you overclock CPUs significantly (IRQ problems?)