atari/atarig1.cpp, atari/atarig42.cpp, atari/atarigt.cpp, atari/atarigx2.cpp, atari/atarirle.cpp: Cleanups: (#13151)

* Suppress side effects for debugger reads, improved save state support, reduce run-time tag lookups.
* Made some variables const, used bit helpers more, reduced literal tag usage.
* Reduced preprocessor macros, improved ROM region names.
This commit is contained in:
cam900 2025-01-01 00:22:30 +09:00 committed by GitHub
parent 355e240b34
commit df719c74c6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
14 changed files with 374 additions and 364 deletions

View File

@ -51,7 +51,7 @@ void atarig1_state::video_int_ack_w(uint16_t data)
void atarig1_state::mo_command_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
COMBINE_DATA(m_mo_command);
m_rle->command_write((data == 0 && m_is_pitfight) ? ATARIRLE_COMMAND_CHECKSUM : ATARIRLE_COMMAND_DRAW);
m_rle->command_write((data == 0 && m_is_pitfight) ? atari_rle_objects_device::COMMAND_CHECKSUM : atari_rle_objects_device::COMMAND_DRAW);
}
@ -291,9 +291,9 @@ static const gfx_layout pftoplayout =
static GFXDECODE_START( gfx_atarig1 )
GFXDECODE_ENTRY( "gfx1", 0, pflayout, 0x300, 8 )
GFXDECODE_ENTRY( "gfx2", 0, gfx_8x8x4_packed_msb, 0x100, 16 )
GFXDECODE_ENTRY( "gfx1", 0, pftoplayout, 0x300, 8 )
GFXDECODE_ENTRY( "tiles", 0, pflayout, 0x300, 8 )
GFXDECODE_ENTRY( "chars", 0, gfx_8x8x4_packed_msb, 0x100, 16 )
GFXDECODE_ENTRY( "tiles", 0, pftoplayout, 0x300, 8 )
GFXDECODE_END
@ -361,7 +361,7 @@ void atarig1_state::atarig1(machine_config &config)
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
/* note: these parameters are from published specs, not derived */
m_screen->set_raw(14.318181_MHz_XTAL/2, 456, 0, 336, 262, 0, 240);
m_screen->set_screen_update(FUNC(atarig1_state::screen_update_atarig1));
m_screen->set_screen_update(FUNC(atarig1_state::screen_update));
m_screen->set_palette("palette");
m_screen->screen_vblank().set_inputline(m_maincpu, M68K_IRQ_1, ASSERT_LINE);
@ -476,7 +476,7 @@ ROM_START( hydra )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "hydraa0.bin", 0x00000, 0x10000, CRC(619d7319) SHA1(3c58f18ca5c93ae049bfca91043718fff43e674c) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_REGION( 0x0a0000, "tiles", 0 )
ROM_LOAD( "136079-1017.bin", 0x000000, 0x10000, CRC(bd77b747) SHA1(da57e305468c159ca3d2cfae807a85e643bbf053) ) /* playfield, planes 0-3 odd */
ROM_LOAD( "136079-1018.bin", 0x010000, 0x10000, CRC(7c24e637) SHA1(dd9fa8a59cbd692b0d8c0e452df4fa18d770c602) )
ROM_LOAD( "136079-1019.bin", 0x020000, 0x10000, CRC(aa2fb07b) SHA1(ed5aa82d5bac112f0507be3e4e2a5bad184eceeb) )
@ -488,7 +488,7 @@ ROM_START( hydra )
ROM_LOAD( "136079-1025.bin", 0x080000, 0x10000, CRC(98b5b1a1) SHA1(dfee7d334c4541eb13ee96b43d4d3e1a3c8deb72) ) /* playfield plane 4 */
ROM_LOAD( "136079-1026.bin", 0x090000, 0x10000, CRC(d68d44aa) SHA1(8fc8b82f4f90515f2af93d3f2d6903a74aac0cc9) )
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136079-1027.bin", 0x000000, 0x20000, CRC(f9135b9b) SHA1(48c0ad0d3e592d191d1385e30530bdb69a095452) ) /* alphanumerics */
ROM_REGION16_BE( 0x100000, "rle", 0 )
@ -535,7 +535,7 @@ ROM_START( hydrap )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "hydraa0.bin", 0x00000, 0x10000, BAD_DUMP CRC(619d7319) SHA1(3c58f18ca5c93ae049bfca91043718fff43e674c) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_REGION( 0x0a0000, "tiles", 0 )
ROM_LOAD( "136079-1017.bin", 0x000000, 0x10000, CRC(bd77b747) SHA1(da57e305468c159ca3d2cfae807a85e643bbf053) ) /* playfield, planes 0-3 odd */
ROM_LOAD( "136079-1018.bin", 0x010000, 0x10000, CRC(7c24e637) SHA1(dd9fa8a59cbd692b0d8c0e452df4fa18d770c602) )
ROM_LOAD( "136079-1019.bin", 0x020000, 0x10000, CRC(aa2fb07b) SHA1(ed5aa82d5bac112f0507be3e4e2a5bad184eceeb) )
@ -547,7 +547,7 @@ ROM_START( hydrap )
ROM_LOAD( "136079-1025.bin", 0x080000, 0x10000, CRC(98b5b1a1) SHA1(dfee7d334c4541eb13ee96b43d4d3e1a3c8deb72) ) /* playfield plane 4 */
ROM_LOAD( "hydpl41.bin", 0x090000, 0x10000, CRC(85f9afa6) SHA1(01d8e07ff249bfab83791fc8916542f38133fadf) )
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "hydalph.bin", 0x000000, 0x20000, CRC(7dd2b062) SHA1(789b35b1e8cce73e2314d1b6688b5066df91b604) ) /* alphanumerics */
ROM_REGION16_BE( 0x100000, "rle", 0 )
@ -594,7 +594,7 @@ ROM_START( hydrap2 )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "aud.1b", 0x00000, 0x10000, CRC(e1b5188a) SHA1(e9f2a78df49fa085a9363ca194e2ceb5fa5409c4) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_REGION( 0x0a0000, "tiles", 0 )
ROM_LOAD( "136079-1017.bin", 0x000000, 0x10000, CRC(bd77b747) SHA1(da57e305468c159ca3d2cfae807a85e643bbf053) ) /* playfield, planes 0-3 odd */
ROM_LOAD( "136079-1018.bin", 0x010000, 0x10000, CRC(7c24e637) SHA1(dd9fa8a59cbd692b0d8c0e452df4fa18d770c602) )
ROM_LOAD( "136079-1019.bin", 0x020000, 0x10000, CRC(aa2fb07b) SHA1(ed5aa82d5bac112f0507be3e4e2a5bad184eceeb) )
@ -606,7 +606,7 @@ ROM_START( hydrap2 )
ROM_LOAD( "136079-1025.bin", 0x080000, 0x10000, CRC(98b5b1a1) SHA1(dfee7d334c4541eb13ee96b43d4d3e1a3c8deb72) ) /* playfield plane 4 */
ROM_LOAD( "136079-1026.bin", 0x090000, 0x10000, CRC(d68d44aa) SHA1(8fc8b82f4f90515f2af93d3f2d6903a74aac0cc9) )
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136079-1027.bin", 0x000000, 0x20000, CRC(f9135b9b) SHA1(48c0ad0d3e592d191d1385e30530bdb69a095452) ) /* alphanumerics */
ROM_REGION16_BE( 0x100000, "rle", 0 )
@ -682,14 +682,14 @@ ROM_START( pitfight )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136081-1060.1b", 0x00000, 0x10000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_REGION( 0x0a0000, "tiles", 0 )
ROM_LOAD( "136081-1017.130m", 0x000000, 0x10000, CRC(ad3cfea5) SHA1(7b6fec131230e84ab87b7fc95f08989916f30e02) ) /* playfield, planes 0-3 odd */
ROM_LOAD( "136081-1018.120m", 0x010000, 0x10000, CRC(1a0f8bcf) SHA1(b965e73246db9507d2ad42dfcb033692b43b9b7a) )
ROM_LOAD( "136081-1021.90m", 0x040000, 0x10000, CRC(777efee3) SHA1(07591f11685c4c75c24c55fd242878253d32481b) ) /* playfield, planes 0-3 even */
ROM_LOAD( "136081-1022.75m", 0x050000, 0x10000, CRC(524319d0) SHA1(6f47a69d7d4e2a8f79b7470138e8b4edd6d0b2bb) )
ROM_LOAD( "136081-1025.45m", 0x080000, 0x10000, CRC(fc41691a) SHA1(4ef2f9093f20d27e1ba7d218b90ff6abb1f33646) ) /* playfield plane 4 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136081-1027.15l", 0x000000, 0x10000, CRC(a59f381d) SHA1(b14e878340ad2adbf4f6d4fc331c58f62037c7c7) ) /* alphanumerics */
ROM_REGION16_BE( 0x200000, "rle", 0 )
@ -777,14 +777,14 @@ ROM_START( pitfight7 )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136081-1060.1b", 0x00000, 0x10000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_REGION( 0x0a0000, "tiles", 0 )
ROM_LOAD( "136081-1017.130m", 0x000000, 0x10000, CRC(ad3cfea5) SHA1(7b6fec131230e84ab87b7fc95f08989916f30e02) ) /* playfield, planes 0-3 odd */
ROM_LOAD( "136081-1018.120m", 0x010000, 0x10000, CRC(1a0f8bcf) SHA1(b965e73246db9507d2ad42dfcb033692b43b9b7a) )
ROM_LOAD( "136081-1021.90m", 0x040000, 0x10000, CRC(777efee3) SHA1(07591f11685c4c75c24c55fd242878253d32481b) ) /* playfield, planes 0-3 even */
ROM_LOAD( "136081-1022.75m", 0x050000, 0x10000, CRC(524319d0) SHA1(6f47a69d7d4e2a8f79b7470138e8b4edd6d0b2bb) )
ROM_LOAD( "136081-1025.45m", 0x080000, 0x10000, CRC(fc41691a) SHA1(4ef2f9093f20d27e1ba7d218b90ff6abb1f33646) ) /* playfield plane 4 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136081-1027.15l", 0x000000, 0x10000, CRC(a59f381d) SHA1(b14e878340ad2adbf4f6d4fc331c58f62037c7c7) ) /* alphanumerics */
ROM_REGION16_BE( 0x200000, "rle", 0 )
@ -839,14 +839,14 @@ ROM_START( pitfight6 )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136081-1060.1b", 0x00000, 0x10000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_REGION( 0x0a0000, "tiles", 0 )
ROM_LOAD( "136081-1017.130m", 0x000000, 0x10000, CRC(ad3cfea5) SHA1(7b6fec131230e84ab87b7fc95f08989916f30e02) ) /* playfield, planes 0-3 odd */
ROM_LOAD( "136081-1018.120m", 0x010000, 0x10000, CRC(1a0f8bcf) SHA1(b965e73246db9507d2ad42dfcb033692b43b9b7a) )
ROM_LOAD( "136081-1021.90m", 0x040000, 0x10000, CRC(777efee3) SHA1(07591f11685c4c75c24c55fd242878253d32481b) ) /* playfield, planes 0-3 even */
ROM_LOAD( "136081-1022.75m", 0x050000, 0x10000, CRC(524319d0) SHA1(6f47a69d7d4e2a8f79b7470138e8b4edd6d0b2bb) )
ROM_LOAD( "136081-1025.45m", 0x080000, 0x10000, CRC(fc41691a) SHA1(4ef2f9093f20d27e1ba7d218b90ff6abb1f33646) ) /* playfield plane 4 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136081-1027.15l", 0x000000, 0x10000, CRC(a59f381d) SHA1(b14e878340ad2adbf4f6d4fc331c58f62037c7c7) ) /* alphanumerics */
ROM_REGION16_BE( 0x200000, "rle", 0 )
@ -889,14 +889,14 @@ ROM_START( pitfight5 )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136081-1060.1b", 0x00000, 0x10000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_REGION( 0x0a0000, "tiles", 0 )
ROM_LOAD( "136081-1017.130m", 0x000000, 0x10000, CRC(ad3cfea5) SHA1(7b6fec131230e84ab87b7fc95f08989916f30e02) ) /* playfield, planes 0-3 odd */
ROM_LOAD( "136081-1018.120m", 0x010000, 0x10000, CRC(1a0f8bcf) SHA1(b965e73246db9507d2ad42dfcb033692b43b9b7a) )
ROM_LOAD( "136081-1021.90m", 0x040000, 0x10000, CRC(777efee3) SHA1(07591f11685c4c75c24c55fd242878253d32481b) ) /* playfield, planes 0-3 even */
ROM_LOAD( "136081-1022.75m", 0x050000, 0x10000, CRC(524319d0) SHA1(6f47a69d7d4e2a8f79b7470138e8b4edd6d0b2bb) )
ROM_LOAD( "136081-1025.45m", 0x080000, 0x10000, CRC(fc41691a) SHA1(4ef2f9093f20d27e1ba7d218b90ff6abb1f33646) ) /* playfield plane 4 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136081-1027.15l", 0x000000, 0x10000, CRC(a59f381d) SHA1(b14e878340ad2adbf4f6d4fc331c58f62037c7c7) ) /* alphanumerics */
ROM_REGION16_BE( 0x200000, "rle", 0 )
@ -939,14 +939,14 @@ ROM_START( pitfight4 )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136081-1060.1b", 0x00000, 0x10000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_REGION( 0x0a0000, "tiles", 0 )
ROM_LOAD( "136081-1017.130m", 0x000000, 0x10000, CRC(ad3cfea5) SHA1(7b6fec131230e84ab87b7fc95f08989916f30e02) ) /* playfield, planes 0-3 odd */
ROM_LOAD( "136081-1018.120m", 0x010000, 0x10000, CRC(1a0f8bcf) SHA1(b965e73246db9507d2ad42dfcb033692b43b9b7a) )
ROM_LOAD( "136081-1021.90m", 0x040000, 0x10000, CRC(777efee3) SHA1(07591f11685c4c75c24c55fd242878253d32481b) ) /* playfield, planes 0-3 even */
ROM_LOAD( "136081-1022.75m", 0x050000, 0x10000, CRC(524319d0) SHA1(6f47a69d7d4e2a8f79b7470138e8b4edd6d0b2bb) )
ROM_LOAD( "136081-1025.45m", 0x080000, 0x10000, CRC(fc41691a) SHA1(4ef2f9093f20d27e1ba7d218b90ff6abb1f33646) ) /* playfield plane 4 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136081-1027.15l", 0x000000, 0x10000, CRC(a59f381d) SHA1(b14e878340ad2adbf4f6d4fc331c58f62037c7c7) ) /* alphanumerics */
ROM_REGION16_BE( 0x200000, "rle", 0 )
@ -1001,14 +1001,14 @@ ROM_START( pitfight3 )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136081-1060.1b", 0x00000, 0x10000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_REGION( 0x0a0000, "tiles", 0 )
ROM_LOAD( "136081-1017.130m", 0x000000, 0x10000, CRC(ad3cfea5) SHA1(7b6fec131230e84ab87b7fc95f08989916f30e02) ) /* playfield, planes 0-3 odd */
ROM_LOAD( "136081-1018.120m", 0x010000, 0x10000, CRC(1a0f8bcf) SHA1(b965e73246db9507d2ad42dfcb033692b43b9b7a) )
ROM_LOAD( "136081-1021.90m", 0x040000, 0x10000, CRC(777efee3) SHA1(07591f11685c4c75c24c55fd242878253d32481b) ) /* playfield, planes 0-3 even */
ROM_LOAD( "136081-1022.75m", 0x050000, 0x10000, CRC(524319d0) SHA1(6f47a69d7d4e2a8f79b7470138e8b4edd6d0b2bb) )
ROM_LOAD( "136081-1025.45m", 0x080000, 0x10000, CRC(fc41691a) SHA1(4ef2f9093f20d27e1ba7d218b90ff6abb1f33646) ) /* playfield plane 4 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136081-1027.15l", 0x000000, 0x10000, CRC(a59f381d) SHA1(b14e878340ad2adbf4f6d4fc331c58f62037c7c7) ) /* alphanumerics */
ROM_REGION16_BE( 0x200000, "rle", 0 )
@ -1063,14 +1063,14 @@ ROM_START( pitfight2 )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136081-1060.1b", 0x00000, 0x10000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_REGION( 0x0a0000, "tiles", 0 )
ROM_LOAD( "136081-1017.130m", 0x000000, 0x10000, CRC(ad3cfea5) SHA1(7b6fec131230e84ab87b7fc95f08989916f30e02) ) /* playfield, planes 0-3 odd */
ROM_LOAD( "136081-1018.120m", 0x010000, 0x10000, CRC(1a0f8bcf) SHA1(b965e73246db9507d2ad42dfcb033692b43b9b7a) )
ROM_LOAD( "136081-1021.90m", 0x040000, 0x10000, CRC(777efee3) SHA1(07591f11685c4c75c24c55fd242878253d32481b) ) /* playfield, planes 0-3 even */
ROM_LOAD( "136081-1022.75m", 0x050000, 0x10000, CRC(524319d0) SHA1(6f47a69d7d4e2a8f79b7470138e8b4edd6d0b2bb) )
ROM_LOAD( "136081-1025.45m", 0x080000, 0x10000, CRC(fc41691a) SHA1(4ef2f9093f20d27e1ba7d218b90ff6abb1f33646) ) /* playfield plane 4 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136081-1027.15l", 0x000000, 0x10000, CRC(a59f381d) SHA1(b14e878340ad2adbf4f6d4fc331c58f62037c7c7) ) /* alphanumerics */
ROM_REGION16_BE( 0x200000, "rle", 0 )
@ -1125,14 +1125,14 @@ ROM_START( pitfight1p2 )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136081-1060.1b", 0x00000, 0x10000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_REGION( 0x0a0000, "tiles", 0 )
ROM_LOAD( "136081-1017.130m", 0x000000, 0x10000, CRC(ad3cfea5) SHA1(7b6fec131230e84ab87b7fc95f08989916f30e02) ) /* playfield, planes 0-3 odd */
ROM_LOAD( "136081-1018.120m", 0x010000, 0x10000, CRC(1a0f8bcf) SHA1(b965e73246db9507d2ad42dfcb033692b43b9b7a) )
ROM_LOAD( "136081-1021.90m", 0x040000, 0x10000, CRC(777efee3) SHA1(07591f11685c4c75c24c55fd242878253d32481b) ) /* playfield, planes 0-3 even */
ROM_LOAD( "136081-1022.75m", 0x050000, 0x10000, CRC(524319d0) SHA1(6f47a69d7d4e2a8f79b7470138e8b4edd6d0b2bb) )
ROM_LOAD( "136081-1025.45m", 0x080000, 0x10000, CRC(fc41691a) SHA1(4ef2f9093f20d27e1ba7d218b90ff6abb1f33646) ) /* playfield plane 4 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136081-1027.15l", 0x000000, 0x10000, CRC(a59f381d) SHA1(b14e878340ad2adbf4f6d4fc331c58f62037c7c7) ) /* alphanumerics */
ROM_REGION16_BE( 0x200000, "rle", 0 )
@ -1187,14 +1187,14 @@ ROM_START( pitfightj )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136081-2060.1b", 0x00000, 0x10000, CRC(4317a9f3) SHA1(310154be47fd16b417699338e04e08f3ed973198) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_REGION( 0x0a0000, "tiles", 0 )
ROM_LOAD( "136081-1017.130m", 0x000000, 0x10000, CRC(ad3cfea5) SHA1(7b6fec131230e84ab87b7fc95f08989916f30e02) ) /* playfield, planes 0-3 odd */
ROM_LOAD( "136081-1018.120m", 0x010000, 0x10000, CRC(1a0f8bcf) SHA1(b965e73246db9507d2ad42dfcb033692b43b9b7a) )
ROM_LOAD( "136081-1021.90m", 0x040000, 0x10000, CRC(777efee3) SHA1(07591f11685c4c75c24c55fd242878253d32481b) ) /* playfield, planes 0-3 even */
ROM_LOAD( "136081-1022.75m", 0x050000, 0x10000, CRC(524319d0) SHA1(6f47a69d7d4e2a8f79b7470138e8b4edd6d0b2bb) )
ROM_LOAD( "136081-1025.45m", 0x080000, 0x10000, CRC(fc41691a) SHA1(4ef2f9093f20d27e1ba7d218b90ff6abb1f33646) ) /* playfield plane 4 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136081-1427.dat", 0x000000, 0x20000, CRC(b2c51dff) SHA1(7ad82a6a55d3a68e39d113c92f9e89a43408b5b2) ) /* alphanumerics */
ROM_REGION16_BE( 0x200000, "rle", 0 )
@ -1249,14 +1249,14 @@ ROM_START( pitfightb )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136081-1060.1b", 0x00000, 0x10000, CRC(231d71d7) SHA1(24622eee5fe873ef81e1df2691bd7a1d3ea7ef6b) )
ROM_REGION( 0x0a0000, "gfx1", 0 )
ROM_REGION( 0x0a0000, "tiles", 0 )
ROM_LOAD( "136081-1017.130m", 0x000000, 0x10000, CRC(ad3cfea5) SHA1(7b6fec131230e84ab87b7fc95f08989916f30e02) ) /* playfield, planes 0-3 odd */
ROM_LOAD( "136081-1018.120m", 0x010000, 0x10000, CRC(1a0f8bcf) SHA1(b965e73246db9507d2ad42dfcb033692b43b9b7a) )
ROM_LOAD( "136081-1021.90m", 0x040000, 0x10000, CRC(777efee3) SHA1(07591f11685c4c75c24c55fd242878253d32481b) ) /* playfield, planes 0-3 even */
ROM_LOAD( "136081-1022.75m", 0x050000, 0x10000, CRC(524319d0) SHA1(6f47a69d7d4e2a8f79b7470138e8b4edd6d0b2bb) )
ROM_LOAD( "136081-1025.45m", 0x080000, 0x10000, CRC(fc41691a) SHA1(4ef2f9093f20d27e1ba7d218b90ff6abb1f33646) ) /* playfield plane 4 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136081-1027.15l", 0x000000, 0x10000, CRC(a59f381d) SHA1(b14e878340ad2adbf4f6d4fc331c58f62037c7c7) ) /* alphanumerics */
ROM_REGION16_BE( 0x200000, "rle", 0 )

View File

@ -27,8 +27,8 @@ public:
m_alpha_tilemap(*this, "alpha"),
m_rle(*this, "rle"),
m_adc(*this, "adc"),
m_in1(*this, "IN1"),
m_mo_command(*this, "mo_command")
m_mo_command(*this, "mo_command"),
m_in1(*this, "IN1")
{ }
void atarig1(machine_config &config);
@ -57,12 +57,13 @@ private:
required_device<atari_rle_objects_device> m_rle;
optional_device<adc0808_device> m_adc;
required_shared_ptr<uint16_t> m_mo_command;
optional_ioport m_in1;
bool m_is_pitfight = false;
required_shared_ptr<uint16_t> m_mo_command;
bool m_bslapstic_primed = false;
uint8_t m_pfscroll_xoffset = 0;
@ -80,7 +81,7 @@ private:
void update_bank(int bank);
TILE_GET_INFO_MEMBER(get_alpha_tile_info);
TILE_GET_INFO_MEMBER(get_playfield_tile_info);
uint32_t screen_update_atarig1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void main_map(address_map &map) ATTR_COLD;
void pitfight_map(address_map &map) ATTR_COLD;
void hydra_map(address_map &map) ATTR_COLD;

View File

@ -20,20 +20,20 @@
TILE_GET_INFO_MEMBER(atarig1_state::get_alpha_tile_info)
{
uint16_t data = m_alpha_tilemap->basemem_read(tile_index);
int code = data & 0xfff;
int color = (data >> 12) & 0x0f;
int opaque = data & 0x8000;
uint16_t const data = m_alpha_tilemap->basemem_read(tile_index);
int const code = data & 0xfff;
int const color = (data >> 12) & 0x0f;
bool const opaque = BIT(data, 15);
tileinfo.set(1, code, color, opaque ? TILE_FORCE_LAYER0 : 0);
}
TILE_GET_INFO_MEMBER(atarig1_state::get_playfield_tile_info)
{
uint16_t data = m_playfield_tilemap->basemem_read(tile_index);
int code = (m_playfield_tile_bank << 12) | (data & 0xfff);
int color = (data >> 12) & 7;
tileinfo.set(0, code, color, (data >> 15) & 1);
uint16_t const data = m_playfield_tilemap->basemem_read(tile_index);
int const code = (m_playfield_tile_bank << 12) | (data & 0xfff);
int const color = (data >> 12) & 7;
tileinfo.set(0, code, color, BIT(data, 15));
}
@ -69,7 +69,7 @@ void atarig1_state::video_start()
TIMER_DEVICE_CALLBACK_MEMBER(atarig1_state::scanline_update)
{
int scanline = param;
int const scanline = param;
//if (scanline == 0) logerror("-------\n");
@ -82,13 +82,11 @@ TIMER_DEVICE_CALLBACK_MEMBER(atarig1_state::scanline_update)
/* update the playfield scrolls */
for (int i = 0; i < 8; i++)
{
uint16_t word;
/* first word controls horizontal scroll */
word = m_alpha_tilemap->basemem_read(offset++);
if (word & 0x8000)
uint16_t word = m_alpha_tilemap->basemem_read(offset++);
if (BIT(word, 15))
{
int newscroll = ((word >> 6) + m_pfscroll_xoffset) & 0x1ff;
int const newscroll = ((word >> 6) + m_pfscroll_xoffset) & 0x1ff;
if (newscroll != m_playfield_xscroll)
{
m_screen->update_partial(std::max(scanline + i - 1, 0));
@ -99,10 +97,10 @@ TIMER_DEVICE_CALLBACK_MEMBER(atarig1_state::scanline_update)
/* second word controls vertical scroll and tile bank */
word = m_alpha_tilemap->basemem_read(offset++);
if (word & 0x8000)
if (BIT(word, 15))
{
int newscroll = ((word >> 6) - (scanline + i)) & 0x1ff;
int newbank = word & 7;
int const newscroll = ((word >> 6) - (scanline + i)) & 0x1ff;
int const newbank = word & 7;
if (newscroll != m_playfield_yscroll)
{
m_screen->update_partial(std::max(scanline + i - 1, 0));
@ -127,7 +125,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(atarig1_state::scanline_update)
*
*************************************/
uint32_t atarig1_state::screen_update_atarig1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
uint32_t atarig1_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
/* draw the playfield */
m_playfield_tilemap->draw(screen, bitmap, cliprect, 0, 0);

View File

@ -77,7 +77,7 @@ uint8_t atarig42_state::a2d_data_r(offs_t offset)
if (!m_adc.found())
return 0xff;
uint8_t result = m_adc->data_r();
uint8_t const result = m_adc->data_r();
if (!machine().side_effects_disabled())
m_adc->address_offset_start_w(offset, 0);
return result;
@ -90,7 +90,7 @@ void atarig42_state::io_latch_w(offs_t offset, uint16_t data, uint16_t mem_mask)
if (ACCESSING_BITS_8_15)
{
/* bit 14 controls the ASIC65 reset line */
m_asic65->reset_line((~data >> 14) & 1);
m_asic65->reset_line(BIT(~data, 14));
/* bits 13-11 are the MO control bits */
m_rle->control_write((data >> 11) & 7);
@ -100,8 +100,8 @@ void atarig42_state::io_latch_w(offs_t offset, uint16_t data, uint16_t mem_mask)
if (ACCESSING_BITS_0_7)
{
/* bit 4 resets the sound CPU */
m_jsa->soundcpu().set_input_line(INPUT_LINE_RESET, (data & 0x10) ? CLEAR_LINE : ASSERT_LINE);
if (!(data & 0x10))
m_jsa->soundcpu().set_input_line(INPUT_LINE_RESET, BIT(data, 4) ? CLEAR_LINE : ASSERT_LINE);
if (BIT(~data, 4))
m_jsa->reset();
/* bit 5 is /XRESET, probably related to the ASIC */
@ -114,7 +114,7 @@ void atarig42_state::io_latch_w(offs_t offset, uint16_t data, uint16_t mem_mask)
void atarig42_state::mo_command_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
COMBINE_DATA(m_mo_command);
m_rle->command_write((data == 0) ? ATARIRLE_COMMAND_CHECKSUM : ATARIRLE_COMMAND_DRAW);
m_rle->command_write((data == 0) ? atari_rle_objects_device::COMMAND_CHECKSUM : atari_rle_objects_device::COMMAND_DRAW);
}
@ -239,7 +239,8 @@ void atarig42_0x200_state::roadriot_sloop_tweak(int offset)
uint16_t atarig42_0x200_state::roadriot_sloop_data_r(offs_t offset)
{
roadriot_sloop_tweak(offset);
if (!machine().side_effects_disabled())
roadriot_sloop_tweak(offset);
if (offset < 0x78000/2)
return m_sloop_base[offset];
else
@ -296,7 +297,8 @@ void atarig42_0x400_state::guardians_sloop_tweak(int offset)
uint16_t atarig42_0x400_state::guardians_sloop_data_r(offs_t offset)
{
guardians_sloop_tweak(offset);
if (!machine().side_effects_disabled())
guardians_sloop_tweak(offset);
if (offset < 0x78000/2)
return m_sloop_base[offset];
else
@ -341,7 +343,7 @@ void atarig42_state::main_map(address_map &map)
map(0xff1000, 0xff1fff).ram();
map(0xff2000, 0xff5fff).ram().w(m_playfield_tilemap, FUNC(tilemap_device::write16)).share("playfield");
map(0xff6000, 0xff6fff).ram().w(m_alpha_tilemap, FUNC(tilemap_device::write16)).share("alpha");
map(0xff7000, 0xff7001).ram().w(FUNC(atarig42_state::mo_command_w)).share("mo_command");
map(0xff7000, 0xff7001).ram().w(FUNC(atarig42_state::mo_command_w)).share(m_mo_command);
map(0xff7002, 0xffffff).ram();
}
@ -503,9 +505,9 @@ static const gfx_layout pftoplayout =
};
static GFXDECODE_START( gfx_atarig42 )
GFXDECODE_ENTRY( "gfx1", 0, pflayout, 0x000, 64 )
GFXDECODE_ENTRY( "gfx2", 0, gfx_8x8x4_packed_msb, 0x000, 16 )
GFXDECODE_ENTRY( "gfx1", 0, pftoplayout, 0x000, 64 )
GFXDECODE_ENTRY( "tiles", 0, pflayout, 0x000, 64 )
GFXDECODE_ENTRY( "chars", 0, gfx_8x8x4_packed_msb, 0x000, 16 )
GFXDECODE_ENTRY( "tiles", 0, pftoplayout, 0x000, 64 )
GFXDECODE_END
@ -578,7 +580,7 @@ void atarig42_state::atarig42(machine_config &config)
/* note: these parameters are from published specs, not derived */
/* the board uses an SOS chip to generate video signals */
m_screen->set_raw(14.318181_MHz_XTAL/2, 456, 0, 336, 262, 0, 240);
m_screen->set_screen_update(FUNC(atarig42_state::screen_update_atarig42));
m_screen->set_screen_update(FUNC(atarig42_state::screen_update));
m_screen->set_palette("palette");
m_screen->screen_vblank().set_inputline(m_maincpu, M68K_IRQ_4, ASSERT_LINE);
@ -634,7 +636,7 @@ ROM_START( roadriot ) // Test mode shows DSP COMM and DSP LINK tests; This is a
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 6502 code */
ROM_LOAD( "136089-1047.12c", 0x00000, 0x10000, CRC(849dd26c) SHA1(05a0b2a5f7ee4437448b5f076d3066d96dec2320) )
ROM_REGION( 0xc0000, "gfx1", 0 )
ROM_REGION( 0xc0000, "tiles", 0 )
ROM_LOAD( "136089-1041.22d", 0x000000, 0x20000, CRC(b7451f92) SHA1(9fd17913630e457e406e596f2d86afff98787750) ) /* playfield, planes 0-1 */
ROM_LOAD( "136089-1038.22c", 0x020000, 0x20000, CRC(90f3c6ee) SHA1(7607509e2d3b2080a918cfaf2879dbed6b79d029) )
ROM_LOAD( "136089-1037.2021d", 0x040000, 0x20000, CRC(d40de62b) SHA1(fa6dfd20bdad7874ae33a1027a9bb0ea200f86ca) ) /* playfield, planes 2-3 */
@ -642,7 +644,7 @@ ROM_START( roadriot ) // Test mode shows DSP COMM and DSP LINK tests; This is a
ROM_LOAD( "136089-1040.20d", 0x080000, 0x20000, CRC(a81ae93f) SHA1(b694ba5fab35f8fa505a02039ae62f7af3c7ae1d) ) /* playfield, planes 4-5 */
ROM_LOAD( "136089-1042.20c", 0x0a0000, 0x20000, CRC(b8a6d15a) SHA1(43d2be9d40a84b2c01d80bbcac737eda04d55999) )
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136089-1046.22j", 0x000000, 0x20000, CRC(0005bab0) SHA1(257e1b23eea117fe6701a67134b96d9d9fe10caf) ) /* alphanumerics */
ROM_REGION16_BE( 0x200000, "rle", 0 )
@ -694,7 +696,7 @@ ROM_START( roadriota ) // Test mode shows DSP COMM and DSP LINK tests; This is a
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 6502 code */
ROM_LOAD( "136089-1047.12c", 0x00000, 0x10000, CRC(849dd26c) SHA1(05a0b2a5f7ee4437448b5f076d3066d96dec2320) )
ROM_REGION( 0xc0000, "gfx1", 0 )
ROM_REGION( 0xc0000, "tiles", 0 )
ROM_LOAD( "136089-1041.22d", 0x000000, 0x20000, CRC(b7451f92) SHA1(9fd17913630e457e406e596f2d86afff98787750) ) /* playfield, planes 0-1 */
ROM_LOAD( "136089-1038.22c", 0x020000, 0x20000, CRC(90f3c6ee) SHA1(7607509e2d3b2080a918cfaf2879dbed6b79d029) )
ROM_LOAD( "136089-1037.2021d", 0x040000, 0x20000, CRC(d40de62b) SHA1(fa6dfd20bdad7874ae33a1027a9bb0ea200f86ca) ) /* playfield, planes 2-3 */
@ -702,7 +704,7 @@ ROM_START( roadriota ) // Test mode shows DSP COMM and DSP LINK tests; This is a
ROM_LOAD( "136089-1040.20d", 0x080000, 0x20000, CRC(a81ae93f) SHA1(b694ba5fab35f8fa505a02039ae62f7af3c7ae1d) ) /* playfield, planes 4-5 */
ROM_LOAD( "136089-1042.20c", 0x0a0000, 0x20000, CRC(b8a6d15a) SHA1(43d2be9d40a84b2c01d80bbcac737eda04d55999) )
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136089-1046.22j", 0x000000, 0x20000, CRC(0005bab0) SHA1(257e1b23eea117fe6701a67134b96d9d9fe10caf) ) /* alphanumerics */
ROM_REGION16_BE( 0x200000, "rle", 0 )
@ -754,7 +756,7 @@ ROM_START( roadriotb ) // Test mode shows only COMM RAM test; This is a dedicate
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 6502 code */
ROM_LOAD( "136089-1047.12c", 0x00000, 0x10000, CRC(849dd26c) SHA1(05a0b2a5f7ee4437448b5f076d3066d96dec2320) )
ROM_REGION( 0xc0000, "gfx1", 0 )
ROM_REGION( 0xc0000, "tiles", 0 )
ROM_LOAD( "136089-1041.22d", 0x000000, 0x20000, CRC(b7451f92) SHA1(9fd17913630e457e406e596f2d86afff98787750) ) /* playfield, planes 0-1 */
ROM_LOAD( "136089-1038.22c", 0x020000, 0x20000, CRC(90f3c6ee) SHA1(7607509e2d3b2080a918cfaf2879dbed6b79d029) )
ROM_LOAD( "136089-1037.2021d", 0x040000, 0x20000, CRC(d40de62b) SHA1(fa6dfd20bdad7874ae33a1027a9bb0ea200f86ca) ) /* playfield, planes 2-3 */
@ -762,7 +764,7 @@ ROM_START( roadriotb ) // Test mode shows only COMM RAM test; This is a dedicate
ROM_LOAD( "136089-1040.20d", 0x080000, 0x20000, CRC(a81ae93f) SHA1(b694ba5fab35f8fa505a02039ae62f7af3c7ae1d) ) /* playfield, planes 4-5 */
ROM_LOAD( "136089-1042.20c", 0x0a0000, 0x20000, CRC(b8a6d15a) SHA1(43d2be9d40a84b2c01d80bbcac737eda04d55999) )
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136089-1046.22j", 0x000000, 0x20000, CRC(0005bab0) SHA1(257e1b23eea117fe6701a67134b96d9d9fe10caf) ) /* alphanumerics */
ROM_REGION16_BE( 0x200000, "rle", 0 )
@ -813,7 +815,7 @@ ROM_START( dangerex )
ROM_LOAD( "dx12c-5.12c", 0x10000, 0x4000, CRC(d72621f7) SHA1(4bf5c98dd2434cc6ed1bddb6baf42f41cf138e1a) )
ROM_CONTINUE( 0x04000, 0xc000 )
ROM_REGION( 0xc0000, "gfx1", 0 )
ROM_REGION( 0xc0000, "tiles", 0 )
ROM_LOAD( "dxc117-22d.22d", 0x000000, 0x20000, CRC(5532995a) SHA1(21e001c911adb91dbe43e895ae8582df65f2995d) ) /* playfield, planes 0-1 */
ROM_LOAD( "dx82-22c.22c", 0x020000, 0x20000, CRC(9548599b) SHA1(d08bae8dabce0175f956631ddfbf091653af035e) )
ROM_LOAD( "dxc116-20-21d.21d", 0x040000, 0x20000, CRC(ebbf0fd8) SHA1(4ceb026c4231b675215110c16c8f75551cdfa461) ) /* playfield, planes 2-3 */
@ -821,7 +823,7 @@ ROM_START( dangerex )
ROM_LOAD( "dxc115-20d.20d", 0x080000, 0x20000, CRC(2819ce54) SHA1(9a3c041d9046af41997dc1d9f41bf0e1be9489f9) ) /* playfield, planes 4-5 */
ROM_LOAD( "dxc80-20c.20c", 0x0a0000, 0x20000, CRC(a8ffe459) SHA1(92a10694c38a4fbe3022662f4e8e4e214aab31c9) )
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "dxc187-22j.22j", 0x000000, 0x20000, CRC(7231ecc2) SHA1(8b1b0aed3a0d907630e120395b0a97fd9a1ef8cc) ) /* alphanumerics */
ROM_REGION16_BE( 0x800000, "rle", 0 )
@ -871,12 +873,12 @@ ROM_START( guardian )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 6502 code */
ROM_LOAD( "136092-0080-snd.12c", 0x00000, 0x10000, CRC(0388f805) SHA1(49c11313bc4192dbe294cf68b652cb19047889fd) )
ROM_REGION( 0x180000, "gfx1", 0 )
ROM_REGION( 0x180000, "tiles", 0 )
ROM_LOAD( "136092-0037a.23e", 0x000000, 0x80000, CRC(ca10b63e) SHA1(243a2a440e1bc9135d3dbe6553d39c54b9bdcd13) ) /* playfield, planes 0-1 */
ROM_LOAD( "136092-0038a.22e", 0x080000, 0x80000, CRC(cb1431a1) SHA1(d7b8f49a1e794ca2083e4bf0fa3870ce08caa53a) ) /* playfield, planes 2-3 */
ROM_LOAD( "136092-0039a.20e", 0x100000, 0x80000, CRC(2eee7188) SHA1(d3adbd7b20bc898fee35b6ba781e7775f82acd19) ) /* playfield, planes 4-5 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136092-0030.23k", 0x000000, 0x20000, CRC(0fd7baa1) SHA1(7802d732e5173291628ed498ad0fab71aeef4688) ) /* alphanumerics */
ROM_REGION16_BE( 0x600000, "rle", 0 )

View File

@ -45,7 +45,7 @@ protected:
TILE_GET_INFO_MEMBER(get_alpha_tile_info);
TILE_GET_INFO_MEMBER(get_playfield_tile_info);
TILEMAP_MAPPER_MEMBER(atarig42_playfield_scan);
uint32_t screen_update_atarig42(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void atarig42(machine_config &config);
void main_map(address_map &map) ATTR_COLD;
@ -57,6 +57,8 @@ protected:
required_device<asic65_device> m_asic65;
optional_device<adc0808_device> m_adc;
required_shared_ptr<uint16_t> m_mo_command;
uint16_t m_playfield_base = 0;
uint16_t m_current_control = 0;
@ -65,12 +67,10 @@ protected:
uint16_t m_playfield_xscroll = 0;
uint16_t m_playfield_yscroll = 0;
required_shared_ptr<uint16_t> m_mo_command;
int m_sloop_bank = 0;
int m_sloop_next_bank = 0;
int m_sloop_offset = 0;
int m_sloop_state = 0;
int32_t m_sloop_bank = 0;
int32_t m_sloop_next_bank = 0;
int32_t m_sloop_offset = 0;
int32_t m_sloop_state = 0;
uint16_t * m_sloop_base = nullptr;
uint32_t m_last_accesses[8]{};

View File

@ -35,27 +35,27 @@
TILE_GET_INFO_MEMBER(atarig42_state::get_alpha_tile_info)
{
uint16_t data = m_alpha_tilemap->basemem_read(tile_index);
int code = data & 0xfff;
int color = (data >> 12) & 0x0f;
int opaque = data & 0x8000;
uint16_t const data = m_alpha_tilemap->basemem_read(tile_index);
int const code = data & 0xfff;
int const color = (data >> 12) & 0x0f;
bool const opaque = BIT(data, 15);
tileinfo.set(1, code, color, opaque ? TILE_FORCE_LAYER0 : 0);
}
TILE_GET_INFO_MEMBER(atarig42_state::get_playfield_tile_info)
{
uint16_t data = m_playfield_tilemap->basemem_read(tile_index);
int code = (m_playfield_tile_bank << 12) | (data & 0xfff);
int color = (m_playfield_base >> 5) + ((m_playfield_color_bank << 3) & 0x18) + ((data >> 12) & 7);
tileinfo.set(0, code, color, (data >> 15) & 1);
uint16_t const data = m_playfield_tilemap->basemem_read(tile_index);
int const code = (m_playfield_tile_bank << 12) | (data & 0xfff);
int const color = (m_playfield_base >> 5) + ((m_playfield_color_bank << 3) & 0x18) + ((data >> 12) & 7);
tileinfo.set(0, code, color, BIT(data, 15));
tileinfo.category = (m_playfield_color_bank >> 2) & 7;
}
TILEMAP_MAPPER_MEMBER(atarig42_state::atarig42_playfield_scan)
{
int bank = 1 - (col / (num_cols / 2));
int const bank = 1 - (col / (num_cols / 2));
return bank * (num_rows * num_cols / 2) + row * (num_cols / 2) + (col % (num_cols / 2));
}
@ -90,7 +90,7 @@ void atarig42_state::video_start()
TIMER_DEVICE_CALLBACK_MEMBER(atarig42_state::scanline_update)
{
int scanline = param;
int const scanline = param;
/* keep in range */
int offset = (scanline / 8) * 64 + 48;
@ -100,13 +100,11 @@ TIMER_DEVICE_CALLBACK_MEMBER(atarig42_state::scanline_update)
/* update the playfield scrolls */
for (int i = 0; i < 8; i++)
{
uint16_t word;
word = m_alpha_tilemap->basemem_read(offset++);
if (word & 0x8000)
uint16_t word = m_alpha_tilemap->basemem_read(offset++);
if (BIT(word, 15))
{
int newscroll = (word >> 5) & 0x3ff;
int newbank = word & 0x1f;
int const newscroll = (word >> 5) & 0x3ff;
int const newbank = word & 0x1f;
if (newscroll != m_playfield_xscroll)
{
if (scanline + i > 0)
@ -124,10 +122,10 @@ TIMER_DEVICE_CALLBACK_MEMBER(atarig42_state::scanline_update)
}
word = m_alpha_tilemap->basemem_read(offset++);
if (word & 0x8000)
if (BIT(word, 15))
{
int newscroll = ((word >> 6) - (scanline + i)) & 0x1ff;
int newbank = word & 7;
int const newscroll = ((word >> 6) - (scanline + i)) & 0x1ff;
int const newbank = word & 7;
if (newscroll != m_playfield_yscroll)
{
if (scanline + i > 0)
@ -154,7 +152,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(atarig42_state::scanline_update)
*
*************************************/
uint32_t atarig42_state::screen_update_atarig42(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
uint32_t atarig42_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
bitmap_ind8 &priority_bitmap = screen.priority();
@ -187,9 +185,9 @@ uint32_t atarig42_state::screen_update_atarig42(screen_device &screen, bitmap_in
if (mo[x])
{
int const pfpri = pri[x];
int const mopri = mo[x] >> ATARIRLE_PRIORITY_SHIFT;
int const mopri = mo[x] >> atari_rle_objects_device::PRIORITY_SHIFT;
if (mopri >= pfpri)
pf[x] = mo[x] & ATARIRLE_DATA_MASK;
pf[x] = mo[x] & atari_rle_objects_device::DATA_MASK;
}
}
}

View File

@ -215,7 +215,7 @@ uint8_t atarigt_state::analog_port_r(offs_t offset)
return 0xff;
}
#else
uint8_t result = m_adc->data_r();
uint8_t const result = m_adc->data_r();
if (!machine().side_effects_disabled())
m_adc->address_offset_start_w(offset, 0);
return result;
@ -255,13 +255,13 @@ void atarigt_state::latch_w(offs_t offset, uint32_t data, uint32_t mem_mask)
// tmek20 needs following otherwise will cause a Cage CPU crash
// that eventually turns into a MAME hardlock.
// https://mametesters.org/view.php?id=7146
m_cage->reset_w(!BIT(data, 21));
m_cage->reset_w(BIT(~data, 21));
// sndres may reset internals instead?
// 0 in tmek, 1 in primrage
// also cfr. m_cage->control_w
//cage_reset_w(space, data & 0x00100000);
machine().bookkeeping().coin_counter_w(0, data & 0x00080000);
machine().bookkeeping().coin_counter_w(1, data & 0x00010000);
//cage_reset_w(space, BIT(data, 20));
machine().bookkeeping().coin_counter_w(0, BIT(data, 19));
machine().bookkeeping().coin_counter_w(1, BIT(data, 16));
}
}
@ -270,7 +270,7 @@ void atarigt_state::mo_command_w(offs_t offset, uint32_t data, uint32_t mem_mask
{
COMBINE_DATA(m_mo_command);
if (ACCESSING_BITS_0_15)
m_rle->command_write(((data & 0xffff) == 2) ? ATARIRLE_COMMAND_CHECKSUM : ATARIRLE_COMMAND_DRAW);
m_rle->command_write(((data & 0xffff) == 2) ? atari_rle_objects_device::COMMAND_CHECKSUM : atari_rle_objects_device::COMMAND_DRAW);
}
@ -351,10 +351,13 @@ void atarigt_state::tmek_protection_w(address_space &space, offs_t offset, uint1
void atarigt_state::tmek_protection_r(address_space &space, offs_t offset, uint16_t *data)
{
LOGMASKED(LOG_PROTECTION, "%s:Protection R@%06X\n", machine().describe_context(), offset);
if (!machine().side_effects_disabled())
{
LOGMASKED(LOG_PROTECTION, "%s:Protection R@%06X\n", machine().describe_context(), offset);
/* track accesses */
tmek_update_mode(offset);
/* track accesses */
tmek_update_mode(offset);
}
/* handle specific reads */
switch (offset)
@ -481,23 +484,29 @@ void atarigt_state::primrage_protection_w(address_space &space, offs_t offset, u
void atarigt_state::primrage_protection_r(address_space &space, offs_t offset, uint16_t *data)
{
/* track accesses */
primrage_update_mode(offset);
if (!machine().side_effects_disabled())
{
/* track accesses */
primrage_update_mode(offset);
}
uint32_t pc = m_maincpu->pcbase();
uint32_t const pc = m_maincpu->pcbase();
uint32_t p1, p2, a6;
switch (pc)
{
/* protection code from 20f90 - 21000 */
case 0x20f90:
LOGMASKED(LOG_PROTECTION, "Known Protection @ 20F90: R@%06X ", offset);
if (!machine().side_effects_disabled())
LOGMASKED(LOG_PROTECTION, "Known Protection @ 20F90: R@%06X ", offset);
break;
case 0x20f98:
case 0x20fa0:
LOGMASKED(LOG_PROTECTION, "R@%06X ", offset);
if (!machine().side_effects_disabled())
LOGMASKED(LOG_PROTECTION, "R@%06X ", offset);
break;
case 0x20fcc:
LOGMASKED(LOG_PROTECTION, "R@%06X - done\n", offset);
if (!machine().side_effects_disabled())
LOGMASKED(LOG_PROTECTION, "R@%06X - done\n", offset);
break;
/* protection code from 27592 - 27664 */
@ -507,47 +516,56 @@ void atarigt_state::primrage_protection_r(address_space &space, offs_t offset, u
a6 = m_maincpu->state_int(M68K_A6);
p1 = (space.read_word(a6+8) << 16) | space.read_word(a6+10);
p2 = (space.read_word(a6+12) << 16) | space.read_word(a6+14);
LOGMASKED(LOG_PROTECTION, "Known Protection @ 275BC(%08X, %08X): R@%06X ", p1, p2, offset);
if (!machine().side_effects_disabled())
LOGMASKED(LOG_PROTECTION, "Known Protection @ 275BC(%08X, %08X): R@%06X ", p1, p2, offset);
break;
case 0x275d2:
case 0x275d8:
case 0x275de:
case 0x2761e:
case 0x2762e:
LOGMASKED(LOG_PROTECTION, "R@%06X ", offset);
if (!machine().side_effects_disabled())
LOGMASKED(LOG_PROTECTION, "R@%06X ", offset);
break;
case 0x2763e:
LOGMASKED(LOG_PROTECTION, "R@%06X - done\n", offset);
if (!machine().side_effects_disabled())
LOGMASKED(LOG_PROTECTION, "R@%06X - done\n", offset);
break;
/* protection code from 3d8dc - 3d95a */
case 0x3d8f4:
a6 = m_maincpu->state_int(M68K_A6);
p1 = (space.read_word(a6+12) << 16) | space.read_word(a6+14);
LOGMASKED(LOG_PROTECTION, "Known Protection @ 3D8F4(%08X): R@%06X ", p1, offset);
if (!machine().side_effects_disabled())
LOGMASKED(LOG_PROTECTION, "Known Protection @ 3D8F4(%08X): R@%06X ", p1, offset);
break;
case 0x3d8fa:
case 0x3d90e:
LOGMASKED(LOG_PROTECTION, "R@%06X ", offset);
if (!machine().side_effects_disabled())
LOGMASKED(LOG_PROTECTION, "R@%06X ", offset);
break;
/* protection code from 437fa - 43860 */
case 0x43814:
a6 = m_maincpu->state_int(M68K_A6);
p1 = space.read_dword(a6+14) & 0xffffff;
LOGMASKED(LOG_PROTECTION, "Known Protection @ 43814(%08X): R@%06X ", p1, offset);
if (!machine().side_effects_disabled())
LOGMASKED(LOG_PROTECTION, "Known Protection @ 43814(%08X): R@%06X ", p1, offset);
break;
case 0x4381c:
case 0x43840:
LOGMASKED(LOG_PROTECTION, "R@%06X ", offset);
if (!machine().side_effects_disabled())
LOGMASKED(LOG_PROTECTION, "R@%06X ", offset);
break;
case 0x43848:
LOGMASKED(LOG_PROTECTION, "R@%06X - done\n", offset);
if (!machine().side_effects_disabled())
LOGMASKED(LOG_PROTECTION, "R@%06X - done\n", offset);
break;
/* catch anything else */
default:
LOGMASKED(LOG_PROTECTION, "%s:Unknown protection R@%06X\n", machine().describe_context(), offset);
if (!machine().side_effects_disabled())
LOGMASKED(LOG_PROTECTION, "%s:Unknown protection R@%06X\n", machine().describe_context(), offset);
break;
}
@ -567,16 +585,22 @@ void atarigt_state::primrage_protection_r(address_space &space, offs_t offset, u
if (m_protmode == 2)
{
*data = m_protresult;
m_protmode = 0;
LOGMASKED(LOG_PROTECTION, "prot:Clearing mode 2\n");
if (!machine().side_effects_disabled())
{
m_protmode = 0;
LOGMASKED(LOG_PROTECTION, "prot:Clearing mode 2\n");
}
}
break;
case 0xdcc7c4:
if (m_protmode == 1)
{
m_protmode = 0;
LOGMASKED(LOG_PROTECTION, "prot:Clearing mode 1\n");
if (!machine().side_effects_disabled())
{
m_protmode = 0;
LOGMASKED(LOG_PROTECTION, "prot:Clearing mode 1\n");
}
}
break;
}
@ -592,7 +616,7 @@ void atarigt_state::primrage_protection_r(address_space &space, offs_t offset, u
uint32_t atarigt_state::colorram_protection_r(address_space &space, offs_t offset, uint32_t mem_mask)
{
offs_t address = 0xd80000 + offset * 4;
offs_t const address = 0xd80000 + offset * 4;
uint32_t result32 = 0;
uint16_t result;
@ -615,7 +639,7 @@ uint32_t atarigt_state::colorram_protection_r(address_space &space, offs_t offse
void atarigt_state::colorram_protection_w(address_space &space, offs_t offset, uint32_t data, uint32_t mem_mask)
{
offs_t address = 0xd80000 + offset * 4;
offs_t const address = 0xd80000 + offset * 4;
if (ACCESSING_BITS_16_31)
{
@ -804,9 +828,9 @@ static const gfx_layout pftoplayout =
static GFXDECODE_START( gfx_atarigt )
GFXDECODE_ENTRY( "gfx1", 0, pflayout, 0x000, 64 )
GFXDECODE_ENTRY( "gfx2", 0, gfx_8x8x4_packed_msb, 0x000, 16 )
GFXDECODE_ENTRY( "gfx1", 0, pftoplayout, 0x000, 64 )
GFXDECODE_ENTRY( "tiles", 0, pflayout, 0x000, 64 )
GFXDECODE_ENTRY( "chars", 0, gfx_8x8x4_packed_msb, 0x000, 16 )
GFXDECODE_ENTRY( "tiles", 0, pftoplayout, 0x000, 64 )
GFXDECODE_END
@ -848,7 +872,7 @@ void atarigt_state::atarigt(machine_config &config)
/* video hardware */
GFXDECODE(config, m_gfxdecode, m_palette, gfx_atarigt);
PALETTE(config, m_palette).set_entries(MRAM_ENTRIES);
PALETTE(config, m_palette).set_entries(0x8000);
TILEMAP(config, m_playfield_tilemap, m_gfxdecode, 2, 8,8);
m_playfield_tilemap->set_layout(FUNC(atarigt_state::playfield_scan), 128,64);
@ -860,7 +884,7 @@ void atarigt_state::atarigt(machine_config &config)
/* note: these parameters are from published specs, not derived */
/* the board uses a pair of GALs to determine H and V parameters */
m_screen->set_raw(14.318181_MHz_XTAL/2, 456, 0, 336, 262, 0, 240);
m_screen->set_screen_update(FUNC(atarigt_state::screen_update_atarigt));
m_screen->set_screen_update(FUNC(atarigt_state::screen_update));
m_screen->screen_vblank().set(FUNC(atarigt_state::video_int_write_line));
ATARI_RLE_OBJECTS(config, m_rle, 0, modesc);
@ -953,7 +977,7 @@ ROM_START( tmek )
ROM_LOAD32_WORD( "0076", 0x800000, 0x200000, CRC(74dffe2d) SHA1(9436f69827050ad2f3be58f1cb57d7a06b75ab61) )
ROM_LOAD32_WORD( "0074", 0x800002, 0x200000, CRC(8dfc6ce0) SHA1(5b0d4dd4cb7934f542e67217a2542a3c69558cea) )
ROM_REGION( 0x300000, "gfx1", 0 )
ROM_REGION( 0x300000, "tiles", 0 )
ROM_LOAD( "0250", 0x000000, 0x80000, CRC(56bd9f25) SHA1(a8161aeee274f28c41f82b6b3f63570970ee281d) ) /* playfield, planes 0-1 */
ROM_LOAD( "0253a", 0x080000, 0x80000, CRC(23e2f83d) SHA1(804a17ce8768bd48cda853e55fc1f54ed7475968) )
ROM_LOAD( "0251", 0x100000, 0x80000, CRC(0d3b08f7) SHA1(72ec2383011ef20e9054594279cc85fa55c3a9b2) ) /* playfield, planes 2-3 */
@ -961,7 +985,7 @@ ROM_START( tmek )
ROM_LOAD( "0252", 0x200000, 0x80000, CRC(95a1c23b) SHA1(74eb69dcaebd7a7a03d8f7c9bf6183ece695e91d) ) /* playfield, planes 4-5 */
ROM_LOAD( "0255a", 0x280000, 0x80000, CRC(f0fbb700) SHA1(3f0355b137f6426a07abab77f25e718c6102a16f) )
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "0045a", 0x000000, 0x20000, CRC(057a5304) SHA1(d44c0cf885a1324888b7e8118f124c0dae616859) ) /* alphanumerics */
ROM_REGION16_BE( 0x1000000, "rle", 0 )
@ -1008,7 +1032,7 @@ ROM_START( tmek51p )
ROM_LOAD32_WORD( "0076", 0x800000, 0x200000, CRC(74dffe2d) SHA1(9436f69827050ad2f3be58f1cb57d7a06b75ab61) )
ROM_LOAD32_WORD( "0074", 0x800002, 0x200000, CRC(8dfc6ce0) SHA1(5b0d4dd4cb7934f542e67217a2542a3c69558cea) )
ROM_REGION( 0x300000, "gfx1", 0 )
ROM_REGION( 0x300000, "tiles", 0 )
ROM_LOAD( "0250", 0x000000, 0x80000, CRC(56bd9f25) SHA1(a8161aeee274f28c41f82b6b3f63570970ee281d) ) /* playfield, planes 0-1 */
ROM_LOAD( "0253a", 0x080000, 0x80000, CRC(23e2f83d) SHA1(804a17ce8768bd48cda853e55fc1f54ed7475968) )
ROM_LOAD( "0251", 0x100000, 0x80000, CRC(0d3b08f7) SHA1(72ec2383011ef20e9054594279cc85fa55c3a9b2) ) /* playfield, planes 2-3 */
@ -1016,7 +1040,7 @@ ROM_START( tmek51p )
ROM_LOAD( "0252", 0x200000, 0x80000, CRC(95a1c23b) SHA1(74eb69dcaebd7a7a03d8f7c9bf6183ece695e91d) ) /* playfield, planes 4-5 */
ROM_LOAD( "0255a", 0x280000, 0x80000, CRC(f0fbb700) SHA1(3f0355b137f6426a07abab77f25e718c6102a16f) )
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "0045a", 0x000000, 0x20000, CRC(057a5304) SHA1(d44c0cf885a1324888b7e8118f124c0dae616859) ) /* alphanumerics */
ROM_REGION16_BE( 0x1000000, "rle", 0 )
@ -1063,7 +1087,7 @@ ROM_START( tmek45 )
ROM_LOAD32_WORD( "0076", 0x800000, 0x200000, CRC(74dffe2d) SHA1(9436f69827050ad2f3be58f1cb57d7a06b75ab61) )
ROM_LOAD32_WORD( "0074", 0x800002, 0x200000, CRC(8dfc6ce0) SHA1(5b0d4dd4cb7934f542e67217a2542a3c69558cea) )
ROM_REGION( 0x300000, "gfx1", 0 )
ROM_REGION( 0x300000, "tiles", 0 )
ROM_LOAD( "0250", 0x000000, 0x80000, CRC(56bd9f25) SHA1(a8161aeee274f28c41f82b6b3f63570970ee281d) ) /* playfield, planes 0-1 */
ROM_LOAD( "0253a", 0x080000, 0x80000, CRC(23e2f83d) SHA1(804a17ce8768bd48cda853e55fc1f54ed7475968) )
ROM_LOAD( "0251", 0x100000, 0x80000, CRC(0d3b08f7) SHA1(72ec2383011ef20e9054594279cc85fa55c3a9b2) ) /* playfield, planes 2-3 */
@ -1071,7 +1095,7 @@ ROM_START( tmek45 )
ROM_LOAD( "0252", 0x200000, 0x80000, CRC(95a1c23b) SHA1(74eb69dcaebd7a7a03d8f7c9bf6183ece695e91d) ) /* playfield, planes 4-5 */
ROM_LOAD( "0255a", 0x280000, 0x80000, CRC(f0fbb700) SHA1(3f0355b137f6426a07abab77f25e718c6102a16f) )
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "0045a", 0x000000, 0x20000, CRC(057a5304) SHA1(d44c0cf885a1324888b7e8118f124c0dae616859) ) /* alphanumerics */
ROM_REGION16_BE( 0x1000000, "rle", 0 )
@ -1118,7 +1142,7 @@ ROM_START( tmek44 )
ROM_LOAD32_WORD( "0076", 0x800000, 0x200000, CRC(74dffe2d) SHA1(9436f69827050ad2f3be58f1cb57d7a06b75ab61) )
ROM_LOAD32_WORD( "0074", 0x800002, 0x200000, CRC(8dfc6ce0) SHA1(5b0d4dd4cb7934f542e67217a2542a3c69558cea) )
ROM_REGION( 0x300000, "gfx1", 0 )
ROM_REGION( 0x300000, "tiles", 0 )
ROM_LOAD( "0250", 0x000000, 0x80000, CRC(56bd9f25) SHA1(a8161aeee274f28c41f82b6b3f63570970ee281d) ) /* playfield, planes 0-1 */
ROM_LOAD( "0253a", 0x080000, 0x80000, CRC(23e2f83d) SHA1(804a17ce8768bd48cda853e55fc1f54ed7475968) )
ROM_LOAD( "0251", 0x100000, 0x80000, CRC(0d3b08f7) SHA1(72ec2383011ef20e9054594279cc85fa55c3a9b2) ) /* playfield, planes 2-3 */
@ -1126,7 +1150,7 @@ ROM_START( tmek44 )
ROM_LOAD( "0252", 0x200000, 0x80000, CRC(95a1c23b) SHA1(74eb69dcaebd7a7a03d8f7c9bf6183ece695e91d) ) /* playfield, planes 4-5 */
ROM_LOAD( "0255a", 0x280000, 0x80000, CRC(f0fbb700) SHA1(3f0355b137f6426a07abab77f25e718c6102a16f) )
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "0045a", 0x000000, 0x20000, CRC(057a5304) SHA1(d44c0cf885a1324888b7e8118f124c0dae616859) ) /* alphanumerics */
ROM_REGION16_BE( 0x1000000, "rle", 0 )
@ -1173,7 +1197,7 @@ ROM_START( tmek20 )
ROM_LOAD32_WORD( "0076", 0x800000, 0x200000, CRC(74dffe2d) SHA1(9436f69827050ad2f3be58f1cb57d7a06b75ab61) )
ROM_LOAD32_WORD( "0074", 0x800002, 0x200000, CRC(8dfc6ce0) SHA1(5b0d4dd4cb7934f542e67217a2542a3c69558cea) )
ROM_REGION( 0x300000, "gfx1", 0 )
ROM_REGION( 0x300000, "tiles", 0 )
ROM_LOAD( "0250", 0x000000, 0x80000, CRC(56bd9f25) SHA1(a8161aeee274f28c41f82b6b3f63570970ee281d) ) /* playfield, planes 0-1 */
ROM_LOAD( "0253a", 0x080000, 0x80000, CRC(23e2f83d) SHA1(804a17ce8768bd48cda853e55fc1f54ed7475968) )
ROM_LOAD( "0251", 0x100000, 0x80000, CRC(0d3b08f7) SHA1(72ec2383011ef20e9054594279cc85fa55c3a9b2) ) /* playfield, planes 2-3 */
@ -1181,7 +1205,7 @@ ROM_START( tmek20 )
ROM_LOAD( "0252", 0x200000, 0x80000, CRC(95a1c23b) SHA1(74eb69dcaebd7a7a03d8f7c9bf6183ece695e91d) ) /* playfield, planes 4-5 */
ROM_LOAD( "0255a", 0x280000, 0x80000, CRC(f0fbb700) SHA1(3f0355b137f6426a07abab77f25e718c6102a16f) )
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "alpha", 0x000000, 0x20000, CRC(8f57a604) SHA1(f076636430ff73ea11e4687ef7b21a7bac1d8e34) ) /* alphanumerics */
ROM_REGION16_BE( 0x1000000, "rle", 0 )
@ -1223,12 +1247,12 @@ ROM_START( primrage ) // still shows 'version 2.3' on the title screen but build
ROM_LOAD32_WORD( "136102-0075_dspsub.11c", 0x400000, 0x200000, CRC(02448be6) SHA1(cc82ececfa739600136b330df90edcc07dff9296) )
ROM_LOAD32_WORD( "136102-0077_dspsub.11e", 0x400002, 0x200000, CRC(057aff9a) SHA1(5d654baafb8395c059613069592ec392d1096870) )
ROM_REGION( 0x300000, "gfx1", 0 ) // same as the primrageo set
ROM_REGION( 0x300000, "tiles", 0 ) // same as the primrageo set
ROM_LOAD( "rage_136102-0050a_pf0l.25n", 0x000000, 0x80000, CRC(66896e8f) SHA1(7675b24c15ca0608f11f2a7b8d70717adb10924c) ) /* playfield, planes 0-1 */
ROM_LOAD( "rage_136102-0051a_pf0m.27n", 0x100000, 0x80000, CRC(fb5b3e7b) SHA1(f43fe4b5c4bbea10da46b60c644f586fb391355d) ) /* playfield, planes 2-3 */
ROM_LOAD( "rage_136102-0052a_pf0h.28n", 0x200000, 0x80000, CRC(cbe38670) SHA1(0780e599007851f6d37cdd8c701d01cb1ae48b9d) ) /* playfield, planes 4-5 */
ROM_REGION( 0x020000, "gfx2", 0 ) // same as the primrageo set
ROM_REGION( 0x020000, "chars", 0 ) // same as the primrageo set
ROM_LOAD( "rage_136102-1078a_alpha.22p", 0x000000, 0x20000, CRC(1d3260bf) SHA1(85d9db8499cbe180c8d52710f3cfe64453a530ff) ) /* alphanumerics */
ROM_REGION16_BE( 0x2000000, "rle", 0 ) // only first 2 dumped for this set, the rest's numbers match the primrageo set
@ -1309,12 +1333,12 @@ ROM_START( primrageo )
ROM_LOAD32_WORD( "136102-0075", 0x400000, 0x200000, CRC(b685a88e) SHA1(998b8fe54971f6cd96e4c22b19e3831f29d8172d) )
ROM_LOAD32_WORD( "136102-0077", 0x400002, 0x200000, CRC(3283cea8) SHA1(fb7333ca951053a56c501f2ce0eb197c8fcafaf7) )
ROM_REGION( 0x300000, "gfx1", 0 )
ROM_REGION( 0x300000, "tiles", 0 )
ROM_LOAD( "136102-0050a.25n", 0x000000, 0x80000, CRC(66896e8f) SHA1(7675b24c15ca0608f11f2a7b8d70717adb10924c) ) /* playfield, planes 0-1 */
ROM_LOAD( "136102-0051a.27n", 0x100000, 0x80000, CRC(fb5b3e7b) SHA1(f43fe4b5c4bbea10da46b60c644f586fb391355d) ) /* playfield, planes 2-3 */
ROM_LOAD( "136102-0052a.28n", 0x200000, 0x80000, CRC(cbe38670) SHA1(0780e599007851f6d37cdd8c701d01cb1ae48b9d) ) /* playfield, planes 4-5 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136102-1045b.23p", 0x000000, 0x20000, CRC(1d3260bf) SHA1(85d9db8499cbe180c8d52710f3cfe64453a530ff) ) /* alphanumerics */
ROM_REGION16_BE( 0x2000000, "rle", 0 )
@ -1395,12 +1419,12 @@ ROM_START( primrage20 )
ROM_LOAD32_WORD( "136102-0075", 0x400000, 0x200000, CRC(b685a88e) SHA1(998b8fe54971f6cd96e4c22b19e3831f29d8172d) )
ROM_LOAD32_WORD( "136102-0077", 0x400002, 0x200000, CRC(3283cea8) SHA1(fb7333ca951053a56c501f2ce0eb197c8fcafaf7) )
ROM_REGION( 0x300000, "gfx1", 0 )
ROM_REGION( 0x300000, "tiles", 0 )
ROM_LOAD( "136102-0050a.25n", 0x000000, 0x80000, CRC(66896e8f) SHA1(7675b24c15ca0608f11f2a7b8d70717adb10924c) ) /* playfield, planes 0-1 */
ROM_LOAD( "136102-0051a.27n", 0x100000, 0x80000, CRC(fb5b3e7b) SHA1(f43fe4b5c4bbea10da46b60c644f586fb391355d) ) /* playfield, planes 2-3 */
ROM_LOAD( "136102-0052a.28n", 0x200000, 0x80000, CRC(cbe38670) SHA1(0780e599007851f6d37cdd8c701d01cb1ae48b9d) ) /* playfield, planes 4-5 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136102-0045a.23p", 0x000000, 0x20000, CRC(c8b39b1c) SHA1(836c0ccf96b2beccacf6d8ac23981fc2d1f09803) ) /* alphanumerics */
ROM_REGION16_BE( 0x2000000, "rle", 0 )

View File

@ -14,11 +14,6 @@
#include "emupal.h"
#include "tilemap.h"
#define CRAM_ENTRIES 0x4000
#define TRAM_ENTRIES 0x4000
#define MRAM_ENTRIES 0x8000
#define ADDRSEQ_COUNT 4
class atarigt_state : public atarigen_state
{
@ -31,29 +26,29 @@ public:
m_playfield_tilemap(*this, "playfield"),
m_alpha_tilemap(*this, "alpha"),
m_rle(*this, "rle"),
m_mo_command(*this, "mo_command"),
m_cage(*this, "cage"),
m_service_io(*this, "SERVICE"),
m_coin_io(*this, "COIN"),
m_fake_io(*this, "FAKE"),
m_mo_command(*this, "mo_command"),
m_cage(*this, "cage")
m_fake_io(*this, "FAKE")
{ }
void atarigt(machine_config &config);
void atarigt_stereo(machine_config &config);
void tmek(machine_config &config);
void primrage20(machine_config &config);
void primrage(machine_config &config);
void atarigt(machine_config &config) ATTR_COLD;
void atarigt_stereo(machine_config &config) ATTR_COLD;
void tmek(machine_config &config) ATTR_COLD;
void primrage20(machine_config &config) ATTR_COLD;
void primrage(machine_config &config) ATTR_COLD;
void init_primrage();
void init_tmek();
void init_primrage() ATTR_COLD;
void init_tmek() ATTR_COLD;
protected:
virtual void machine_start() override ATTR_COLD;
virtual void video_start() override ATTR_COLD;
private:
static inline constexpr unsigned ADDRSEQ_COUNT = 4;
bool m_is_primrage = false;
required_device<palette_device> m_palette;
memory_share_creator<uint16_t> m_colorram;
@ -63,34 +58,36 @@ private:
required_device<tilemap_device> m_alpha_tilemap;
required_device<atari_rle_objects_device> m_rle;
required_shared_ptr<uint32_t> m_mo_command;
required_device<atari_cage_device> m_cage;
optional_ioport m_service_io;
optional_ioport m_coin_io;
optional_ioport m_fake_io;
bool m_is_primrage = false;
bool m_scanline_int_state = false;
bool m_video_int_state = false;
bitmap_ind16 m_pf_bitmap;
bitmap_ind16 m_an_bitmap;
uint8_t m_playfield_tile_bank = 0;
uint8_t m_playfield_color_bank = 0;
uint16_t m_playfield_xscroll = 0;
uint16_t m_playfield_yscroll = 0;
uint8_t m_playfield_tile_bank = 0;
uint8_t m_playfield_color_bank = 0;
uint16_t m_playfield_xscroll = 0;
uint16_t m_playfield_yscroll = 0;
uint32_t m_tram_checksum = 0;
required_shared_ptr<uint32_t> m_mo_command;
required_device<atari_cage_device> m_cage;
uint32_t m_tram_checksum = 0;
void (atarigt_state::*m_protection_w)(address_space &space, offs_t offset, uint16_t data);
void (atarigt_state::*m_protection_r)(address_space &space, offs_t offset, uint16_t *data);
bool m_ignore_writes = false;
offs_t m_protaddr[ADDRSEQ_COUNT]{};
uint8_t m_protmode = 0;
uint16_t m_protresult = 0;
std::unique_ptr<uint8_t[]> m_protdata;
uint8_t m_protmode = 0;
uint16_t m_protresult = 0;
std::unique_ptr<uint8_t []> m_protdata;
INTERRUPT_GEN_MEMBER(scanline_int_gen);
void video_int_write_line(int state);
@ -117,7 +114,7 @@ private:
TILE_GET_INFO_MEMBER(get_alpha_tile_info);
TILE_GET_INFO_MEMBER(get_playfield_tile_info);
TILEMAP_MAPPER_MEMBER(playfield_scan);
uint32_t screen_update_atarigt(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void main_map(address_map &map) ATTR_COLD;
void tmek_update_mode(offs_t offset);

View File

@ -32,9 +32,9 @@
*
*************************************/
#define RSHIFT 16
#define GSHIFT 8
#define BSHIFT 0
static constexpr unsigned RSHIFT = 16;
static constexpr unsigned GSHIFT = 8;
static constexpr unsigned BSHIFT = 0;
@ -46,19 +46,19 @@
TILE_GET_INFO_MEMBER(atarigt_state::get_alpha_tile_info)
{
uint16_t data = m_alpha_tilemap->basemem_read(tile_index);
int code = data & 0xfff;
int color = (data >> 12) & 0x0f;
uint16_t const data = m_alpha_tilemap->basemem_read(tile_index);
int const code = data & 0xfff;
int const color = (data >> 12) & 0x0f;
tileinfo.set(1, code, color, 0);
}
TILE_GET_INFO_MEMBER(atarigt_state::get_playfield_tile_info)
{
uint16_t data = m_playfield_tilemap->basemem_read(tile_index);
int code = (m_playfield_tile_bank << 12) | (data & 0xfff);
int color = (data >> 12) & 7;
tileinfo.set(0, code, color, (data >> 15) & 1);
uint16_t const data = m_playfield_tilemap->basemem_read(tile_index);
int const code = (m_playfield_tile_bank << 12) | (data & 0xfff);
int const color = (data >> 12) & 7;
tileinfo.set(0, code, color, BIT(data, 15));
}
@ -105,11 +105,9 @@ void atarigt_state::video_start()
void atarigt_state::colorram_w(offs_t address, uint16_t data, uint16_t mem_mask)
{
uint16_t olddata;
/* update the raw data */
address = (address & 0x7ffff) >> 1;
olddata = m_colorram[address];
uint16_t const olddata = m_colorram[address];
COMBINE_DATA(&m_colorram[address]);
/* update the TRAM checksum */
@ -143,7 +141,7 @@ uint16_t atarigt_state::colorram_r(offs_t address)
TIMER_DEVICE_CALLBACK_MEMBER(atarigt_state::scanline_update)
{
int scanline = param;
int const scanline = param;
/* keep in range */
int offset = ((scanline & ~7) << 3) + 48;
@ -154,11 +152,10 @@ TIMER_DEVICE_CALLBACK_MEMBER(atarigt_state::scanline_update)
for (int i = 0; i < 8; i++)
{
uint16_t word = m_alpha_tilemap->basemem_read(offset++);
if (word & 0x8000)
if (BIT(word, 15))
{
int newscroll = (word >> 5) & 0x3ff;
int newbank = (word >> 0) & 0x1f;
int const newscroll = (word >> 5) & 0x3ff;
int const newbank = (word >> 0) & 0x1f;
if (newscroll != m_playfield_xscroll)
{
if (scanline + i > 0)
@ -176,10 +173,10 @@ TIMER_DEVICE_CALLBACK_MEMBER(atarigt_state::scanline_update)
}
word = m_alpha_tilemap->basemem_read(offset++);
if (word & 0x8000)
if (BIT(word, 15))
{
int newscroll = ((word >> 6) - (scanline + i)) & 0x1ff;
int newbank = word & 15;
int const newscroll = ((word >> 6) - (scanline + i)) & 0x1ff;
int const newbank = word & 15;
if (newscroll != m_playfield_yscroll)
{
if (scanline + i > 0)
@ -482,7 +479,7 @@ PrimRage GALs:
*/
uint32_t atarigt_state::screen_update_atarigt(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
uint32_t atarigt_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
bitmap_ind16 &mo_bitmap = m_rle->vram(0);
bitmap_ind16 &tm_bitmap = m_rle->vram(1);
@ -513,9 +510,9 @@ uint32_t atarigt_state::screen_update_atarigt(screen_device &screen, bitmap_rgb3
{
for (int x = cliprect.left(); x <= cliprect.right(); x++)
{
uint8_t pfpri = (pf[x] >> 10) & 7;
uint8_t mopri = mo[x] >> ATARIRLE_PRIORITY_SHIFT;
uint8_t mgep = (mopri >= pfpri) && !(pfpri & 4);
uint8_t const pfpri = (pf[x] >> 10) & 7;
uint8_t const mopri = mo[x] >> atari_rle_objects_device::PRIORITY_SHIFT;
uint8_t const mgep = (mopri >= pfpri) && !(pfpri & 4);
/* compute CRA -- unlike T-Mek, MVID11 enforces MO priority and is ignored */
uint16_t cra;
@ -548,7 +545,7 @@ uint32_t atarigt_state::screen_update_atarigt(screen_device &screen, bitmap_rgb3
for (int x = cliprect.left(); x <= cliprect.right(); x++)
{
uint8_t const pfpri = (pf[x] >> 10) & 7;
uint8_t const mopri = mo[x] >> ATARIRLE_PRIORITY_SHIFT;
uint8_t const mopri = mo[x] >> atari_rle_objects_device::PRIORITY_SHIFT;
uint8_t const mgep = (mopri >= pfpri) && !(pfpri & 4);
/* compute CRA/TRA */
@ -575,11 +572,11 @@ uint32_t atarigt_state::screen_update_atarigt(screen_device &screen, bitmap_rgb3
uint16_t const mra = (tm[x] & 0xe00) << 1;
/* turn off CRA/TRA as appropriate */
int no_tra = 0, no_cra = 0;
bool no_tra = false, no_cra = false;
if (!(pf[x] & 0x1000) && (tra & 0x8000))
no_cra = 1;
no_cra = true;
if (!(!(cra & 0x8000) && (!(pf[x] & 0x1000) || !(pf[x] & 0x3f))))
no_tra = 1;
no_tra = true;
if (no_cra)
cra = 0;
if (no_tra)

View File

@ -56,14 +56,14 @@ void atarigx2_state::video_int_ack_w(uint32_t data)
uint32_t atarigx2_state::special_port2_r()
{
int temp = ioport("SERVICE")->read();
int const temp = m_io_service->read();
return (temp << 16) | temp;
}
uint32_t atarigx2_state::special_port3_r()
{
int temp = ioport("SPECIAL")->read();
int const temp = m_io_special->read();
return (temp << 16) | temp;
}
@ -71,7 +71,7 @@ uint32_t atarigx2_state::special_port3_r()
uint8_t atarigx2_state::a2d_data_r(offs_t offset)
{
uint8_t result = m_adc->data_r();
uint8_t const result = m_adc->data_r();
if (!machine().side_effects_disabled())
m_adc->address_offset_start_w(offset, 0);
return result;
@ -102,7 +102,7 @@ void atarigx2_state::latch_w(offs_t offset, uint32_t data, uint32_t mem_mask)
/* lower byte */
if (ACCESSING_BITS_16_23)
m_jsa->soundcpu().set_input_line(INPUT_LINE_RESET, (data & 0x100000) ? CLEAR_LINE : ASSERT_LINE);
m_jsa->soundcpu().set_input_line(INPUT_LINE_RESET, BIT(data, 20) ? CLEAR_LINE : ASSERT_LINE);
}
@ -110,7 +110,7 @@ void atarigx2_state::mo_command_w(offs_t offset, uint32_t data, uint32_t mem_mas
{
COMBINE_DATA(m_mo_command);
if (ACCESSING_BITS_0_15)
m_rle->command_write(((data & 0xffff) == 2) ? ATARIRLE_COMMAND_CHECKSUM : ATARIRLE_COMMAND_DRAW);
m_rle->command_write(((data & 0xffff) == 2) ? atari_rle_objects_device::COMMAND_CHECKSUM : atari_rle_objects_device::COMMAND_DRAW);
}
@ -126,7 +126,7 @@ void atarigx2_state::mo_command_w(offs_t offset, uint32_t data, uint32_t mem_mas
void atarigx2_state::atarigx2_protection_w(offs_t offset, uint32_t data, uint32_t mem_mask)
{
{
int pc = m_maincpu->pcbase();
int const pc = m_maincpu->pcbase();
// if (pc == 0x11cbe || pc == 0x11c30)
// logerror("%06X:Protection W@%04X = %04X (result to %06X)\n", pc, offset, data, m_maincpu->state_int(M68K_A2));
// else
@ -1137,7 +1137,7 @@ uint32_t atarigx2_state::atarigx2_protection_r(offs_t offset, uint32_t mem_mask)
result |= 0x80000000;
if (offset == 0x3f0)
{
uint32_t tag = (m_last_write_offset << 17) | m_last_write;
uint32_t const tag = (m_last_write_offset << 17) | m_last_write;
int i = 0;
while (lookup_table[i][0] != 0xffffffff)
@ -1156,14 +1156,18 @@ uint32_t atarigx2_state::atarigx2_protection_r(offs_t offset, uint32_t mem_mask)
result = machine().rand() << 16;
else
result = 0xffff << 16;
logerror("%06X:Unhandled protection R@%04X = %04X\n", m_maincpu->pcbase(), offset, result);
if (!machine().side_effects_disabled())
logerror("%06X:Unhandled protection R@%04X = %04X\n", m_maincpu->pcbase(), offset, result);
}
}
if (ACCESSING_BITS_16_31)
logerror("%06X:Protection R@%04X = %04X\n", m_maincpu->pcbase(), offset * 4, result >> 16);
else
logerror("%06X:Protection R@%04X = %04X\n", m_maincpu->pcbase(), offset * 4 + 2, result);
if (!machine().side_effects_disabled())
{
if (ACCESSING_BITS_16_31)
logerror("%06X:Protection R@%04X = %04X\n", m_maincpu->pcbase(), offset * 4, result >> 16);
else
logerror("%06X:Protection R@%04X = %04X\n", m_maincpu->pcbase(), offset * 4 + 2, result);
}
return result;
}
@ -1194,7 +1198,7 @@ void atarigx2_state::main_map(address_map &map)
map(0xd77000, 0xd77fff).ram();
map(0xd78000, 0xd78fff).ram().share("rle");
map(0xd79000, 0xd7a1ff).ram();
map(0xd7a200, 0xd7a203).ram().w(FUNC(atarigx2_state::mo_command_w)).share("mo_command");
map(0xd7a200, 0xd7a203).ram().w(FUNC(atarigx2_state::mo_command_w)).share(m_mo_command);
map(0xd7a204, 0xd7ffff).ram();
map(0xd80000, 0xd9ffff).w("eeprom", FUNC(eeprom_parallel_28xx_device::unlock_write32));
map(0xe06000, 0xe06000).w(m_jsa, FUNC(atari_jsa_iiis_device::main_command_w));
@ -1423,21 +1427,10 @@ static const gfx_layout pftoplayout =
16*8
};
static const gfx_layout anlayout =
{
8,8,
RGN_FRAC(1,1),
4,
{ 0, 1, 2, 3 },
{ 0, 4, 8, 12, 16, 20, 24, 28 },
{ 0*8, 4*8, 8*8, 12*8, 16*8, 20*8, 24*8, 28*8 },
32*8
};
static GFXDECODE_START( gfx_atarigx2 )
GFXDECODE_ENTRY( "gfx1", 0, pflayout, 0x000, 64 )
GFXDECODE_ENTRY( "gfx2", 0, anlayout, 0x000, 16 )
GFXDECODE_ENTRY( "gfx1", 0, pftoplayout, 0x000, 64 )
GFXDECODE_ENTRY( "tiles", 0, pflayout, 0x000, 64 )
GFXDECODE_ENTRY( "chars", 0, gfx_8x8x4_packed_msb, 0x000, 16 )
GFXDECODE_ENTRY( "tiles", 0, pftoplayout, 0x000, 64 )
GFXDECODE_END
static const atari_rle_objects_config modesc_0x200 =
@ -1516,7 +1509,7 @@ void atarigx2_state::atarigx2(machine_config &config)
/* note: these parameters are from published specs, not derived */
/* the board uses a pair of GALs to determine H and V parameters */
m_screen->set_raw(14.318181_MHz_XTAL/2, 456, 0, 336, 262, 0, 240);
m_screen->set_screen_update(FUNC(atarigx2_state::screen_update_atarigx2));
m_screen->set_screen_update(FUNC(atarigx2_state::screen_update));
m_screen->set_palette("palette");
m_screen->screen_vblank().set_inputline(m_maincpu, M68K_IRQ_4, ASSERT_LINE);
@ -1563,12 +1556,12 @@ ROM_START( spclords )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136095.80a", 0x00000, 0x10000, CRC(33bc0ede) SHA1(2ee30d9125057cdfbdb83e4dbf28306c35a9c233) )
ROM_REGION( 0x60000, "gfx1", 0 )
ROM_REGION( 0x60000, "tiles", 0 )
ROM_LOAD( "136095.30a", 0x00000, 0x20000, CRC(27e0cfec) SHA1(03df57757d091f9a0b8c8d98d091dd759f570788) ) /* playfield, planes 0-1 */
ROM_LOAD( "136095.31a", 0x20000, 0x20000, CRC(5529cdc7) SHA1(8aff8a42fb2a86b7e4666940da4c1ee19dab6281) ) /* playfield, planes 2-3 */
ROM_FILL( 0x40000, 0x20000, 0x00 ) /* playfield, planes 4-5 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136095.25a", 0x000000, 0x20000, CRC(1669496e) SHA1(005deaafd6156505e3a27966123e58928837ad9f) ) /* alphanumerics */
ROM_REGION16_BE( 0x600000, "rle", 0 )
@ -1608,12 +1601,12 @@ ROM_START( spclordsb )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136095.80a", 0x00000, 0x10000, CRC(33bc0ede) SHA1(2ee30d9125057cdfbdb83e4dbf28306c35a9c233) )
ROM_REGION( 0x60000, "gfx1", 0 )
ROM_REGION( 0x60000, "tiles", 0 )
ROM_LOAD( "136095.30a", 0x00000, 0x20000, CRC(27e0cfec) SHA1(03df57757d091f9a0b8c8d98d091dd759f570788) ) /* playfield, planes 0-1 */
ROM_LOAD( "136095.31a", 0x20000, 0x20000, CRC(5529cdc7) SHA1(8aff8a42fb2a86b7e4666940da4c1ee19dab6281) ) /* playfield, planes 2-3 */
ROM_FILL( 0x40000, 0x20000, 0x00 ) /* playfield, planes 4-5 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136095.25a", 0x000000, 0x20000, CRC(1669496e) SHA1(005deaafd6156505e3a27966123e58928837ad9f) ) /* alphanumerics */
ROM_REGION16_BE( 0x600000, "rle", 0 )
@ -1653,12 +1646,12 @@ ROM_START( spclordsg )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136095.80a", 0x00000, 0x10000, CRC(33bc0ede) SHA1(2ee30d9125057cdfbdb83e4dbf28306c35a9c233) )
ROM_REGION( 0x60000, "gfx1", 0 )
ROM_REGION( 0x60000, "tiles", 0 )
ROM_LOAD( "136095.30a", 0x00000, 0x20000, CRC(27e0cfec) SHA1(03df57757d091f9a0b8c8d98d091dd759f570788) ) /* playfield, planes 0-1 */
ROM_LOAD( "136095.31a", 0x20000, 0x20000, CRC(5529cdc7) SHA1(8aff8a42fb2a86b7e4666940da4c1ee19dab6281) ) /* playfield, planes 2-3 */
ROM_FILL( 0x40000, 0x20000, 0x00 ) /* playfield, planes 4-5 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136095.25a", 0x000000, 0x20000, CRC(1669496e) SHA1(005deaafd6156505e3a27966123e58928837ad9f) ) /* alphanumerics */
ROM_REGION16_BE( 0x600000, "rle", 0 )
@ -1698,12 +1691,12 @@ ROM_START( spclordsa )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136095.80a", 0x00000, 0x10000, CRC(33bc0ede) SHA1(2ee30d9125057cdfbdb83e4dbf28306c35a9c233) )
ROM_REGION( 0x60000, "gfx1", 0 )
ROM_REGION( 0x60000, "tiles", 0 )
ROM_LOAD( "136095.30a", 0x00000, 0x20000, CRC(27e0cfec) SHA1(03df57757d091f9a0b8c8d98d091dd759f570788) ) /* playfield, planes 0-1 */
ROM_LOAD( "136095.31a", 0x20000, 0x20000, CRC(5529cdc7) SHA1(8aff8a42fb2a86b7e4666940da4c1ee19dab6281) ) /* playfield, planes 2-3 */
ROM_FILL( 0x40000, 0x20000, 0x00 ) /* playfield, planes 4-5 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136095.25a", 0x000000, 0x20000, CRC(1669496e) SHA1(005deaafd6156505e3a27966123e58928837ad9f) ) /* alphanumerics */
ROM_REGION16_BE( 0x600000, "rle", 0 )
@ -1743,12 +1736,12 @@ ROM_START( motofren )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136094-0080a.12c", 0x00000, 0x10000, CRC(0b1e565c) SHA1(03bdeafd8cf680f76bbd1f9aba6efac27f19a93c) )
ROM_REGION( 0x180000, "gfx1", 0 )
ROM_REGION( 0x180000, "tiles", 0 )
ROM_LOAD( "136094-0036a.2d", 0x000000, 0x80000, CRC(1b63b493) SHA1(980141fec011fa2b5cb020eeecb4784d31679dba) ) /* playfield, planes 0-1 */
ROM_LOAD( "136094-0037a.5d", 0x080000, 0x80000, CRC(6d290056) SHA1(fa32dbe5ac5e735d700d086353461eaa2c1dee55) ) /* playfield, planes 2-3 */
ROM_LOAD( "136094-0038a.8d", 0x100000, 0x80000, CRC(38197c88) SHA1(dc5d4d878759503b8500e8e3a032f499bfeedcb1) ) /* playfield, planes 4-5 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136094-0025a.13n", 0x000000, 0x20000, CRC(6ab762ad) SHA1(c52dd207ff5adaffa458e020e7d452a1d1e65194) ) /* alphanumerics */
ROM_REGION16_BE( 0x700000, "rle", 0 )
@ -1790,12 +1783,12 @@ ROM_START( motofrenmd )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136094-0080b.12c", 0x00000, 0x10000, CRC(5e542608) SHA1(8a10b5fac6ac120c7aae2edaa12413c9b8345d87) )
ROM_REGION( 0x180000, "gfx1", 0 ) /* Although verified, the manual states the label codes as 136094-0030 through 136094-0032 */
ROM_REGION( 0x180000, "tiles", 0 ) /* Although verified, the manual states the label codes as 136094-0030 through 136094-0032 */
ROM_LOAD( "136094-0036a.2d", 0x000000, 0x80000, CRC(1b63b493) SHA1(980141fec011fa2b5cb020eeecb4784d31679dba) ) /* playfield, planes 0-1 */
ROM_LOAD( "136094-0037a.5d", 0x080000, 0x80000, CRC(6d290056) SHA1(fa32dbe5ac5e735d700d086353461eaa2c1dee55) ) /* playfield, planes 2-3 */
ROM_LOAD( "136094-0038a.8d", 0x100000, 0x80000, CRC(38197c88) SHA1(dc5d4d878759503b8500e8e3a032f499bfeedcb1) ) /* playfield, planes 4-5 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136094-0025a.13n", 0x000000, 0x20000, CRC(6ab762ad) SHA1(c52dd207ff5adaffa458e020e7d452a1d1e65194) ) /* alphanumerics */
ROM_REGION16_BE( 0x700000, "rle", 0 )
@ -1841,12 +1834,12 @@ ROM_START( motofrei )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136094-0080a.12c", 0x00000, 0x10000, CRC(0b1e565c) SHA1(03bdeafd8cf680f76bbd1f9aba6efac27f19a93c) )
ROM_REGION( 0x180000, "gfx1", 0 )
ROM_REGION( 0x180000, "tiles", 0 )
ROM_LOAD( "136094-0036a.2d", 0x000000, 0x80000, CRC(1b63b493) SHA1(980141fec011fa2b5cb020eeecb4784d31679dba) ) /* playfield, planes 0-1 */
ROM_LOAD( "136094-0037a.5d", 0x080000, 0x80000, CRC(6d290056) SHA1(fa32dbe5ac5e735d700d086353461eaa2c1dee55) ) /* playfield, planes 2-3 */
ROM_LOAD( "136094-0038a.8d", 0x100000, 0x80000, CRC(38197c88) SHA1(dc5d4d878759503b8500e8e3a032f499bfeedcb1) ) /* playfield, planes 4-5 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136094-0025a.13n", 0x000000, 0x20000, CRC(6ab762ad) SHA1(c52dd207ff5adaffa458e020e7d452a1d1e65194) ) /* alphanumerics */
ROM_REGION16_BE( 0x700000, "rle", 0 )
@ -1889,12 +1882,12 @@ ROM_START( motofreg )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136094-0080a.12c", 0x00000, 0x10000, CRC(0b1e565c) SHA1(03bdeafd8cf680f76bbd1f9aba6efac27f19a93c) )
ROM_REGION( 0x180000, "gfx1", 0 )
ROM_REGION( 0x180000, "tiles", 0 )
ROM_LOAD( "136094-0036a.2d", 0x000000, 0x80000, CRC(1b63b493) SHA1(980141fec011fa2b5cb020eeecb4784d31679dba) ) /* playfield, planes 0-1 */
ROM_LOAD( "136094-0037a.5d", 0x080000, 0x80000, CRC(6d290056) SHA1(fa32dbe5ac5e735d700d086353461eaa2c1dee55) ) /* playfield, planes 2-3 */
ROM_LOAD( "136094-0038a.8d", 0x100000, 0x80000, CRC(38197c88) SHA1(dc5d4d878759503b8500e8e3a032f499bfeedcb1) ) /* playfield, planes 4-5 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136094-0025a.13n", 0x000000, 0x20000, CRC(6ab762ad) SHA1(c52dd207ff5adaffa458e020e7d452a1d1e65194) ) /* alphanumerics */
ROM_REGION16_BE( 0x700000, "rle", 0 )
@ -1937,12 +1930,12 @@ ROM_START( motofmdg )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136094-0080a.12c", 0x00000, 0x10000, CRC(0b1e565c) SHA1(03bdeafd8cf680f76bbd1f9aba6efac27f19a93c) )
ROM_REGION( 0x180000, "gfx1", 0 )
ROM_REGION( 0x180000, "tiles", 0 )
ROM_LOAD( "136094-0036a.2d", 0x000000, 0x80000, CRC(1b63b493) SHA1(980141fec011fa2b5cb020eeecb4784d31679dba) ) /* playfield, planes 0-1 */
ROM_LOAD( "136094-0037a.5d", 0x080000, 0x80000, CRC(6d290056) SHA1(fa32dbe5ac5e735d700d086353461eaa2c1dee55) ) /* playfield, planes 2-3 */
ROM_LOAD( "136094-0038a.8d", 0x100000, 0x80000, CRC(38197c88) SHA1(dc5d4d878759503b8500e8e3a032f499bfeedcb1) ) /* playfield, planes 4-5 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136094-0025a.13n", 0x000000, 0x20000, CRC(6ab762ad) SHA1(c52dd207ff5adaffa458e020e7d452a1d1e65194) ) /* alphanumerics */
ROM_REGION16_BE( 0x700000, "rle", 0 )
@ -1984,12 +1977,12 @@ ROM_START( motofrenft )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136094-0080a.12c", 0x00000, 0x10000, CRC(0b1e565c) SHA1(03bdeafd8cf680f76bbd1f9aba6efac27f19a93c) )
ROM_REGION( 0x180000, "gfx1", 0 )
ROM_REGION( 0x180000, "tiles", 0 )
ROM_LOAD( "136094-0036a.2d", 0x000000, 0x80000, CRC(1b63b493) SHA1(980141fec011fa2b5cb020eeecb4784d31679dba) ) /* playfield, planes 0-1 */
ROM_LOAD( "136094-0037a.5d", 0x080000, 0x80000, CRC(6d290056) SHA1(fa32dbe5ac5e735d700d086353461eaa2c1dee55) ) /* playfield, planes 2-3 */
ROM_LOAD( "136094-0038a.8d", 0x100000, 0x80000, CRC(38197c88) SHA1(dc5d4d878759503b8500e8e3a032f499bfeedcb1) ) /* playfield, planes 4-5 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136094-0025a.13n", 0x000000, 0x20000, CRC(6ab762ad) SHA1(c52dd207ff5adaffa458e020e7d452a1d1e65194) ) /* alphanumerics */
ROM_REGION16_BE( 0x700000, "rle", 0 )
@ -2031,12 +2024,12 @@ ROM_START( motofrenmf )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136094-0080a.12c", 0x00000, 0x10000, CRC(0b1e565c) SHA1(03bdeafd8cf680f76bbd1f9aba6efac27f19a93c) )
ROM_REGION( 0x180000, "gfx1", 0 )
ROM_REGION( 0x180000, "tiles", 0 )
ROM_LOAD( "136094-0036a.2d", 0x000000, 0x80000, CRC(1b63b493) SHA1(980141fec011fa2b5cb020eeecb4784d31679dba) ) /* playfield, planes 0-1 */
ROM_LOAD( "136094-0037a.5d", 0x080000, 0x80000, CRC(6d290056) SHA1(fa32dbe5ac5e735d700d086353461eaa2c1dee55) ) /* playfield, planes 2-3 */
ROM_LOAD( "136094-0038a.8d", 0x100000, 0x80000, CRC(38197c88) SHA1(dc5d4d878759503b8500e8e3a032f499bfeedcb1) ) /* playfield, planes 4-5 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "136094-0025a.13n", 0x000000, 0x20000, CRC(6ab762ad) SHA1(c52dd207ff5adaffa458e020e7d452a1d1e65194) ) /* alphanumerics */
ROM_REGION16_BE( 0x700000, "rle", 0 )
@ -2075,12 +2068,12 @@ ROM_START( rrreveng )
ROM_LOAD32_BYTE( "revenge.37e", 0x00002, 0x20000, CRC(b5e2a3e2) SHA1(b6ad6d03120ad6699af31d09474b82979ead65bb) )
ROM_LOAD32_BYTE( "revenge.37j", 0x00003, 0x20000, CRC(6c7f114b) SHA1(2b9a627ec0a211da8080ea33a5486367b043952a) )
ROM_REGION( 0x180000, "gfx1", 0 )
ROM_REGION( 0x180000, "tiles", 0 )
ROM_LOAD( "rralpl.2d", 0x000000, 0x80000, CRC(00488dad) SHA1(604f08a219db0438dcbf21337ebd497f353bd812) ) /* playfield, planes 0-1 */
ROM_LOAD( "rralpm.5d", 0x080000, 0x80000, CRC(ade27447) SHA1(641fdca97a4b08251e111425d8467e4640433df7) ) /* playfield, planes 2-3 */
ROM_LOAD( "rralph.8d", 0x100000, 0x80000, CRC(ef04f04e) SHA1(e518133096978c4a0152253231625c385a84530f) ) /* playfield, planes 4-5 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "alpha.13n", 0x000000, 0x20000, CRC(f2efbd66) SHA1(d5339f0b3de7a102d659f7459b5f4800cab31829) ) /* alphanumerics */
ROM_REGION16_BE( 0x500000, "rle", 0 )
@ -2139,12 +2132,12 @@ ROM_START( rrrevenga ) /* Same program roms as the set below, but shares more ro
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "rr65snd.bin", 0x00000, 0x10000, CRC(d78429da) SHA1(a4d36d74986f08c793f15f2e67cb97a8c91c5e90) )
ROM_REGION( 0x180000, "gfx1", 0 )
ROM_REGION( 0x180000, "tiles", 0 )
ROM_LOAD( "rralpl.2d", 0x000000, 0x80000, CRC(00488dad) SHA1(604f08a219db0438dcbf21337ebd497f353bd812) ) /* playfield, planes 0-1 */
ROM_LOAD( "rralpm.5d", 0x080000, 0x80000, CRC(ade27447) SHA1(641fdca97a4b08251e111425d8467e4640433df7) ) /* playfield, planes 2-3 */
ROM_LOAD( "rralph.8d", 0x100000, 0x80000, CRC(ef04f04e) SHA1(e518133096978c4a0152253231625c385a84530f) ) /* playfield, planes 4-5 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "alpha.13n", 0x000000, 0x20000, CRC(f2efbd66) SHA1(d5339f0b3de7a102d659f7459b5f4800cab31829) ) /* alphanumerics */
ROM_REGION16_BE( 0x500000, "rle", 0 )
@ -2198,12 +2191,12 @@ ROM_START( rrrevengb )
ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "rr65snd.bin", 0x00000, 0x10000, CRC(d78429da) SHA1(a4d36d74986f08c793f15f2e67cb97a8c91c5e90) )
ROM_REGION( 0x180000, "gfx1", 0 )
ROM_REGION( 0x180000, "tiles", 0 )
ROM_LOAD( "rralpl.2d", 0x000000, 0x80000, CRC(00488dad) SHA1(604f08a219db0438dcbf21337ebd497f353bd812) ) /* playfield, planes 0-1 */
ROM_LOAD( "rralpm.5d", 0x080000, 0x80000, CRC(ade27447) SHA1(641fdca97a4b08251e111425d8467e4640433df7) ) /* playfield, planes 2-3 */
ROM_LOAD( "rralph.8d", 0x100000, 0x80000, CRC(ef04f04e) SHA1(e518133096978c4a0152253231625c385a84530f) ) /* playfield, planes 4-5 */
ROM_REGION( 0x020000, "gfx2", 0 )
ROM_REGION( 0x020000, "chars", 0 )
ROM_LOAD( "rralalph.13n", 0x000000, 0x20000, CRC(7ca93790) SHA1(5e2f069be4b15d63f418c8693e8550eb0ae22381) ) /* alphanumerics */
ROM_REGION16_BE( 0x500000, "rle", 0 )

View File

@ -31,6 +31,8 @@ public:
, m_alpha_tilemap(*this, "alpha")
, m_rle(*this, "rle")
, m_adc(*this, "adc")
, m_io_service(*this, "SERVICE")
, m_io_special(*this, "SPECIAL")
{ }
void init_spclords();
@ -54,15 +56,13 @@ protected:
TILE_GET_INFO_MEMBER(get_alpha_tile_info);
TILE_GET_INFO_MEMBER(get_playfield_tile_info);
TILEMAP_MAPPER_MEMBER(atarigx2_playfield_scan);
uint32_t screen_update_atarigx2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void atarigx2_mo_control_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
void atarigx2(machine_config &config);
void main_map(address_map &map) ATTR_COLD;
private:
uint16_t m_playfield_base = 0U;
required_device<atari_jsa_iiis_device> m_jsa;
optional_device<atari_xga_device> m_xga;
@ -74,6 +74,11 @@ private:
required_device<adc0808_device> m_adc;
optional_ioport m_io_service;
optional_ioport m_io_special;
uint16_t m_playfield_base = 0U;
uint16_t m_current_control = 0U;
uint8_t m_playfield_tile_bank = 0U;
uint8_t m_playfield_color_bank = 0U;

View File

@ -16,7 +16,7 @@
Upper bits come from the low 5 bits of the HSCROLL value in alpha RAM
Playfield bank comes from low 2 bits of the VSCROLL value in alpha RAM
For GX2, there are 4 bits of bank1
For GX2, there are 4 bits of bank
****************************************************************************/
@ -35,27 +35,27 @@
TILE_GET_INFO_MEMBER(atarigx2_state::get_alpha_tile_info)
{
uint16_t data = m_alpha_tilemap->basemem_read(tile_index);
int code = data & 0xfff;
int color = (data >> 12) & 0x0f;
int opaque = data & 0x8000;
uint16_t const data = m_alpha_tilemap->basemem_read(tile_index);
int const code = data & 0xfff;
int const color = (data >> 12) & 0x0f;
bool const opaque = BIT(data, 15);
tileinfo.set(1, code, color, opaque ? TILE_FORCE_LAYER0 : 0);
}
TILE_GET_INFO_MEMBER(atarigx2_state::get_playfield_tile_info)
{
uint16_t data = m_playfield_tilemap->basemem_read(tile_index);
int code = (m_playfield_tile_bank << 12) | (data & 0xfff);
int color = (m_playfield_base >> 5) + ((m_playfield_color_bank << 3) & 0x18) + ((data >> 12) & 7);
tileinfo.set(0, code, color, (data >> 15) & 1);
uint16_t const data = m_playfield_tilemap->basemem_read(tile_index);
int const code = (m_playfield_tile_bank << 12) | (data & 0xfff);
int const color = (m_playfield_base >> 5) + ((m_playfield_color_bank << 3) & 0x18) + ((data >> 12) & 7);
tileinfo.set(0, code, color, BIT(data, 15));
tileinfo.category = (m_playfield_color_bank >> 2) & 7;
}
TILEMAP_MAPPER_MEMBER(atarigx2_state::atarigx2_playfield_scan)
{
int bank = 1 - (col / (num_cols / 2));
int const bank = 1 - (col / (num_cols / 2));
return bank * (num_rows * num_cols / 2) + row * (num_cols / 2) + (col % (num_cols / 2));
}
@ -99,7 +99,7 @@ void atarigx2_state::atarigx2_mo_control_w(offs_t offset, uint16_t data, uint16_
TIMER_DEVICE_CALLBACK_MEMBER(atarigx2_state::scanline_update)
{
int scanline = param;
int const scanline = param;
if (scanline == 0) logerror("-------\n");
@ -112,11 +112,10 @@ TIMER_DEVICE_CALLBACK_MEMBER(atarigx2_state::scanline_update)
for (int i = 0; i < 8; i++)
{
uint16_t word = m_alpha_tilemap->basemem_read(offset++);
if (word & 0x8000)
if (BIT(word, 15))
{
int newscroll = (word >> 5) & 0x3ff;
int newbank = (word >> 0) & 0x1f;
int const newscroll = (word >> 5) & 0x3ff;
int const newbank = (word >> 0) & 0x1f;
if (newscroll != m_playfield_xscroll)
{
if (scanline + i > 0)
@ -134,10 +133,10 @@ TIMER_DEVICE_CALLBACK_MEMBER(atarigx2_state::scanline_update)
}
word = m_alpha_tilemap->basemem_read(offset++);
if (word & 0x8000)
if (BIT(word, 15))
{
int newscroll = ((word >> 6) - (scanline + i)) & 0x1ff;
int newbank = word & 15;
int const newscroll = ((word >> 6) - (scanline + i)) & 0x1ff;
int const newbank = word & 15;
if (newscroll != m_playfield_yscroll)
{
if (scanline + i > 0)
@ -164,7 +163,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(atarigx2_state::scanline_update)
*
*************************************/
uint32_t atarigx2_state::screen_update_atarigx2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
uint32_t atarigx2_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
bitmap_ind8 &priority_bitmap = screen.priority();
@ -194,8 +193,8 @@ uint32_t atarigx2_state::screen_update_atarigx2(screen_device &screen, bitmap_in
uint16_t const *const mo = &mo_bitmap.pix(y);
uint8_t const *const pri = &priority_bitmap.pix(y);
for (int x = left; x < right; x++)
if (mo[x] && (mo[x] >> ATARIRLE_PRIORITY_SHIFT) >= pri[x])
pf[x] = mo[x] & ATARIRLE_DATA_MASK;
if (mo[x] && (mo[x] >> atari_rle_objects_device::PRIORITY_SHIFT) >= pri[x])
pf[x] = mo[x] & atari_rle_objects_device::DATA_MASK;
}
}

View File

@ -85,16 +85,16 @@ void atari_rle_objects_device::control_write(u8 data)
//logerror("atarirle_control_w(%d)\n", bits);
// do nothing if nothing changed
int oldbits = m_control_bits;
int const oldbits = m_control_bits;
if (oldbits == data)
return;
// force a partial update first
int scanline = screen().vpos();
int const scanline = screen().vpos();
screen().update_partial(scanline);
// if the erase flag was set, erase the front map
if ((oldbits & ATARIRLE_CONTROL_ERASE) != 0)
if ((oldbits & CONTROL_ERASE) != 0)
{
// compute the top and bottom of the rect
rectangle cliprect(m_cliprect);
@ -102,23 +102,23 @@ void atari_rle_objects_device::control_write(u8 data)
(std::max)(cliprect.top(), m_partial_scanline + 1),
(std::min)(cliprect.bottom(), scanline));
//logerror(" partial erase %d-%d (frame %d)\n", cliprect.top(), cliprect.bottom(), (oldbits & ATARIRLE_CONTROL_FRAME) >> 2);
//logerror(" partial erase %d-%d (frame %d)\n", cliprect.top(), cliprect.bottom(), (oldbits & CONTROL_FRAME) >> 2);
// erase the bitmap
m_vram[0][(oldbits & ATARIRLE_CONTROL_FRAME) >> 2].fill(0, cliprect);
m_vram[0][(oldbits & CONTROL_FRAME) >> 2].fill(0, cliprect);
if (m_vrammask.mask() != 0)
m_vram[1][(oldbits & ATARIRLE_CONTROL_FRAME) >> 2].fill(0, cliprect);
m_vram[1][(oldbits & CONTROL_FRAME) >> 2].fill(0, cliprect);
}
// update the bits
m_control_bits = data;
// if mogo is set, do a render on the rising edge
if ((oldbits & ATARIRLE_CONTROL_MOGO) == 0 && (data & ATARIRLE_CONTROL_MOGO) != 0)
if ((oldbits & CONTROL_MOGO) == 0 && (data & CONTROL_MOGO) != 0)
{
if (m_command == ATARIRLE_COMMAND_DRAW)
if (m_command == COMMAND_DRAW)
sort_and_render();
else if (m_command == ATARIRLE_COMMAND_CHECKSUM)
else if (m_command == COMMAND_CHECKSUM)
compute_checksum();
}
@ -147,18 +147,18 @@ void atari_rle_objects_device::vblank_callback(screen_device &screen, bool state
// on the rising edge, if the erase flag is set, erase to the end of the screen
if (state)
{
if (m_control_bits & ATARIRLE_CONTROL_ERASE)
if (m_control_bits & CONTROL_ERASE)
{
// compute top only; bottom is equal to visible_area
rectangle cliprect = m_cliprect;
cliprect.sety((std::max)(cliprect.top(), m_partial_scanline + 1), cliprect.bottom());
//logerror(" partial erase %d-%d (frame %d)\n", cliprect.top(), cliprect.bottom(), (m_control_bits & ATARIRLE_CONTROL_FRAME) >> 2);
//logerror(" partial erase %d-%d (frame %d)\n", cliprect.top(), cliprect.bottom(), (m_control_bits & CONTROL_FRAME) >> 2);
// erase the bitmap
m_vram[0][(m_control_bits & ATARIRLE_CONTROL_FRAME) >> 2].fill(0, cliprect);
m_vram[0][(m_control_bits & CONTROL_FRAME) >> 2].fill(0, cliprect);
if (m_vrammask.mask() != 0)
m_vram[1][(m_control_bits & ATARIRLE_CONTROL_FRAME) >> 2].fill(0, cliprect);
m_vram[1][(m_control_bits & CONTROL_FRAME) >> 2].fill(0, cliprect);
}
// reset the partial scanline to -1 so we can detect full updates
@ -331,8 +331,8 @@ int atari_rle_objects_device::count_objects()
int lowest_address = m_rombase.length();
for (int objoffset = 0; objoffset < lowest_address; objoffset += 4)
{
int offset = ((m_rombase[objoffset + 2] & 0xff) << 16) | m_rombase[objoffset + 3];
//logerror("count_objects: objoffset=%d offset=%08X\n", objoffset, offset);
int const offset = ((m_rombase[objoffset + 2] & 0xff) << 16) | m_rombase[objoffset + 3];
//logerror("count_objects: objoffset=%d offset=%08X\n", objoffset, offset);
if (offset > objoffset && offset < lowest_address)
lowest_address = offset;
}
@ -358,12 +358,12 @@ void atari_rle_objects_device::prescan_rle(int which)
info.yoffs = (s16)base[1];
// determine the depth and table
int flags = base[2];
int const flags = base[2];
info.bpp = m_rle_bpp[(flags >> 8) & 7];
const u16 *table = info.table = m_rle_table[(flags >> 8) & 7];
// determine the starting offset
int offset = ((base[2] & 0xff) << 16) | base[3];
int const offset = ((base[2] & 0xff) << 16) | base[3];
info.data = base = (u16 *)&m_rombase[offset];
// make sure it's valid
@ -397,7 +397,7 @@ void atari_rle_objects_device::prescan_rle(int which)
// track the width
while (entry_count-- && base < end)
{
int word = *base++;
int const word = *base++;
int count/*, value*/;
// decode the low byte first
@ -461,32 +461,32 @@ void atari_rle_objects_device::sort_and_render()
sort_entry_t sort_entry[256];
for (int objnum = 0; objnum < 256; objnum++)
{
int order = m_ordermask.extract(m_ram, objnum * 8);
int const order = m_ordermask.extract(m_ram, objnum * 8);
sort_entry[objnum].entry = objnum * 8;
sort_entry[objnum].next = list_head[order];
list_head[order] = &sort_entry[objnum];
}
// now loop back and process
int bitmap_index = (~m_control_bits & ATARIRLE_CONTROL_FRAME) >> 2;
int const bitmap_index = (~m_control_bits & CONTROL_FRAME) >> 2;
int count = 0;
int hilite = -1;
for (int order = 1; order < 256; order++)
for (sort_entry_t *current = list_head[order]; current != nullptr; current = current->next)
{
// extract scale and code
int scale = m_scalemask.extract(m_ram, current->entry);
int code = m_codemask.extract(m_ram, current->entry);
int const scale = m_scalemask.extract(m_ram, current->entry);
int const code = m_codemask.extract(m_ram, current->entry);
// make sure they are in range
if (scale > 0 && code < m_objectcount)
{
int hflip = m_hflipmask.extract(m_ram, current->entry);
int const hflip = m_hflipmask.extract(m_ram, current->entry);
int color = m_colormask.extract(m_ram, current->entry);
int priority = m_prioritymask.extract(m_ram, current->entry);
int const priority = m_prioritymask.extract(m_ram, current->entry);
int x = m_xposmask.extract(m_ram, current->entry);
int y = m_yposmask.extract(m_ram, current->entry);
int which = m_vrammask.extract(m_ram, current->entry);
int const which = m_vrammask.extract(m_ram, current->entry);
if (count++ == atarirle_hilite_index)
hilite = current->entry;
@ -498,7 +498,7 @@ void atari_rle_objects_device::sort_and_render()
x += m_cliprect.left();
// merge priority and color
color = (color << 4) | (priority << ATARIRLE_PRIORITY_SHIFT);
color = (color << 4) | (priority << PRIORITY_SHIFT);
// render to one or both bitmaps
bitmap_ind16 &bitmap = m_vram[which][bitmap_index];
@ -525,7 +525,7 @@ void atari_rle_objects_device::draw_rle(bitmap_ind16 &bitmap, const rectangle &c
//
int scaled_xoffs = (xscale * info.xoffs) >> 12;
int scaled_yoffs = (yscale * info.yoffs) >> 12;
int const scaled_yoffs = (yscale * info.yoffs) >> 12;
// we're hflipped, account for it
if (hflip)
@ -542,7 +542,7 @@ void atari_rle_objects_device::draw_rle(bitmap_ind16 &bitmap, const rectangle &c
y -= scaled_yoffs;
// draw it with appropriate flipping
u32 palettebase = m_palettebase + color;
u32 const palettebase = m_palettebase + color;
if (!hflip)
draw_rle_zoom(bitmap, clip, info, palettebase, x, y, xscale << 4, yscale << 4);
else
@ -565,8 +565,8 @@ void atari_rle_objects_device::draw_rle_zoom(bitmap_ind16 &bitmap, const rectang
if (scaled_height == 0) scaled_height = 1;
// compute the remaining parameters
int dx = (info.width << 16) / scaled_width;
int dy = (info.height << 16) / scaled_height;
int const dx = (info.width << 16) / scaled_width;
int const dy = (info.height << 16) / scaled_height;
int ex = sx + scaled_width - 1;
int ey = sy + scaled_height - 1;
int sourcey = dy / 2;
@ -615,7 +615,7 @@ void atari_rle_objects_device::draw_rle_zoom(bitmap_ind16 &bitmap, const rectang
// grab our starting parameters from this row
const u16 *base = row_start;
int entry_count = *base++;
int const entry_count = *base++;
// non-clipped case
if (!xclipped)
@ -624,7 +624,7 @@ void atari_rle_objects_device::draw_rle_zoom(bitmap_ind16 &bitmap, const rectang
for (int entry = 0; entry < entry_count; entry++)
{
// decode the low byte first
int word = *base++;
int const word = *base++;
int count = table[word & 0xff];
int value = count & 0xff;
rle_end += (count & 0xff00) << 8;
@ -672,7 +672,7 @@ void atari_rle_objects_device::draw_rle_zoom(bitmap_ind16 &bitmap, const rectang
for (int entry = 0; entry < entry_count && dest <= end; entry++)
{
// decode the low byte first
int word = *base++;
int const word = *base++;
int count = table[word & 0xff];
int value = count & 0xff;
rle_end += (count & 0xff00) << 8;
@ -744,8 +744,8 @@ void atari_rle_objects_device::draw_rle_zoom_hflip(bitmap_ind16 &bitmap, const r
if (scaled_height == 0) scaled_height = 1;
// compute the remaining parameters
int dx = (info.width << 16) / scaled_width;
int dy = (info.height << 16) / scaled_height;
int const dx = (info.width << 16) / scaled_width;
int const dy = (info.height << 16) / scaled_height;
int ex = sx + scaled_width - 1;
int ey = sy + scaled_height - 1;
int sourcey = dy / 2;
@ -794,7 +794,7 @@ void atari_rle_objects_device::draw_rle_zoom_hflip(bitmap_ind16 &bitmap, const r
// grab our starting parameters from this row
const u16 *base = row_start;
int entry_count = *base++;
int const entry_count = *base++;
// non-clipped case
if (!xclipped)
@ -803,7 +803,7 @@ void atari_rle_objects_device::draw_rle_zoom_hflip(bitmap_ind16 &bitmap, const r
for (int entry = 0; entry < entry_count; entry++)
{
// decode the low byte first
int word = *base++;
int const word = *base++;
int count = table[word & 0xff];
int value = count & 0xff;
rle_end += (count & 0xff00) << 8;
@ -851,7 +851,7 @@ void atari_rle_objects_device::draw_rle_zoom_hflip(bitmap_ind16 &bitmap, const r
for (int entry = 0; entry < entry_count && dest >= start; entry++)
{
// decode the low byte first
int word = *base++;
int const word = *base++;
int count = table[word & 0xff];
int value = count & 0xff;
rle_end += (count & 0xff00) << 8;
@ -915,15 +915,15 @@ void atari_rle_objects_device::draw_rle_zoom_hflip(bitmap_ind16 &bitmap, const r
void atari_rle_objects_device::hilite_object(bitmap_ind16 &bitmap, int hilite)
{
// extract scale and code
int scale = m_scalemask.extract(m_ram, hilite);
int code = m_codemask.extract(m_ram, hilite);
int const scale = m_scalemask.extract(m_ram, hilite);
int const code = m_codemask.extract(m_ram, hilite);
// make sure they are in range
if (scale > 0 && code < m_objectcount)
{
int hflip = m_hflipmask.extract(m_ram, hilite);
int const hflip = m_hflipmask.extract(m_ram, hilite);
int color = m_colormask.extract(m_ram, hilite);
int priority = m_prioritymask.extract(m_ram, hilite);
int const priority = m_prioritymask.extract(m_ram, hilite);
int x = m_xposmask.extract(m_ram, hilite);
int y = m_yposmask.extract(m_ram, hilite);
@ -934,11 +934,11 @@ void atari_rle_objects_device::hilite_object(bitmap_ind16 &bitmap, int hilite)
x += m_cliprect.left();
// merge priority and color
color = (color << 4) | (priority << ATARIRLE_PRIORITY_SHIFT);
color = (color << 4) | (priority << PRIORITY_SHIFT);
const object_info &info = m_info[code];
int scaled_xoffs = (scale * info.xoffs) >> 12;
int scaled_yoffs = (scale * info.yoffs) >> 12;
int const scaled_yoffs = (scale * info.yoffs) >> 12;
// we're hflipped, account for it
if (hflip)
@ -1016,9 +1016,9 @@ void atari_rle_objects_device::hilite_object(bitmap_ind16 &bitmap, int hilite)
//-------------------------------------------------
atari_rle_objects_device::sprite_parameter::sprite_parameter()
: m_word(0),
m_shift(0),
m_mask(0)
: m_word(0)
, m_shift(0)
, m_mask(0)
{
}

View File

@ -15,25 +15,6 @@
#include "memarray.h"
//**************************************************************************
// CONSTANTS
//**************************************************************************
#define ATARIRLE_PRIORITY_SHIFT 12
#define ATARIRLE_BANK_SHIFT 15
#define ATARIRLE_PRIORITY_MASK ((0xffff << ATARIRLE_PRIORITY_SHIFT) & 0xffff)
#define ATARIRLE_DATA_MASK (ATARIRLE_PRIORITY_MASK ^ 0xffff)
#define ATARIRLE_CONTROL_MOGO 1
#define ATARIRLE_CONTROL_ERASE 2
#define ATARIRLE_CONTROL_FRAME 4
#define ATARIRLE_COMMAND_NOP 0
#define ATARIRLE_COMMAND_DRAW 1
#define ATARIRLE_COMMAND_CHECKSUM 2
//**************************************************************************
// TYPES & STRUCTURES
//**************************************************************************
@ -69,6 +50,20 @@ class atari_rle_objects_device : public device_t,
public atari_rle_objects_config
{
public:
// constants
static inline constexpr int PRIORITY_SHIFT = 12;
//static inline constexpr int BANK_SHIFT = 15;
static inline constexpr uint16_t PRIORITY_MASK = ((0xffff << PRIORITY_SHIFT) & 0xffff);
static inline constexpr uint16_t DATA_MASK = (PRIORITY_MASK ^ 0xffff);
static inline constexpr int CONTROL_MOGO = 1;
static inline constexpr int CONTROL_ERASE = 2;
static inline constexpr int CONTROL_FRAME = 4;
static inline constexpr int COMMAND_NOP = 0;
static inline constexpr int COMMAND_DRAW = 1;
static inline constexpr int COMMAND_CHECKSUM = 2;
// construction/destruction
atari_rle_objects_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock, const atari_rle_objects_config &config)
: atari_rle_objects_device(mconfig, tag, owner, clock)
@ -89,10 +84,10 @@ public:
void vblank_callback(screen_device &screen, bool state);
// getters
bitmap_ind16 &vram(int idx) { return m_vram[idx][(m_control_bits & ATARIRLE_CONTROL_FRAME) >> 2]; }
bitmap_ind16 &vram(int idx) { return m_vram[idx][(m_control_bits & CONTROL_FRAME) >> 2]; }
protected:
// device-level overrides
// device_t implementation
virtual void device_start() override ATTR_COLD;
virtual void device_reset() override ATTR_COLD;
@ -138,6 +133,9 @@ private:
void draw_rle_zoom_hflip(bitmap_ind16 &bitmap, const rectangle &clip, const object_info &info, u32 palette, int sx, int sy, int scalex, int scaley);
void hilite_object(bitmap_ind16 &bitmap, int hilite);
required_region_ptr<u16> m_rombase; // pointer to the base of the GFX ROM
memory_array m_ram;
// derived state
int m_bitmapwidth = 0; // width of the full playfield bitmap
int m_bitmapheight = 0; // height of the full playfield bitmap
@ -157,19 +155,17 @@ private:
sprite_parameter m_vrammask; // mask for the VRAM target
// ROM information
required_region_ptr<u16> m_rombase; // pointer to the base of the GFX ROM
int m_objectcount = 0; // number of objects in the ROM
std::vector<object_info> m_info; // list of info records
// rendering state
bitmap_ind16 m_vram[2][2]; // pointers to VRAM bitmaps and backbuffers
int m_partial_scanline = 0; // partial update scanline
s32 m_partial_scanline = 0; // partial update scanline
// control state
u8 m_control_bits = 0; // current control bits
u8 m_command = 0; // current command
u16 m_checksums[256]; // checksums for each 0x40000 bytes
memory_array m_ram;
// tables
u8 m_rle_bpp[8];