diff --git a/hash/c64_flop_orig.xml b/hash/c64_flop_orig.xml index 409fa63fc8f..18cbf26720c 100644 --- a/hash/c64_flop_orig.xml +++ b/hash/c64_flop_orig.xml @@ -69,7 +69,7 @@ Fails loading Boulder Dash 1984 First Star - + @@ -103,7 +103,7 @@ Eventually goes "CHECKSUM ERROR! LOAD ABORTED!" on bootstrap Commando 1985 Elite - @@ -118,7 +118,7 @@ LOAD "COMMANDO",8,1 Defender of the Crown 1987 Cinemaware - @@ -158,7 +158,7 @@ Gets stuck at a "V-MAX!" screen Green Beret 1986 Ocean - @@ -186,7 +186,7 @@ Never leaves BASIC Jack the Nipper 1986 Gremlin Graphics - @@ -203,7 +203,7 @@ Punts to BASIC Miami Vice 1986 Ocean - @@ -232,7 +232,7 @@ Punts to BASIC Rambo: First Blood Part II 1985 Ocean - @@ -249,7 +249,7 @@ Locks up during boot Rambo: First Blood Part II (NTSC) 1985 Thunder Mountain - @@ -266,7 +266,7 @@ Hangs on loading transition between trademarks and title Rambo III (PAL) 1988 Ocean - @@ -303,7 +303,7 @@ Punts to BASIC Street Hassle 1987 Melbourne House - @@ -319,7 +319,7 @@ Part of player sprite draws transparent (collisions still works) Strip Poker 1984 Artworx - @@ -334,7 +334,7 @@ None of the files on disk leaves BASIC Terramex 1988 Grand Slam - @@ -358,7 +358,7 @@ Crashes at the end of loading sequence Turbo Out Run 1989 U.S. Gold - @@ -384,7 +384,7 @@ Punts to BASIC Game Set and Match 1987 Ocean - - + INPUT 64 10/86 diff --git a/src/mame/dataeast/cntsteer.cpp b/src/mame/dataeast/cntsteer.cpp index afa1e7e008f..084e13de7cb 100644 --- a/src/mame/dataeast/cntsteer.cpp +++ b/src/mame/dataeast/cntsteer.cpp @@ -15,21 +15,30 @@ - flip screen support; - according to a side-by-side test, sound should be "darker" by some octaves, likely that a sound filter is needed; - cntsteer specific: - - In Back Rotate Test, rotation is tested with the following arrangement (upper bits of rotation parameter): + - tilemap paging may be wrong + Maybe upper scroll bits also controls startdx/dy? + zerotrgt: + - ROZ is misaligned in attract mode ranking (should be X +576 not -576) + - ROZ doesn't align with tanks in stage 2 (red circles should follow them) + cntsteer: + - In Back Rotate Test, rotation is tested with the following arrangement + (upper bits of rotation parameter): 04 -> 05 -> 02 -> 03 -> 00 -> 01 -> 06 -> 07 -> 04 and backwards Anything with bit 0 set is tested from 0xff to 0, with bit 0 clear that's 0 -> 0xff, fun. - - Understand how irq communication works between CPUs. Buffer $415-6 seems involved in the protocol. - We currently have slave CPU irq hooked up to vblank, might or might not be correct. - - invert order between maincpu and subcpu, subcpu is clearly the master CPU here. - - understand why background mirroring causes wrong gfxs on title screen_device. - Probably area 0x2000-0x2fff enables tile bank bit 8 and write addresses have same mapping as reading. - A preliminary decoding is in tilelayout_swap; - - tilemap flashing when gameplay timer is running out; - - tilemap scrolling, correct only for title screen. - Maybe upper scroll bits also controls startdx/dy? + - scrolling goes backwards on gameplay; + - tilemap should flash when gameplay timer is running out; + - understand why background mirroring causes wrong gfxs at end of title screen sequence. + Uses $2000-$2fff and should just draw the same USA flag as the ones shown at start of the + sequence; + - color decoding slightly off, needs resnet; + - Understand how irq communication works between CPUs. Buffer $415-6 seems involved in the + protocol. + We currently have slave CPU irq hooked up to vblank, might or might not be correct. + - sound keeps ringing once it start executing SOUND TEST; cleanup - - split into driver/video; + - split state objects, consider using composable devices rather than inherit one with the + other (has HMC20 + VSC30 custom chips); + - Document PCB components for both; ***************************************************************************************/ @@ -104,7 +113,6 @@ public: void cntsteer_background_w(offs_t offset, uint8_t data); uint8_t cntsteer_background_mirror_r(offs_t offset); void gekitsui_sub_irq_ack(uint8_t data); - void cntsteer_sound_w(uint8_t data); void zerotrgt_ctrl_w(offs_t offset, uint8_t data); void cntsteer_sub_irq_w(uint8_t data); void cntsteer_sub_nmi_w(uint8_t data); @@ -484,6 +492,7 @@ void cntsteer_state::cntsteer_vregs_w(offs_t offset, uint8_t data) case 0: m_scrolly = data; break; case 1: m_scrollx = data; break; case 2: m_bg_bank = (data & 0x01) << 9; + // crosses above, verified to be correct by service mode BACK CG PALLETE TEST item m_bg_color_bank = (data & 7); m_bg_tilemap->mark_all_dirty(); break; @@ -515,13 +524,13 @@ void cntsteer_state::cntsteer_background_w(offs_t offset, uint8_t data) m_bg_tilemap->mark_tile_dirty(offset); } -/* checks area 0x2000-0x2fff with this address config. */ +/* checks area $2000-$2fff with this address config. */ uint8_t cntsteer_state::cntsteer_background_mirror_r(offs_t offset) { return m_videoram2[bitswap<16>(offset,15,14,13,12,5,4,3,2,1,0,11,10,9,8,7,6)]; } -// TODO: on write prolly selects bit 8 of tile bank (which needs better decoding too) +// TODO: $2000-$2fff on write most likely also selects the alt rotated tiles at 0x1**/0x3** /************************************* * @@ -534,12 +543,6 @@ void cntsteer_state::gekitsui_sub_irq_ack(uint8_t data) m_subcpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); } -void cntsteer_state::cntsteer_sound_w(uint8_t data) -{ - m_soundlatch->write(data); - m_audiocpu->set_input_line(0, HOLD_LINE); -} - void cntsteer_state::zerotrgt_ctrl_w(offs_t offset, uint8_t data) { /*TODO: check this.*/ @@ -625,7 +628,7 @@ void cntsteer_state::gekitsui_cpu2_map(address_map &map) map(0x3003, 0x3003).portr("COINS"); map(0x3000, 0x3004).w(FUNC(cntsteer_state::zerotrgt_vregs_w)); map(0x3005, 0x3005).w(FUNC(cntsteer_state::gekitsui_sub_irq_ack)); - map(0x3007, 0x3007).w(FUNC(cntsteer_state::cntsteer_sound_w)); + map(0x3007, 0x3007).w(m_soundlatch, FUNC(generic_latch_8_device::write)); map(0x4000, 0xffff).rom(); } @@ -652,8 +655,7 @@ void cntsteer_state::cntsteer_cpu2_map(address_map &map) map(0x3000, 0x3004).w(FUNC(cntsteer_state::cntsteer_vregs_w)); map(0x3005, 0x3005).w(FUNC(cntsteer_state::gekitsui_sub_irq_ack)); map(0x3006, 0x3006).w(FUNC(cntsteer_state::cntsteer_main_irq_w)); - map(0x3007, 0x3007).w(FUNC(cntsteer_state::cntsteer_sound_w)); - map(0x3007, 0x3007).nopr(); //m6809 bug. + map(0x3007, 0x3007).nopr().w(m_soundlatch, FUNC(generic_latch_8_device::write)); map(0x4000, 0xffff).rom(); } @@ -985,7 +987,6 @@ void cntsteer_state::cntsteer(machine_config &config) MC6809E(config, m_subcpu, 2000000); /* MC68B09E */ m_subcpu->set_addrmap(AS_PROGRAM, &cntsteer_state::cntsteer_cpu2_map); -// m_subcpu->set_disable(); M6502(config, m_audiocpu, XTAL(12'000'000)/8); /* ? */ m_audiocpu->set_addrmap(AS_PROGRAM, &cntsteer_state::sound_map); @@ -1016,6 +1017,7 @@ void cntsteer_state::cntsteer(machine_config &config) SPEAKER(config, "speaker").front_center(); GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, 0); ay8910_device &ay1(YM2149(config, "ay1", XTAL(12'000'000)/8)); ay1.port_a_write_callback().set("dac", FUNC(dac_byte_interface::data_w)); @@ -1063,6 +1065,7 @@ void cntsteer_state::zerotrgt(machine_config &config) SPEAKER(config, "speaker").front_center(); GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, 0); YM2149(config, "ay1", 1500000).add_route(ALL_OUTPUTS, "speaker", 0.5); @@ -1291,4 +1294,4 @@ void cntsteer_state::init_zerotrgt() GAME( 1985, zerotrgt, 0, zerotrgt, zerotrgt, cntsteer_state, init_zerotrgt, ROT0, "Data East Corporation", "Zero Target (World, CW)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND|MACHINE_NO_COCKTAIL|MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE ) GAME( 1985, zerotrgta, zerotrgt, zerotrgt, zerotrgta, cntsteer_state, init_zerotrgt, ROT0, "Data East Corporation", "Zero Target (World, CT)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND|MACHINE_NO_COCKTAIL|MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE ) GAME( 1985, gekitsui, zerotrgt, zerotrgt, zerotrgta, cntsteer_state, init_zerotrgt, ROT0, "Data East Corporation", "Gekitsui Oh (Japan)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND|MACHINE_NO_COCKTAIL|MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE ) -GAME( 1985, cntsteer, 0, cntsteer, cntsteer, cntsteer_state, init_zerotrgt, ROT270, "Data East Corporation", "Counter Steer (Japan)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND|MACHINE_WRONG_COLORS|MACHINE_NO_COCKTAIL|MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE ) +GAME( 1985, cntsteer, 0, cntsteer, cntsteer, cntsteer_state, init_zerotrgt, ROT270, "Data East Corporation", "Counter Steer (Japan)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND|MACHINE_IMPERFECT_COLORS|MACHINE_NO_COCKTAIL|MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE )