From c83f2549bb26e9ddc508ae3538ffa5cdd968ddd7 Mon Sep 17 00:00:00 2001 From: cam900 Date: Mon, 13 May 2024 02:09:55 +0900 Subject: misc/micro3d.cpp: Cleanups: (#12335) - Use C++ style comments for single line comments - Use reference instead pointers - Add missing items into save state - Reduce unnecessary lines - Fix variable and function namings - Suppress side effects for debugger reads - Use array for noise generator - Constantize variables - Reduce preprocessor defines --- src/mame/misc/micro3d.cpp | 106 ++++++++++++++-------------- src/mame/misc/micro3d.h | 68 +++++++++--------- src/mame/misc/micro3d_a.cpp | 106 +++++++++++++++------------- src/mame/misc/micro3d_a.h | 4 +- src/mame/misc/micro3d_m.cpp | 115 +++++++++++++++---------------- src/mame/misc/micro3d_v.cpp | 164 ++++++++++++++++++++++++-------------------- 6 files changed, 292 insertions(+), 271 deletions(-) diff --git a/src/mame/misc/micro3d.cpp b/src/mame/misc/micro3d.cpp index f7542bf01b6..2238f0eaac1 100644 --- a/src/mame/misc/micro3d.cpp +++ b/src/mame/misc/micro3d.cpp @@ -208,18 +208,18 @@ void micro3d_state::hostmem(address_map &map) { map(0x000000, 0x143fff).rom(); map(0x200000, 0x20ffff).ram().share("nvram"); - map(0x800000, 0x83ffff).ram().share("shared_ram"); + map(0x800000, 0x83ffff).ram().share(m_shared_ram); map(0x900000, 0x900001).w(FUNC(micro3d_state::host_drmath_int_w)); map(0x920000, 0x920001).portr("INPUTS_C_D"); map(0x940000, 0x940001).portr("INPUTS_A_B"); - map(0x960000, 0x960001).w(FUNC(micro3d_state::micro3d_reset_w)); + map(0x960000, 0x960001).w(FUNC(micro3d_state::reset_w)); map(0x980001, 0x980001).rw("adc", FUNC(adc0844_device::read), FUNC(adc0844_device::write)); map(0x9a0000, 0x9a0007).rw(m_vgb, FUNC(tms34010_device::host_r), FUNC(tms34010_device::host_w)); - map(0x9c0000, 0x9c0001).noprw(); /* Lamps */ + map(0x9c0000, 0x9c0001).noprw(); // Lamps map(0x9e0000, 0x9e002f).rw("mfp", FUNC(mc68901_device::read), FUNC(mc68901_device::write)).umask16(0xff00); map(0xa00000, 0xa0003f).rw(m_duart, FUNC(mc68681_device::read), FUNC(mc68681_device::write)).umask16(0xff00); - map(0xa20000, 0xa20001).r(FUNC(micro3d_state::micro3d_encoder_h_r)); - map(0xa40002, 0xa40003).r(FUNC(micro3d_state::micro3d_encoder_l_r)); + map(0xa20000, 0xa20001).r(FUNC(micro3d_state::encoder_h_r)); + map(0xa40002, 0xa40003).r(FUNC(micro3d_state::encoder_l_r)); } @@ -231,12 +231,12 @@ void micro3d_state::hostmem(address_map &map) void micro3d_state::vgbmem(address_map &map) { - map(0x00000000, 0x007fffff).ram().share("sprite_vram"); + map(0x00000000, 0x007fffff).ram().share(m_sprite_vram); map(0x00800000, 0x00bfffff).ram(); map(0x00c00000, 0x00c0000f).portr("VGB_SW"); - map(0x00e00000, 0x00e0000f).w(FUNC(micro3d_state::micro3d_xfer3dk_w)); + map(0x00e00000, 0x00e0000f).w(FUNC(micro3d_state::xfer3dk_w)); map(0x02000000, 0x0200ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // clut - map(0x02600000, 0x0260000f).w(FUNC(micro3d_state::micro3d_creg_w)); + map(0x02600000, 0x0260000f).w(FUNC(micro3d_state::creg_w)); map(0x02c00000, 0x02c0003f).r(FUNC(micro3d_state::vgb_uart_r)).umask16(0x00ff); map(0x02e00000, 0x02e0003f).w(FUNC(micro3d_state::vgb_uart_w)).umask16(0x00ff); map(0x03800000, 0x03dfffff).rom().region("tms_gfx", 0); @@ -259,16 +259,16 @@ void micro3d_state::drmath_prg(address_map &map) void micro3d_state::drmath_data(address_map &map) { map(0x00000000, 0x000fffff).rom().region("drmath", 0); - map(0x00800000, 0x0083ffff).rw(FUNC(micro3d_state::micro3d_shared_r), FUNC(micro3d_state::micro3d_shared_w)); map(0x00400000, 0x004fffff).ram(); map(0x00500000, 0x005fffff).ram(); + map(0x00800000, 0x0083ffff).rw(FUNC(micro3d_state::shared_r), FUNC(micro3d_state::shared_w)); map(0x00a00000, 0x00a00003).w(FUNC(micro3d_state::drmath_int_w)); - map(0x01000000, 0x01000003).w(FUNC(micro3d_state::micro3d_mac1_w)); - map(0x01000004, 0x01000007).rw(FUNC(micro3d_state::micro3d_mac2_r), FUNC(micro3d_state::micro3d_mac2_w)); - map(0x01200000, 0x01203fff).ram().share("mac_sram"); - map(0x01400000, 0x01400003).rw(FUNC(micro3d_state::micro3d_pipe_r), FUNC(micro3d_state::micro3d_fifo_w)); + map(0x01000000, 0x01000003).w(FUNC(micro3d_state::mac1_w)); + map(0x01000004, 0x01000007).rw(FUNC(micro3d_state::mac2_r), FUNC(micro3d_state::mac2_w)); + map(0x01200000, 0x01203fff).ram().share(m_mac_sram); + map(0x01400000, 0x01400003).rw(FUNC(micro3d_state::pipe_r), FUNC(micro3d_state::fifo_w)); map(0x01600000, 0x01600003).w(FUNC(micro3d_state::drmath_intr2_ack)); - map(0x01800000, 0x01800003).w(FUNC(micro3d_state::micro3d_alt_fifo_w)); + map(0x01800000, 0x01800003).w(FUNC(micro3d_state::alt_fifo_w)); map(0x03fffff0, 0x03ffffff).rw("scc", FUNC(z80scc_device::ab_dc_r), FUNC(z80scc_device::ab_dc_w)).umask32(0x000000ff); } @@ -287,9 +287,9 @@ void micro3d_state::soundmem_io(address_map &map) { map(0x0000, 0x07ff).ram(); map(0xfd00, 0xfd01).rw("ym2151", FUNC(ym2151_device::read), FUNC(ym2151_device::write)); - map(0xfe00, 0xfe00).w(FUNC(micro3d_state::micro3d_upd7759_w)); - map(0xff00, 0xff00).w(FUNC(micro3d_state::micro3d_snd_dac_a)); - map(0xff01, 0xff01).w(FUNC(micro3d_state::micro3d_snd_dac_b)); + map(0xfe00, 0xfe00).w(FUNC(micro3d_state::upd7759_w)); + map(0xff00, 0xff00).w(FUNC(micro3d_state::snd_dac_a)); + map(0xff01, 0xff01).w(FUNC(micro3d_state::snd_dac_b)); } void micro3d_state::cpu_space_map(address_map &map) @@ -309,7 +309,7 @@ void micro3d_state::micro3d(machine_config &config) { M68000(config, m_maincpu, 32_MHz_XTAL / 2); m_maincpu->set_addrmap(AS_PROGRAM, µ3d_state::hostmem); - m_maincpu->set_vblank_int("screen", FUNC(micro3d_state::micro3d_vblank)); + m_maincpu->set_vblank_int("screen", FUNC(micro3d_state::vblank)); m_maincpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, µ3d_state::cpu_space_map); TMS34010(config, m_vgb, 40_MHz_XTAL); @@ -331,10 +331,10 @@ void micro3d_state::micro3d(machine_config &config) I8051(config, m_audiocpu, 11.0592_MHz_XTAL); m_audiocpu->set_addrmap(AS_PROGRAM, µ3d_state::soundmem_prg); m_audiocpu->set_addrmap(AS_IO, µ3d_state::soundmem_io); - m_audiocpu->port_in_cb<1>().set(FUNC(micro3d_state::micro3d_sound_p1_r)); - m_audiocpu->port_out_cb<1>().set(FUNC(micro3d_state::micro3d_sound_p1_w)); - m_audiocpu->port_in_cb<3>().set(FUNC(micro3d_state::micro3d_sound_p3_r)); - m_audiocpu->port_out_cb<3>().set(FUNC(micro3d_state::micro3d_sound_p3_w)); + m_audiocpu->port_in_cb<1>().set(FUNC(micro3d_state::sound_p1_r)); + m_audiocpu->port_out_cb<1>().set(FUNC(micro3d_state::sound_p1_w)); + m_audiocpu->port_in_cb<3>().set(FUNC(micro3d_state::sound_p3_r)); + m_audiocpu->port_out_cb<3>().set(FUNC(micro3d_state::sound_p3_w)); MC68681(config, m_duart, 3.6864_MHz_XTAL); m_duart->irq_cb().set(FUNC(micro3d_state::duart_irq_handler)); @@ -390,13 +390,13 @@ void micro3d_state::micro3d(machine_config &config) ym2151.add_route(0, "lspeaker", 0.35); ym2151.add_route(1, "rspeaker", 0.35); - MICRO3D_SOUND(config, m_noise_1); - m_noise_1->add_route(0, "lspeaker", 1.0); - m_noise_1->add_route(1, "rspeaker", 1.0); + MICRO3D_SOUND(config, m_noise[0]); + m_noise[0]->add_route(0, "lspeaker", 1.0); + m_noise[0]->add_route(1, "rspeaker", 1.0); - MICRO3D_SOUND(config, m_noise_2); - m_noise_2->add_route(0, "lspeaker", 1.0); - m_noise_2->add_route(1, "rspeaker", 1.0); + MICRO3D_SOUND(config, m_noise[1]); + m_noise[1]->add_route(0, "lspeaker", 1.0); + m_noise[1]->add_route(1, "rspeaker", 1.0); } void micro3d_state::botss11(machine_config &config) @@ -413,7 +413,7 @@ void micro3d_state::botss11(machine_config &config) *************************************/ ROM_START( f15se ) - /* Host PCB (MPG DW-00011C-0011-01) */ + // Host PCB (MPG DW-00011C-0011-01) ROM_REGION( 0x180000, "maincpu", 0 ) ROM_LOAD16_BYTE( "110-00001-600.u67", 0x000001, 0x20000, CRC(da507ec7) SHA1(24fb80aa7157a97b53a6efa8f2477aacd0cd621f) ) ROM_LOAD16_BYTE( "110-00001-601.u91", 0x000000, 0x20000, CRC(f47648c6) SHA1(a5eac6fcde52ebf750cfcdcf151fcbd859146296) ) @@ -427,7 +427,7 @@ ROM_START( f15se ) ROM_LOAD16_BYTE( "110-00001-009.u95", 0x100000, 0x20000, CRC(33e3b473) SHA1(66deda79ba94f0ed722b399b3fc6062dcdd1a6c9) ) ROM_FILL( 0x140000, 0x40000, 0xff ) - /* Dr Math PCB (MPG 010-00002-001) */ + // Dr Math PCB (MPG 010-00002-001) ROM_REGION32_BE( 0x100000, "drmath", 0 ) ROM_LOAD64_BYTE( "110-00001-222.u134", 0x00000, 0x08000, CRC(1aa391a4) SHA1(8bf80c0d0d9a85cbec9d8e18f6b5fc83989c86ce) ) ROM_LOAD64_BYTE( "110-00001-225.u126", 0x00001, 0x08000, CRC(bf6eb5a1) SHA1(94320581917ce36ae50ea0ecb53af9e12999e2b1) ) @@ -444,7 +444,7 @@ ROM_START( f15se ) ROM_LOAD16_BYTE( "110-00001-016.u167", 0x40001, 0x20000, CRC(5db4f677) SHA1(25a6fe4c562e4fa4225aa4687dd41920b614e591) ) ROM_LOAD16_BYTE( "110-00001-017.u160", 0x40000, 0x20000, CRC(47f9a868) SHA1(7c8a9355893e4a3f3846fd05e0237ffd1404ffee) ) - /* Video Graphics PCB (MPG DW-010-00003-001) */ + // Video Graphics PCB (MPG DW-010-00003-001) ROM_REGION16_LE( 0x40000, "tms34010", 0 ) ROM_LOAD16_BYTE( "110-00002-101.u101", 0x00000, 0x20000, CRC(e99fac71) SHA1(98d1d2134fabc1bad637cbe42cbe9cdc20b32126) ) ROM_LOAD16_BYTE( "110-00002-104.u97", 0x00001, 0x20000, CRC(78b9b7c7) SHA1(4bce993dd3aea126e3a9d42ee8c68b8ab47fdba7) ) @@ -457,7 +457,7 @@ ROM_START( f15se ) ROM_LOAD16_BYTE( "110-00002-103.u114", 0x80000, 0x20000, CRC(4d8e8f54) SHA1(d8a23b5fd00ab919dc6d63fc72824d1293073813) ) ROM_LOAD16_BYTE( "110-00002-102.u108", 0x80001, 0x20000, CRC(f6488e31) SHA1(d2f9304cc59f5523007592ae76ddd56107cc29e8) ) - /* Sound PCB (MPG 010-00018-002) */ + // Sound PCB (MPG 010-00018-002) ROM_REGION( 0x08000, "audiocpu", 0 ) ROM_LOAD( "110-00004-001.u2", 0x000000, 0x08000, CRC(705685a9) SHA1(311f7cac126a19e8bd555ebf31ff4ec4680ddfa4) ) @@ -466,7 +466,7 @@ ROM_START( f15se ) ROM_END ROM_START( f15se22 ) - /* Host PCB (MPG DW-00011C-0011-01) */ + // Host PCB (MPG DW-00011C-0011-01) ROM_REGION( 0x180000, "maincpu", 0 ) ROM_LOAD16_BYTE( "host.u67", 0x000001, 0x20000, CRC(8f495ceb) SHA1(90998ad67e76928ed1a6cae56038b98d1aa2e7b0) ) ROM_LOAD16_BYTE( "host.u91", 0x000000, 0x20000, CRC(dfae5ec3) SHA1(29306eed5047e39a0a2350e61ab7126a84cb710b) ) @@ -480,7 +480,7 @@ ROM_START( f15se22 ) ROM_LOAD16_BYTE( "110-00001-009.u95", 0x100000, 0x20000, CRC(33e3b473) SHA1(66deda79ba94f0ed722b399b3fc6062dcdd1a6c9) ) ROM_FILL( 0x140000, 0x40000, 0xff ) - /* Dr Math PCB (MPG 010-00002-001) */ + // Dr Math PCB (MPG 010-00002-001) ROM_REGION32_BE( 0x100000, "drmath", 0 ) ROM_LOAD64_BYTE( "122.dth", 0x00000, 0x08000, CRC(9d2032cf) SHA1(8430816756ea92bbe86b94eaa24a6071bf0ef879) ) ROM_LOAD64_BYTE( "125.dth", 0x00001, 0x08000, CRC(7718487c) SHA1(609106f55601f84095b64ce2484107779da89149) ) @@ -497,7 +497,7 @@ ROM_START( f15se22 ) ROM_LOAD16_BYTE( "110-00001-016.u167", 0x40001, 0x20000, CRC(5db4f677) SHA1(25a6fe4c562e4fa4225aa4687dd41920b614e591) ) ROM_LOAD16_BYTE( "110-00001-017.u160", 0x40000, 0x20000, CRC(47f9a868) SHA1(7c8a9355893e4a3f3846fd05e0237ffd1404ffee) ) - /* Video Graphics PCB (MPG DW-010-00003-001) */ + // Video Graphics PCB (MPG DW-010-00003-001) ROM_REGION16_LE( 0x40000, "tms34010", 0 ) ROM_LOAD16_BYTE( "110-00002-101.u101", 0x00000, 0x20000, CRC(e99fac71) SHA1(98d1d2134fabc1bad637cbe42cbe9cdc20b32126) ) ROM_LOAD16_BYTE( "110-00002-104.u97", 0x00001, 0x20000, CRC(78b9b7c7) SHA1(4bce993dd3aea126e3a9d42ee8c68b8ab47fdba7) ) @@ -510,7 +510,7 @@ ROM_START( f15se22 ) ROM_LOAD16_BYTE( "110-00002-103.u114", 0x80000, 0x20000, CRC(4d8e8f54) SHA1(d8a23b5fd00ab919dc6d63fc72824d1293073813) ) ROM_LOAD16_BYTE( "110-00002-102.u108", 0x80001, 0x20000, CRC(f6488e31) SHA1(d2f9304cc59f5523007592ae76ddd56107cc29e8) ) - /* Sound PCB (MPG 010-00018-002) */ + // Sound PCB (MPG 010-00018-002) ROM_REGION( 0x08000, "audiocpu", 0 ) ROM_LOAD( "110-00004-001.u2", 0x000000, 0x08000, CRC(705685a9) SHA1(311f7cac126a19e8bd555ebf31ff4ec4680ddfa4) ) @@ -519,7 +519,7 @@ ROM_START( f15se22 ) ROM_END ROM_START( f15se21 ) - /* Host PCB (MPG DW-00011C-0011-01) */ + // Host PCB (MPG DW-00011C-0011-01) ROM_REGION( 0x180000, "maincpu", 0 ) ROM_LOAD16_BYTE( "110-00001-500.u67", 0x000001, 0x20000, CRC(6c26806d) SHA1(7cfd2b3b92b0fc6627c92a2013a317ca5abc66a0) ) ROM_LOAD16_BYTE( "110-00001-501.u91", 0x000000, 0x20000, CRC(81f02bf7) SHA1(09976746fe4d9c88bd8840f6e7addb09226aa54b) ) @@ -533,7 +533,7 @@ ROM_START( f15se21 ) ROM_LOAD16_BYTE( "110-00001-009.u95", 0x100000, 0x20000, CRC(33e3b473) SHA1(66deda79ba94f0ed722b399b3fc6062dcdd1a6c9) ) ROM_FILL( 0x140000, 0x40000, 0xff ) - /* Video Graphics PCB (MPG DW-010-00003-001) */ + // Video Graphics PCB (MPG DW-010-00003-001) ROM_REGION16_LE( 0x40000, "tms34010", 0 ) ROM_LOAD16_BYTE( "001.vgb", 0x000000, 0x20000, CRC(810c142d) SHA1(d37e5ecd716dda65d43cec7bca524c59d3dc9803) ) ROM_LOAD16_BYTE( "004.vgb", 0x000001, 0x20000, CRC(b69e1260) SHA1(1a2b69ea7c96b0293b24d87ea46bd4b1d4c56a66) ) @@ -546,7 +546,7 @@ ROM_START( f15se21 ) ROM_LOAD16_BYTE( "110-00002-103.u114", 0x80000, 0x20000, CRC(4d8e8f54) SHA1(d8a23b5fd00ab919dc6d63fc72824d1293073813) ) ROM_LOAD16_BYTE( "110-00002-102.u108", 0x80001, 0x20000, CRC(f6488e31) SHA1(d2f9304cc59f5523007592ae76ddd56107cc29e8) ) - /* Dr Math PCB (MPG 010-00002-001) */ + // Dr Math PCB (MPG 010-00002-001) ROM_REGION32_BE( 0x100000, "drmath", 0 ) ROM_LOAD64_BYTE( "122.dth", 0x00000, 0x08000, CRC(9d2032cf) SHA1(8430816756ea92bbe86b94eaa24a6071bf0ef879) ) ROM_LOAD64_BYTE( "125.dth", 0x00001, 0x08000, CRC(7718487c) SHA1(609106f55601f84095b64ce2484107779da89149) ) @@ -563,7 +563,7 @@ ROM_START( f15se21 ) ROM_LOAD16_BYTE( "110-00001-016.u167", 0x40001, 0x20000, CRC(5db4f677) SHA1(25a6fe4c562e4fa4225aa4687dd41920b614e591) ) ROM_LOAD16_BYTE( "110-00001-017.u160", 0x40000, 0x20000, CRC(47f9a868) SHA1(7c8a9355893e4a3f3846fd05e0237ffd1404ffee) ) - /* Sound PCB (MPG 010-00018-002) */ + // Sound PCB (MPG 010-00018-002) ROM_REGION( 0x08000, "audiocpu", 0 ) ROM_LOAD( "110-00004-001.u2", 0x000000, 0x08000, CRC(705685a9) SHA1(311f7cac126a19e8bd555ebf31ff4ec4680ddfa4) ) @@ -572,7 +572,7 @@ ROM_START( f15se21 ) ROM_END ROM_START( botss ) - /* Host PCB (MPG DW-00011C-0011-01) */ + // Host PCB (MPG DW-00011C-0011-01) ROM_REGION( 0x180000, "maincpu", 0 ) ROM_LOAD16_BYTE( "110-00153-100.u67", 0x000001, 0x20000, CRC(338aa9c3) SHA1(3d10329a5df80ab1761fd3953eb3872a72f26bef) ) ROM_LOAD16_BYTE( "110-00153-101.u91", 0x000000, 0x20000, CRC(3278279e) SHA1(570935988c776283cdcd5aa13d71a75f0a466099) ) @@ -586,7 +586,7 @@ ROM_START( botss ) ROM_LOAD16_BYTE( "110-00013-009.u95", 0x100000, 0x20000, CRC(6c595d1e) SHA1(89fdc30166ba1e9706798547195bdf6875a02e96) ) ROM_FILL( 0x140000, 0x40000, 0xff ) - /* Dr Math PCB (MPG 010-00002-001) */ + // Dr Math PCB (MPG 010-00002-001) ROM_REGION32_BE( 0x100000, "drmath", 0 ) ROM_LOAD64_BYTE( "110-00013-122.u134", 0x000000, 0x08000, CRC(bf60c487) SHA1(5ce80e89d9a24b627b0e97bf36a4e71c2eff4324) ) ROM_LOAD64_BYTE( "110-00013-125.u126", 0x000001, 0x08000, CRC(b0dccf4a) SHA1(e8bfd622c006985b724cdbd3ad14c33e9ed27c6c) ) @@ -607,7 +607,7 @@ ROM_START( botss ) ROM_LOAD16_BYTE( "110-00023-201.u101", 0x000000, 0x20000, CRC(7dc05f7d) SHA1(4d202b229cf4690d92491311e9ff14034b19c35c) ) ROM_LOAD16_BYTE( "110-00023-204.u97", 0x000001, 0x20000, CRC(925fd08a) SHA1(fb06413debbffcd63b018f374f25b0d8e419c739) ) - /* Video Graphics PCB (MPG DW-010-00002-002) */ + // Video Graphics PCB (MPG DW-010-00002-002) ROM_REGION16_LE( 0xc0000, "tms_gfx", 0 ) ROM_LOAD16_BYTE( "110-00023-205.u124", 0x000000, 0x20000, CRC(5482e0c4) SHA1(492afac1862f2899cd734d1e57ca978ed6a906d5) ) ROM_LOAD16_BYTE( "110-00023-206.u121", 0x000001, 0x20000, CRC(a55e5d19) SHA1(86fbcb425103ae9fff381357339af349848fc3f2) ) @@ -616,7 +616,7 @@ ROM_START( botss ) ROM_LOAD16_BYTE( "110-00023-203.u114", 0x080000, 0x20000, CRC(b1dacbb1) SHA1(323531b6919eed4a963d6aad871f1fd34203e698) ) ROM_LOAD16_BYTE( "110-00023-202.u108", 0x080001, 0x20000, CRC(ac0d3179) SHA1(f4c67d59d913ead0f8a6d42e2ca66857ebf01602) ) - /* Sound PCB (MPG 010-00018-002) */ + // Sound PCB (MPG 010-00018-002) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "110-00014-001.u2", 0x000000, 0x08000, CRC(307fcb6d) SHA1(0cf63a39ac8920be6532974311804529d7218545) ) @@ -624,16 +624,16 @@ ROM_START( botss ) ROM_LOAD( "110-00013-001.u17", 0x000000, 0x40000, CRC(015a0b17) SHA1(f229c9aa59f0e6b25b818f9513997a8685e33982) ) ROM_REGION( 0x10000, "plds", 0 ) - /* Host */ - ROM_LOAD( "120-00001-306.u77", 0x000000, 0x00310, CRC(60282a45) SHA1(8621b64fa00fa556c09d7d1566480cd442a8e655) ) /* AmPAL23S8-20 */ + // Host + ROM_LOAD( "120-00001-306.u77", 0x000000, 0x00310, CRC(60282a45) SHA1(8621b64fa00fa556c09d7d1566480cd442a8e655) ) // AmPAL23S8-20 - /* Dr. Math */ - ROM_LOAD( "mac1_u173_a.bin", 0x000000, 0x014c7, CRC(78040232) SHA1(c9adc1db76b4ee5ee08f4a11caae77993b23cc30) ) /* EPS448 */ - ROM_LOAD( "mac2_u166_a.bin", 0x000000, 0x014c7, CRC(c85c4c66) SHA1(fab07ad0611de7d2c2af9b6fa262d574e238bd9f) ) /* EPS448 */ + // Dr. Math + ROM_LOAD( "mac1_u173_a.bin", 0x000000, 0x014c7, CRC(78040232) SHA1(c9adc1db76b4ee5ee08f4a11caae77993b23cc30) ) // EPS448 + ROM_LOAD( "mac2_u166_a.bin", 0x000000, 0x014c7, CRC(c85c4c66) SHA1(fab07ad0611de7d2c2af9b6fa262d574e238bd9f) ) // EPS448 ROM_END ROM_START( botss11 ) - /* Host PCB (MPG DW-00011C-0011-02) */ + // Host PCB (MPG DW-00011C-0011-02) ROM_REGION( 0x180000, "maincpu", 0 ) ROM_LOAD16_BYTE( "110-00013-300.u67", 0x000001, 0x20000, CRC(7f74362a) SHA1(41611ba8e6eb5d6b3dfe88e1cede7d9fb5472e40) ) ROM_LOAD16_BYTE( "110-00013-301.u91", 0x000000, 0x20000, CRC(a8100d1e) SHA1(69d3cac6f67563c0796560f7b874d7660720027d) ) @@ -647,7 +647,7 @@ ROM_START( botss11 ) ROM_LOAD16_BYTE( "110-00013-109.u95", 0x100000, 0x20000, CRC(6c595d1e) SHA1(89fdc30166ba1e9706798547195bdf6875a02e96) ) ROM_FILL( 0x140000, 0x40000, 0xff ) - /* Dr Math PCB (MPG 010-00002-001) */ + // Dr Math PCB (MPG 010-00002-001) ROM_REGION32_BE( 0x100000, "drmath", 0 ) ROM_LOAD64_BYTE( "110-00013-122.u134", 0x000000, 0x08000, CRC(bf60c487) SHA1(5ce80e89d9a24b627b0e97bf36a4e71c2eff4324) ) ROM_LOAD64_BYTE( "110-00013-125.u126", 0x000001, 0x08000, CRC(b0dccf4a) SHA1(e8bfd622c006985b724cdbd3ad14c33e9ed27c6c) ) @@ -668,7 +668,7 @@ ROM_START( botss11 ) ROM_LOAD16_BYTE( "110-00023-101.u101", 0x000000, 0x20000, CRC(6aada23d) SHA1(85dbf9b20e4f17cb21922637763654d6cae80dfd) ) ROM_LOAD16_BYTE( "110-00023-104.u97", 0x000001, 0x20000, CRC(715cac9d) SHA1(2aa0c563dc1fe4d02fa1ecbaed16f720f899fdc4) ) - /* Video Graphics PCB (MPG DW-010-00002-002) */ + // Video Graphics PCB (MPG DW-010-00002-002) ROM_REGION16_LE( 0xc0000, "tms_gfx", 0 ) ROM_LOAD16_BYTE( "110-00023-105.u124", 0x000000, 0x20000, CRC(5482e0c4) SHA1(492afac1862f2899cd734d1e57ca978ed6a906d5) ) ROM_LOAD16_BYTE( "110-00023-106.u121", 0x000001, 0x20000, CRC(a55e5d19) SHA1(86fbcb425103ae9fff381357339af349848fc3f2) ) @@ -677,7 +677,7 @@ ROM_START( botss11 ) ROM_LOAD16_BYTE( "110-00023-103.u114", 0x080000, 0x20000, CRC(4e486e70) SHA1(04ee16cfadd43dbe9ed5bd8330c21a718d63a8f4) ) ROM_LOAD16_BYTE( "110-00023-102.u108", 0x080001, 0x20000, CRC(441e8490) SHA1(6cfe30cea3fa297b71e881fbddad6d65a96e4386) ) - /* Sound PCB (MPG 010-00018-002) */ + // Sound PCB (MPG 010-00018-002) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "110-00014-001.u2", 0x000000, 0x08000, CRC(307fcb6d) SHA1(0cf63a39ac8920be6532974311804529d7218545) ) diff --git a/src/mame/misc/micro3d.h b/src/mame/misc/micro3d.h index c5d9ae696f3..79a8e7a916a 100644 --- a/src/mame/misc/micro3d.h +++ b/src/mame/misc/micro3d.h @@ -40,8 +40,7 @@ public: m_vgb_uart(*this, "uart"), m_palette(*this, "palette"), m_duart(*this, "duart"), - m_noise_1(*this, "noise_1"), - m_noise_2(*this, "noise_2"), + m_noise(*this, "noise_%u", 1U), m_adc(*this, "adc"), m_vertex(*this, "vertex"), m_sound_sw(*this, "SOUND_SW"), @@ -93,8 +92,7 @@ private: required_device m_vgb_uart; required_device m_palette; required_device m_duart; - required_device m_noise_1; - required_device m_noise_2; + required_device_array m_noise; optional_device m_adc; required_memory_region m_vertex; @@ -106,13 +104,13 @@ private: required_shared_ptr m_shared_ram; uint8_t m_m68681_tx0 = 0; - /* Sound */ + // Sound uint8_t m_sound_port_latch[4]{}; - /* Hardware version-check latch for BOTSS 1.1a */ + // Hardware version-check latch for BOTSS 1.1a uint8_t m_botss_latch = 0; - /* MAC */ + // MAC required_shared_ptr m_mac_sram; emu_timer *m_mac_done_timer = nullptr; uint32_t m_sram_r_addr = 0; @@ -122,18 +120,18 @@ private: uint32_t m_mac_stat = 0; uint32_t m_mac_inst = 0; - /* 2D video */ + // 2D video required_shared_ptr m_sprite_vram; uint16_t m_creg = 0; uint16_t m_xfer3dk = 0; - /* 3D pipeline */ + // 3D pipeline uint32_t m_pipe_data = 0; uint32_t m_pipeline_state = 0; int32_t m_vtx_fifo[512]{}; uint32_t m_fifo_idx = 0; uint32_t m_draw_cmd = 0; - int m_draw_state = 0; + uint32_t m_draw_state = 0; int32_t m_x_min = 0; int32_t m_x_max = 0; int32_t m_y_min = 0; @@ -142,43 +140,43 @@ private: int32_t m_z_max = 0; int32_t m_x_mid = 0; int32_t m_y_mid = 0; - int m_dpram_bank = 0; + uint32_t m_dpram_bank = 0; uint32_t m_draw_dpram[1024]{}; std::unique_ptr m_frame_buffers[2]; std::unique_ptr m_tmp_buffer; - int m_drawing_buffer = 0; - int m_display_buffer = 0; + uint8_t m_drawing_buffer = 0; + uint8_t m_display_buffer = 0; void vgb_uart_w(offs_t offset, uint8_t data); uint8_t vgb_uart_r(offs_t offset); - void micro3d_mac1_w(uint32_t data); - uint32_t micro3d_mac2_r(); - void micro3d_mac2_w(uint32_t data); - uint16_t micro3d_encoder_h_r(); - uint16_t micro3d_encoder_l_r(); + void mac1_w(uint32_t data); + uint32_t mac2_r(); + void mac2_w(uint32_t data); + uint16_t encoder_h_r(); + uint16_t encoder_l_r(); uint8_t adc_volume_r(); uint16_t botss_140000_r(); uint16_t botss_180000_r(); - void micro3d_reset_w(uint16_t data); + void reset_w(uint16_t data); void host_drmath_int_w(uint16_t data); - void micro3d_shared_w(offs_t offset, uint32_t data); - uint32_t micro3d_shared_r(offs_t offset); + void shared_w(offs_t offset, uint32_t data); + uint32_t shared_r(offs_t offset); void drmath_int_w(uint32_t data); void drmath_intr2_ack(uint32_t data); - void micro3d_creg_w(uint16_t data); - void micro3d_xfer3dk_w(uint16_t data); - void micro3d_fifo_w(uint32_t data); - void micro3d_alt_fifo_w(uint32_t data); - uint32_t micro3d_pipe_r(); - void micro3d_snd_dac_a(uint8_t data); - void micro3d_snd_dac_b(uint8_t data); - void micro3d_sound_p1_w(uint8_t data); - void micro3d_sound_p3_w(uint8_t data); - uint8_t micro3d_sound_p1_r(); - uint8_t micro3d_sound_p3_r(); - INTERRUPT_GEN_MEMBER(micro3d_vblank); + void creg_w(uint16_t data); + void xfer3dk_w(uint16_t data); + void fifo_w(uint32_t data); + void alt_fifo_w(uint32_t data); + uint32_t pipe_r(); + void snd_dac_a(uint8_t data); + void snd_dac_b(uint8_t data); + void sound_p1_w(uint8_t data); + void sound_p3_w(uint8_t data); + uint8_t sound_p1_r(); + uint8_t sound_p3_r(); + INTERRUPT_GEN_MEMBER(vblank); TIMER_CALLBACK_MEMBER(mac_done_callback); - void micro3d_upd7759_w(uint8_t data); + void upd7759_w(uint8_t data); void duart_irq_handler(int state); uint8_t duart_input_r(); void duart_output_w(uint8_t data); @@ -186,7 +184,7 @@ private: void tms_interrupt(int state); TMS340X0_SCANLINE_IND16_CB_MEMBER(scanline_update); - /* 3D graphics */ + // 3D graphics int inside(micro3d_vtx *v, enum planes plane); micro3d_vtx intersect(micro3d_vtx *v1, micro3d_vtx *v2, enum planes plane); inline void write_span(uint32_t y, uint32_t x); diff --git a/src/mame/misc/micro3d_a.cpp b/src/mame/misc/micro3d_a.cpp index b0dc9eb4900..91674ada07f 100644 --- a/src/mame/misc/micro3d_a.cpp +++ b/src/mame/misc/micro3d_a.cpp @@ -12,7 +12,7 @@ #include "micro3d_a.h" -#define MM5837_CLOCK 100000 +static constexpr u32 MM5837_CLOCK = 100000; /************************************* @@ -21,7 +21,7 @@ * *************************************/ -/* Borrowed from segasnd.c */ +// Borrowed from segasnd.c inline void micro3d_sound_device::m3d_filter_state::configure(double r, double c) { capval = 0; @@ -52,7 +52,7 @@ inline double micro3d_sound_device::m3d_filter_state::step_cr_filter(double inpu void micro3d_sound_device::lp_filter::init(double fsval) { - /* Section 1 */ + // Section 1 proto_coef[0].a0 = 1.0; proto_coef[0].a1 = 0; proto_coef[0].a2 = 0; @@ -60,7 +60,7 @@ void micro3d_sound_device::lp_filter::init(double fsval) proto_coef[0].b1 = 0.765367; proto_coef[0].b2 = 1.0; - /* Section 2 */ + // Section 2 proto_coef[1].a0 = 1.0; proto_coef[1].a1 = 0; proto_coef[1].a2 = 0; @@ -73,27 +73,23 @@ void micro3d_sound_device::lp_filter::init(double fsval) std::fill(std::begin(history), std::end(history), 0); } -static void prewarp(double *a0, double *a1, double *a2,double fc, double fs) +static void prewarp(double &a0, double &a1, double &a2, double fc, double fs) { - double wp, pi; + double pi = 4.0 * atan(1.0); + double wp = 2.0 * fs * tan(pi * fc / fs); - pi = 4.0 * atan(1.0); - wp = 2.0 * fs * tan(pi * fc / fs); - - *a2 = *a2 / (wp * wp); - *a1 = *a1 / wp; + a2 = a2 / (wp * wp); + a1 = a1 / wp; } static void bilinear(double a0, double a1, double a2, double b0, double b1, double b2, - double *k, double fs, float *coef) + double &k, double fs, float *coef) { - double ad, bd; - - ad = 4. * a2 * fs * fs + 2. * a1 * fs + a0; - bd = 4. * b2 * fs * fs + 2. * b1* fs + b0; + double ad = 4. * a2 * fs * fs + 2. * a1 * fs + a0; + double bd = 4. * b2 * fs * fs + 2. * b1* fs + b0; - *k *= ad/bd; + k *= ad / bd; *coef++ = (2. * b0 - 8. * b2 * fs * fs) / bd; *coef++ = (4. * b2 * fs * fs - 2. * b1 * fs + b0) / bd; @@ -116,9 +112,9 @@ void micro3d_sound_device::lp_filter::recompute(double k, double q, double fc) double b1 = proto_coef[nInd].b1 / q; double b2 = proto_coef[nInd].b2; - prewarp(&a0, &a1, &a2, fc, fs); - prewarp(&b0, &b1, &b2, fc, fs); - bilinear(a0, a1, a2, b0, b1, b2, &k, fs, c); + prewarp(a0, a1, a2, fc, fs); + prewarp(b0, b1, b2, fc, fs); + bilinear(a0, a1, a2, b0, b1, b2, k, fs, c); c += 4; } @@ -128,13 +124,10 @@ void micro3d_sound_device::lp_filter::recompute(double k, double q, double fc) void micro3d_sound_device::noise_sh_w(u8 data) { - if (~data & 8) + if (BIT(~data, 3)) { if (m_dac_data != m_dac[data & 3]) { - double q; - double fc; - m_stream->update(); m_dac[data & 3] = m_dac_data; @@ -144,8 +137,8 @@ void micro3d_sound_device::noise_sh_w(u8 data) else m_gain = expf(-(float)(m_dac[VCA]) / 25.0f) * 10.0f; - q = 0.75/255 * (255 - m_dac[VCQ]) + 0.1; - fc = 4500.0/255 * (255 - m_dac[VCF]) + 100; + double q = 0.75/255 * (255 - m_dac[VCQ]) + 0.1; + double fc = 4500.0/255 * (255 - m_dac[VCF]) + 100; m_filter.recompute(m_gain, q, fc); } @@ -182,7 +175,7 @@ micro3d_sound_device::micro3d_sound_device(const machine_config &mconfig, const void micro3d_sound_device::device_start() { - /* Allocate the stream */ + // Allocate the stream m_stream = stream_alloc(0, 2, machine().sample_rate()); m_filter.init(machine().sample_rate()); @@ -191,6 +184,28 @@ void micro3d_sound_device::device_start() m_noise_filters[2].configure(2.7e3 + 270, 0.15e-6); m_noise_filters[3].configure(2.7e3 + 0, 0.082e-6); // m_noise_filters[4].configure(33e3, 0.1e-6); + + save_item(NAME(m_dac_data)); + save_item(NAME(m_dac)); + save_item(NAME(m_gain)); + save_item(NAME(m_noise_shift)); + save_item(NAME(m_noise_value)); + save_item(NAME(m_noise_subcount)); + + save_item(NAME(m_filter.history)); + save_item(NAME(m_filter.coef)); + save_item(NAME(m_filter.fs)); + for (int i = 0; i < 2; i++) + { + save_item(NAME(m_filter.proto_coef[i].a0), i); + save_item(NAME(m_filter.proto_coef[i].a1), i); + save_item(NAME(m_filter.proto_coef[i].a2), i); + save_item(NAME(m_filter.proto_coef[i].b0), i); + save_item(NAME(m_filter.proto_coef[i].b1), i); + save_item(NAME(m_filter.proto_coef[i].b2), i); + } + save_item(STRUCT_MEMBER(m_noise_filters, capval)); + save_item(STRUCT_MEMBER(m_noise_filters, exponent)); } //------------------------------------------------- @@ -213,30 +228,25 @@ void micro3d_sound_device::device_reset() void micro3d_sound_device::sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) { lp_filter *iir = &m_filter; - float pan_l, pan_r; auto &fl = outputs[0]; auto &fr = outputs[1]; - /* Clear the buffers */ + // Clear the buffers fl.fill(0); fr.fill(0); if (m_gain == 0) return; - pan_l = (float)(255 - m_dac[PAN]) / 255.0f; - pan_r = (float)(m_dac[PAN]) / 255.0f; + float pan_l = (float)(255 - m_dac[PAN]) / 255.0f; + float pan_r = (float)(m_dac[PAN]) / 255.0f; for (int sampindex = 0; sampindex < fl.samples(); sampindex++) { - unsigned int i; - float *hist1_ptr,*hist2_ptr,*coef_ptr; - float output,new_hist,history1,history2; - float input, white; int step; - /* Update the noise source */ + // Update the noise source for (step = 2000000 / (2000000/8); step >= m_noise_subcount; step -= m_noise_subcount) { m_noise_shift = (m_noise_shift << 1) | (((m_noise_shift >> 13) ^ (m_noise_shift >> 16)) & 1); @@ -244,10 +254,10 @@ void micro3d_sound_device::sound_stream_update(sound_stream &stream, std::vector m_noise_subcount = 2000000 / MM5837_CLOCK; } m_noise_subcount -= step; - input = (float)m_noise_value - 0.5f; - white = input; + float input = (float)m_noise_value - 0.5f; + float white = input; - /* Pink noise filtering */ + // Pink noise filtering m_noise_filters[0].capval = 0.99765 * m_noise_filters[0].capval + input * 0.0990460; m_noise_filters[1].capval = 0.96300 * m_noise_filters[1].capval + input * 0.2965164; m_noise_filters[2].capval = 0.57000 * m_noise_filters[2].capval + input * 1.0526913; @@ -256,21 +266,21 @@ void micro3d_sound_device::sound_stream_update(sound_stream &stream, std::vector input += white; input *= 200.0f; - coef_ptr = &iir->coef[0]; + float *coef_ptr = &iir->coef[0]; - hist1_ptr = &iir->history[0]; - hist2_ptr = hist1_ptr + 1; + float *hist1_ptr = &iir->history[0]; + float *hist2_ptr = hist1_ptr + 1; - /* 1st number of coefficients array is overall input scale factor, * or filter gain */ - output = input * (*coef_ptr++); + // 1st number of coefficients array is overall input scale factor, * or filter gain + float output = input * (*coef_ptr++); - for (i = 0 ; i < 2; i++) + for (u32 i = 0 ; i < 2; i++) { - history1 = *hist1_ptr; - history2 = *hist2_ptr; + float history1 = *hist1_ptr; + float history2 = *hist2_ptr; output = output - history1 * (*coef_ptr++); - new_hist = output - history2 * (*coef_ptr++); + float new_hist = output - history2 * (*coef_ptr++); output = new_hist + history1 * (*coef_ptr++); output = output + history2 * (*coef_ptr++); diff --git a/src/mame/misc/micro3d_a.h b/src/mame/misc/micro3d_a.h index 5e533e9e123..fd3908afd46 100644 --- a/src/mame/misc/micro3d_a.h +++ b/src/mame/misc/micro3d_a.h @@ -36,8 +36,8 @@ private: struct biquad { - double a0, a1, a2; /* Numerator coefficients */ - double b0, b1, b2; /* Denominator coefficients */ + double a0, a1, a2; // Numerator coefficients + double b0, b1, b2; // Denominator coefficients }; struct lp_filter diff --git a/src/mame/misc/micro3d_m.cpp b/src/mame/misc/micro3d_m.cpp index 2c268246dec..3d2b413a57a 100644 --- a/src/mame/misc/micro3d_m.cpp +++ b/src/mame/misc/micro3d_m.cpp @@ -22,7 +22,7 @@ * *************************************/ -#define MAC_CLK XTAL(10'000'000) +static constexpr XTAL MAC_CLK = XTAL(10'000'000); #define VTXROM_FMT(x) (((x) << 14) | ((x) & (1 << 15) ? 0xc0000000 : 0)) @@ -64,7 +64,7 @@ uint8_t micro3d_state::duart_input_r() */ void micro3d_state::duart_output_w(uint8_t data) { - m_audiocpu->set_input_line(INPUT_LINE_RESET, data & 0x20 ? CLEAR_LINE : ASSERT_LINE); + m_audiocpu->set_input_line(INPUT_LINE_RESET, BIT(data, 5) ? CLEAR_LINE : ASSERT_LINE); } @@ -109,9 +109,7 @@ inline constexpr int64_t micro3d_state::micro3d_vtx::dot_product(micro3d_vtx con static inline int64_t normalised_multiply(int32_t a, int32_t b) { - int64_t result; - - result = (int64_t)a * (int64_t)b; + int64_t const result = (int64_t)a * (int64_t)b; return result >> 14; } @@ -121,41 +119,35 @@ TIMER_CALLBACK_MEMBER(micro3d_state::mac_done_callback) m_mac_stat = 0; } -void micro3d_state::micro3d_mac1_w(uint32_t data) +void micro3d_state::mac1_w(uint32_t data) { m_vtx_addr = (data & 0x3ffff); m_sram_w_addr = (data >> 18) & 0xfff; } -uint32_t micro3d_state::micro3d_mac2_r() +uint32_t micro3d_state::mac2_r() { return (m_mac_inst << 1) | m_mac_stat; } -void micro3d_state::micro3d_mac2_w(uint32_t data) +void micro3d_state::mac2_w(uint32_t data) { uint32_t cnt = data & 0xff; - uint32_t inst = (data >> 8) & 0x1f; + uint32_t const inst = (data >> 8) & 0x1f; uint32_t mac_cycles = 1; - uint32_t mrab11; - uint32_t vtx_addr; - uint32_t sram_r_addr; - uint32_t sram_w_addr; - uint32_t *mac_sram; - m_mac_stat = BIT(data, 13); m_mac_inst = inst & 0x7; m_mrab11 = (data >> 18) & (1 << 11); m_sram_r_addr = (data >> 18) & 0xfff; - mrab11 = m_mrab11; - vtx_addr = m_vtx_addr; - sram_r_addr = m_sram_r_addr; - sram_w_addr = m_sram_w_addr; - mac_sram = m_mac_sram; + uint32_t const mrab11 = m_mrab11; + uint32_t vtx_addr = m_vtx_addr; + uint32_t sram_r_addr = m_sram_r_addr; + uint32_t sram_w_addr = m_sram_w_addr; + uint32_t *mac_sram = m_mac_sram; - if (data & (1 << 14)) + if (BIT(data, 14)) m_drmath->set_input_line(AM29000_INTR0, CLEAR_LINE); switch (inst) @@ -168,10 +160,9 @@ void micro3d_state::micro3d_mac2_w(uint32_t data) case 0x09: cnt += 0x100; [[fallthrough]]; case 0x08: { - int i; const uint16_t *rom = (uint16_t*)m_vertex->base(); - for (i = 0; i <= cnt; ++i) + for (int i = 0; i <= cnt; ++i) { int64_t acc; micro3d_vtx v1; @@ -207,10 +198,9 @@ void micro3d_state::micro3d_mac2_w(uint32_t data) case 0x0d: cnt += 0x100; [[fallthrough]]; case 0x0c: { - int i; const uint16_t *rom = (uint16_t*)m_vertex->base(); - for (i = 0; i <= cnt; ++i) + for (int i = 0; i <= cnt; ++i) { int64_t acc; micro3d_vtx v1; @@ -240,10 +230,9 @@ void micro3d_state::micro3d_mac2_w(uint32_t data) } case 0x0f: { - int i; const uint16_t *rom = (uint16_t*)m_vertex->base(); - for (i = 0; i <= cnt; ++i, vtx_addr += 4) + for (int i = 0; i <= cnt; ++i, vtx_addr += 4) { mac_sram[sram_w_addr++] = VTXROM_FMT(rom[vtx_addr + 0]); mac_sram[sram_w_addr++] = VTXROM_FMT(rom[vtx_addr + 1]); @@ -254,7 +243,7 @@ void micro3d_state::micro3d_mac2_w(uint32_t data) mac_cycles = 8 * cnt; break; } - /* Dot product of SRAM vectors with single SRAM vector */ + // Dot product of SRAM vectors with single SRAM vector case 0x11: cnt += 0x100; [[fallthrough]]; case 0x10: { @@ -279,7 +268,7 @@ void micro3d_state::micro3d_mac2_w(uint32_t data) mac_cycles = 10 * cnt; break; } - /* Dot product of SRAM vectors with SRAM vectors */ + // Dot product of SRAM vectors with SRAM vectors case 0x16: cnt += 0x100; [[fallthrough]]; case 0x15: cnt += 0x100; [[fallthrough]]; case 0x14: @@ -310,7 +299,7 @@ void micro3d_state::micro3d_mac2_w(uint32_t data) break; } - /* TODO: Calculate a better estimate for timing */ + // TODO: Calculate a better estimate for timing if (m_mac_stat) m_mac_done_timer->adjust(attotime::from_hz(MAC_CLK) * mac_cycles); @@ -327,18 +316,18 @@ void micro3d_state::micro3d_mac2_w(uint32_t data) * *************************************/ -uint16_t micro3d_state::micro3d_encoder_h_r() +uint16_t micro3d_state::encoder_h_r() { - uint16_t x_encoder = m_joystick_x.read_safe(0); - uint16_t y_encoder = m_joystick_y.read_safe(0); + uint16_t const x_encoder = m_joystick_x.read_safe(0); + uint16_t const y_encoder = m_joystick_y.read_safe(0); return (y_encoder & 0xf00) | ((x_encoder & 0xf00) >> 8); } -uint16_t micro3d_state::micro3d_encoder_l_r() +uint16_t micro3d_state::encoder_l_r() { - uint16_t x_encoder = m_joystick_x.read_safe(0); - uint16_t y_encoder = m_joystick_y.read_safe(0); + uint16_t const x_encoder = m_joystick_x.read_safe(0); + uint16_t const y_encoder = m_joystick_y.read_safe(0); return ((y_encoder & 0xff) << 8) | (x_encoder & 0xff); } @@ -355,13 +344,15 @@ int micro3d_state::botss_hwchk_r() uint16_t micro3d_state::botss_140000_r() { - m_botss_latch = 0; + if (!machine().side_effects_disabled()) + m_botss_latch = 0; return 0xffff; } uint16_t micro3d_state::botss_180000_r() { - m_botss_latch = 1; + if (!machine().side_effects_disabled()) + m_botss_latch = 1; return 0xffff; } @@ -371,12 +362,11 @@ uint16_t micro3d_state::botss_180000_r() * *************************************/ -void micro3d_state::micro3d_reset_w(uint16_t data) +void micro3d_state::reset_w(uint16_t data) { - data >>= 8; - m_drmath->set_input_line(INPUT_LINE_RESET, data & 1 ? CLEAR_LINE : ASSERT_LINE); - m_vgb->set_input_line(INPUT_LINE_RESET, data & 2 ? CLEAR_LINE : ASSERT_LINE); - /* TODO: Joystick reset? */ + m_drmath->set_input_line(INPUT_LINE_RESET, BIT(data, 8) ? CLEAR_LINE : ASSERT_LINE); + m_vgb->set_input_line(INPUT_LINE_RESET, BIT(data, 9) ? CLEAR_LINE : ASSERT_LINE); + // TODO: Joystick reset? } void micro3d_state::host_drmath_int_w(uint16_t data) @@ -392,13 +382,13 @@ void micro3d_state::host_drmath_int_w(uint16_t data) * *************************************/ -void micro3d_state::micro3d_shared_w(offs_t offset, uint32_t data) +void micro3d_state::shared_w(offs_t offset, uint32_t data) { m_shared_ram[offset * 2 + 1] = data & 0xffff; m_shared_ram[offset * 2 + 0] = data >> 16; } -uint32_t micro3d_state::micro3d_shared_r(offs_t offset) +uint32_t micro3d_state::shared_r(offs_t offset) { return (m_shared_ram[offset * 2] << 16) | m_shared_ram[offset * 2 + 1]; } @@ -432,26 +422,25 @@ void micro3d_state::drmath_intr2_ack(uint32_t data) ***************************************************************************/ -void micro3d_state::micro3d_snd_dac_a(uint8_t data) +void micro3d_state::snd_dac_a(uint8_t data) { - m_noise_1->dac_w(data); - m_noise_2->dac_w(data); + m_noise[0]->dac_w(data); + m_noise[1]->dac_w(data); } -void micro3d_state::micro3d_snd_dac_b(uint8_t data) +void micro3d_state::snd_dac_b(uint8_t data) { - /* TODO: This controls upd7759 volume */ + // TODO: This controls upd7759 volume } -void micro3d_state::micro3d_sound_p1_w(uint8_t data) +void micro3d_state::sound_p1_w(uint8_t data) { m_sound_port_latch[1] = data; - micro3d_sound_device *noise = (data & 4) ? m_noise_2 : m_noise_1; - noise->noise_sh_w(data); + m_noise[BIT(data, 2)]->noise_sh_w(data); } -void micro3d_state::micro3d_sound_p3_w(uint8_t data) +void micro3d_state::sound_p3_w(uint8_t data) { // preserve RXD input m_sound_port_latch[3] = (m_sound_port_latch[3] & 1) | (data & ~1); @@ -461,17 +450,17 @@ void micro3d_state::micro3d_sound_p3_w(uint8_t data) m_upd7759->reset_w(!BIT(data, 4)); } -uint8_t micro3d_state::micro3d_sound_p1_r() +uint8_t micro3d_state::sound_p1_r() { return (m_sound_port_latch[1] & 0x7f) | m_sound_sw->read(); } -uint8_t micro3d_state::micro3d_sound_p3_r() +uint8_t micro3d_state::sound_p3_r() { return (m_sound_port_latch[3] & 0xf7) | (m_upd7759->busy_r() ? 0x08 : 0); } -void micro3d_state::micro3d_upd7759_w(uint8_t data) +void micro3d_state::upd7759_w(uint8_t data) { m_upd7759->port_w(data); m_upd7759->start_w(0); @@ -503,7 +492,7 @@ void micro3d_state::init_botss() { address_space &space = m_maincpu->space(AS_PROGRAM); - /* Required to pass the hardware version check */ + // Required to pass the hardware version check space.install_read_handler(0x140000, 0x140001, read16smo_delegate(*this, FUNC(micro3d_state::botss_140000_r))); space.install_read_handler(0x180000, 0x180001, read16smo_delegate(*this, FUNC(micro3d_state::botss_180000_r))); @@ -513,6 +502,16 @@ void micro3d_state::init_botss() void micro3d_state::machine_start() { m_mac_done_timer = timer_alloc(FUNC(micro3d_state::mac_done_callback), this); + + save_item(NAME(m_m68681_tx0)); + save_item(NAME(m_sound_port_latch)); + save_item(NAME(m_botss_latch)); + save_item(NAME(m_sram_r_addr)); + save_item(NAME(m_sram_w_addr)); + save_item(NAME(m_vtx_addr)); + save_item(NAME(m_mrab11)); + save_item(NAME(m_mac_stat)); + save_item(NAME(m_mac_inst)); } void micro3d_state::machine_reset() diff --git a/src/mame/misc/micro3d_v.cpp b/src/mame/misc/micro3d_v.cpp index 525686801d9..ccdafc19e9b 100644 --- a/src/mame/misc/micro3d_v.cpp +++ b/src/mame/misc/micro3d_v.cpp @@ -16,6 +16,8 @@ #include "cpu/am29000/am29000.h" +#include + /************************************* * @@ -41,10 +43,36 @@ enum void micro3d_state::video_start() { - /* Allocate 512x12 x 2 3D frame buffers */ - m_frame_buffers[0] = std::make_unique(1024 * 512); - m_frame_buffers[1] = std::make_unique(1024 * 512); + // Allocate 512x12 x 2 3D frame buffers + for (int i = 0; i < 2; i++) + { + m_frame_buffers[i] = std::make_unique(1024 * 512); + save_pointer(NAME(m_frame_buffers[i]), 1024 * 512, i); + } + m_tmp_buffer = std::make_unique(1024 * 512); + save_pointer(NAME(m_tmp_buffer), 1024 * 512); + + save_item(NAME(m_creg)); + save_item(NAME(m_xfer3dk)); + save_item(NAME(m_pipe_data)); + save_item(NAME(m_pipeline_state)); + save_item(NAME(m_vtx_fifo)); + save_item(NAME(m_fifo_idx)); + save_item(NAME(m_draw_cmd)); + save_item(NAME(m_draw_state)); + save_item(NAME(m_x_min)); + save_item(NAME(m_x_max)); + save_item(NAME(m_y_min)); + save_item(NAME(m_y_max)); + save_item(NAME(m_z_min)); + save_item(NAME(m_z_max)); + save_item(NAME(m_x_mid)); + save_item(NAME(m_y_mid)); + save_item(NAME(m_dpram_bank)); + save_item(NAME(m_draw_dpram)); + save_item(NAME(m_drawing_buffer)); + save_item(NAME(m_display_buffer)); } @@ -69,14 +97,14 @@ TMS340X0_SCANLINE_IND16_CB_MEMBER(micro3d_state::scanline_update) uint16_t const *const src = &m_sprite_vram[(params->rowaddr << 8) & 0x7fe00]; uint16_t *dest = &bitmap.pix(scanline); int coladdr = params->coladdr; - int sd_11_7 = (m_creg & 0x1f) << 7; + int const sd_11_7 = (m_creg & 0x1f) << 7; scanline = std::max((scanline - params->veblnk), 0); uint16_t const *frame_src = m_frame_buffers[m_display_buffer].get() + (scanline << 10); - /* TODO: XFER3DK - X/Y offsets for 3D */ + // TODO: XFER3DK - X/Y offsets for 3D - /* Copy the non-blanked portions of this scanline */ + // Copy the non-blanked portions of this scanline for (int x = params->heblnk; x < params->hsblnk; x += 2) { uint16_t pix = src[coladdr++ & 0x1ff]; @@ -102,7 +130,7 @@ TMS340X0_SCANLINE_IND16_CB_MEMBER(micro3d_state::scanline_update) } } -void micro3d_state::micro3d_creg_w(uint16_t data) +void micro3d_state::creg_w(uint16_t data) { if (~data & 0x80) m_vgb->set_input_line(0, CLEAR_LINE); @@ -110,7 +138,7 @@ void micro3d_state::micro3d_creg_w(uint16_t data) m_creg = data; } -void micro3d_state::micro3d_xfer3dk_w(uint16_t data) +void micro3d_state::xfer3dk_w(uint16_t data) { m_xfer3dk = data; } @@ -234,31 +262,30 @@ micro3d_state::micro3d_vtx micro3d_state::intersect(micro3d_vtx *v1, micro3d_vtx inline void micro3d_state::write_span(uint32_t y, uint32_t x) { - uint32_t *draw_dpram = m_draw_dpram; - int addr = y << 1; + int const addr = y << 1; - if (draw_dpram[addr] == 0x3ff000) + if (m_draw_dpram[addr] == 0x3ff000) { - draw_dpram[addr] = (x << 12) | x; + m_draw_dpram[addr] = (x << 12) | x; } else { - /* Check start */ + // Check start if (x < (m_draw_dpram[addr] & 0x3ff)) { - draw_dpram[addr] &= ~0x3ff; - draw_dpram[addr] |= x; + m_draw_dpram[addr] &= ~0x3ff; + m_draw_dpram[addr] |= x; } - /* Check end */ - if (x > (draw_dpram[addr] >> 12)) + // Check end + if (x > (m_draw_dpram[addr] >> 12)) { - draw_dpram[addr] &= ~0x3ff000; - draw_dpram[addr] |= (x << 12); + m_draw_dpram[addr] &= ~0x3ff000; + m_draw_dpram[addr] |= (x << 12); } } } -/* This is the same algorithm used in the 3D tests */ +// This is the same algorithm used in the 3D tests void micro3d_state::draw_line(uint32_t x1, uint32_t y1, uint32_t x2, uint32_t y2) { uint32_t tmp2; @@ -270,15 +297,8 @@ void micro3d_state::draw_line(uint32_t x1, uint32_t y1, uint32_t x2, uint32_t y2 if (x2 < x1) { - uint32_t tmp; - - tmp = x1; - x1 = x2; - x2 = tmp; - - tmp = y1; - y1 = y2; - y2 = tmp; + std::swap(x1, x2); + std::swap(y1, y2); } dx = x2 - x1; @@ -364,16 +384,14 @@ void micro3d_state::draw_line(uint32_t x1, uint32_t y1, uint32_t x2, uint32_t y2 void micro3d_state::rasterise_spans(uint32_t min_y, uint32_t max_y, uint32_t attr) { - int y; - int color = attr & 0xfff; + int const color = attr & 0xfff; if ((attr >> 24) == 0x85) { - for (y = min_y; y <= max_y; ++y) + for (int y = min_y; y <= max_y; ++y) { - int x; - int addr = y << 1; - uint16_t *dest = &m_tmp_buffer[y * 1024]; + int const addr = y << 1; + uint16_t *const dest = &m_tmp_buffer[y * 1024]; if (m_draw_dpram[addr] == 0x3ff000) { @@ -381,10 +399,10 @@ void micro3d_state::rasterise_spans(uint32_t min_y, uint32_t max_y, uint32_t att } else { - int start = m_draw_dpram[addr] & 0x3ff; - int end = (m_draw_dpram[addr] >> 12) & 0x3ff; + int const start = m_draw_dpram[addr] & 0x3ff; + int const end = (m_draw_dpram[addr] >> 12) & 0x3ff; - for (x = start; x <= end; ++x) + for (int x = start; x <= end; ++x) dest[x] = color; } } @@ -410,11 +428,10 @@ void micro3d_state::rasterise_spans(uint32_t min_y, uint32_t max_y, uint32_t att int noise_val = (attr >> 12) & 0x3ff; int noise_taps = 0; - for (y = min_y; y <= max_y; ++y) + for (int y = min_y; y <= max_y; ++y) { - int x; - int addr = y << 1; - uint16_t *dest = &m_tmp_buffer[y * 1024]; + int const addr = y << 1; + uint16_t *const dest = &m_tmp_buffer[y * 1024]; if (m_draw_dpram[addr] == 0x3ff000) { @@ -422,10 +439,10 @@ void micro3d_state::rasterise_spans(uint32_t min_y, uint32_t max_y, uint32_t att } else { - int start = m_draw_dpram[addr] & 0x3ff; - int end = (m_draw_dpram[addr] >> 12) & 0x3ff; + int const start = m_draw_dpram[addr] & 0x3ff; + int const end = (m_draw_dpram[addr] >> 12) & 0x3ff; - for (x = start; x <= end; ++x) + for (int x = start; x <= end; ++x) { int fb; @@ -444,27 +461,26 @@ int micro3d_state::clip_triangle(micro3d_vtx *v, micro3d_vtx *vout, int num_vert { micro3d_vtx clip_out[10]; - int i; int prev_i = num_vertices - 1; int clip_verts = 0; - for (i = 0; i < num_vertices; ++i) + for (int i = 0; i < num_vertices; ++i) { int v1_in = inside(&v[i], plane); int v2_in = inside(&v[prev_i], plane); - /* Edge is inside */ + // Edge is inside if (v1_in && v2_in) { clip_out[clip_verts++] = v[i]; } - /* Edge is leaving */ + // Edge is leaving else if (v1_in && !v2_in) { clip_out[clip_verts++] = intersect(&v[i], &v[prev_i], plane); clip_out[clip_verts++] = v[i]; } - /* Edge is entering */ + // Edge is entering else if (!v1_in && v2_in) { clip_out[clip_verts++] = intersect(&v[i], &v[prev_i], plane); @@ -479,13 +495,12 @@ int micro3d_state::clip_triangle(micro3d_vtx *v, micro3d_vtx *vout, int num_vert void micro3d_state::draw_triangles(uint32_t attr) { - int i; bool triangles = false; - int vertices = m_fifo_idx / 3; + int const vertices = m_fifo_idx / 3; int min_y = 0x3ff; int max_y = 0; - /* This satisifes the burst write test */ + // This satisifes the burst write test if (vertices == 0) { int y; @@ -497,10 +512,9 @@ void micro3d_state::draw_triangles(uint32_t attr) return; } - /* Draw triangles as fans */ - for (i = 2; i < vertices; ++i) + // Draw triangles as fans + for (int i = 2; i < vertices; ++i) { - int k; int clip_vertices = 3; micro3d_vtx vo, vm, vn; @@ -522,25 +536,25 @@ void micro3d_state::draw_triangles(uint32_t attr) vclip_list[1] = vm; vclip_list[2] = vn; - /* Clip against near Z and far Z planes */ + // Clip against near Z and far Z planes clip_vertices = clip_triangle(vclip_list, vclip_list, clip_vertices, CLIP_Z_MIN); clip_vertices = clip_triangle(vclip_list, vclip_list, clip_vertices, CLIP_Z_MAX); - /* Perform perspective divide */ - for (k = 0; k < clip_vertices; ++k) + // Perform perspective divide + for (int k = 0; k < clip_vertices; ++k) { vclip_list[k].x = vclip_list[k].x * m_z_min / vclip_list[k].z; vclip_list[k].y = vclip_list[k].y * m_z_min / vclip_list[k].z; vclip_list[k].z = 0; } - /* Perform screen-space clipping */ + // Perform screen-space clipping clip_vertices = clip_triangle(vclip_list, vclip_list, clip_vertices, CLIP_Y_MAX); clip_vertices = clip_triangle(vclip_list, vclip_list, clip_vertices, CLIP_X_MIN); clip_vertices = clip_triangle(vclip_list, vclip_list, clip_vertices, CLIP_X_MAX); clip_vertices = clip_triangle(vclip_list, vclip_list, clip_vertices, CLIP_Y_MIN); - /* Rasterise */ + // Rasterise if (clip_vertices >= 3) { micro3d_vtx a = vclip_list[0]; @@ -554,7 +568,7 @@ void micro3d_state::draw_triangles(uint32_t attr) b.x += m_x_mid; b.y += m_y_mid; - /* Keep track of the y-extents so we don't have to scan every line later */ + // Keep track of the y-extents so we don't have to scan every line later if (a.y < min_y) min_y = a.y; if (a.y > max_y) @@ -565,10 +579,10 @@ void micro3d_state::draw_triangles(uint32_t attr) if (b.y > max_y) max_y = b.y; - /* Draw the first line of the triangle/fan */ + // Draw the first line of the triangle/fan draw_line(a.x, a.y, b.x, b.y); - for (k = 2; k < clip_vertices; ++k) + for (int k = 2; k < clip_vertices; ++k) { micro3d_vtx c = vclip_list[k]; @@ -617,9 +631,9 @@ bc000000-1fc DPRAM address for read access ******************************************************************************/ -void micro3d_state::micro3d_fifo_w(uint32_t data) +void micro3d_state::fifo_w(uint32_t data) { - uint32_t opcode = data >> 24; + uint32_t const opcode = data >> 24; switch (m_draw_state) { @@ -642,14 +656,13 @@ void micro3d_state::micro3d_fifo_w(uint32_t data) } case 0xbc: { - uint32_t dpram_r_addr = (((data & 0x01ff) << 1) | m_dpram_bank); + uint32_t const dpram_r_addr = (((data & 0x01ff) << 1) | m_dpram_bank); m_pipe_data = m_draw_dpram[dpram_r_addr]; m_drmath->set_input_line(AM29000_INTR1, ASSERT_LINE); break; } case 0x80: { - int addr; m_fifo_idx = 0; m_draw_state = STATE_DRAW_VTX_DATA; @@ -657,19 +670,19 @@ void micro3d_state::micro3d_fifo_w(uint32_t data) * TODO: Not sure this is the right place for it - * causes monitor mode draw tests to fail */ - for (addr = 0; addr < 512; ++addr) + for (int addr = 0; addr < 512; ++addr) m_draw_dpram[addr << 1] = 0x3ff000; break; } case 0xf8: { - /* 3D pipeline health LEDs toggle */ + // 3D pipeline health LEDs toggle break; } case 0xd8: { - /* TODO: We shouldn't need this extra buffer - is there some sort of sync missing? */ + // TODO: We shouldn't need this extra buffer - is there some sort of sync missing? memcpy(m_frame_buffers[m_drawing_buffer].get(), m_tmp_buffer.get(), 512*1024*2); m_drawing_buffer ^= 1; m_vgb->set_input_line(0, ASSERT_LINE); @@ -717,18 +730,19 @@ void micro3d_state::micro3d_fifo_w(uint32_t data) } } -void micro3d_state::micro3d_alt_fifo_w(uint32_t data) +void micro3d_state::alt_fifo_w(uint32_t data) { m_vtx_fifo[m_fifo_idx++] = VTX_SEX(data); } -uint32_t micro3d_state::micro3d_pipe_r() +uint32_t micro3d_state::pipe_r() { - m_drmath->set_input_line(AM29000_INTR1, CLEAR_LINE); + if (!machine().side_effects_disabled()) + m_drmath->set_input_line(AM29000_INTR1, CLEAR_LINE); return m_pipe_data; } -INTERRUPT_GEN_MEMBER(micro3d_state::micro3d_vblank) +INTERRUPT_GEN_MEMBER(micro3d_state::vblank) { // mc68901_int_gen(machine(), GPIP7); -- cgit v1.2.3