Viewing Issue Advanced Details
ID Category [?] Severity [?] Reproducibility Date Submitted Last Update
00771 Misc. Minor Have not tried Feb 5, 2008, 05:45 Dec 10, 2018, 18:50
Tester -Misc Reporters- View Status Public Platform
Assigned To Haze Resolution Fixed OS
Status [?] Resolved Driver
Version 0.65 Fixed in Version 0.137u1 Build
Fixed in Git Commit Github Pull Request #
Summary 00771: assaultp: The skill selection screen disappears before the player can make a choice.
Description The skill selection screen disappears before the player can make a choice.
Steps To Reproduce
Additional Information Posted by MarcoNadal
Github Commit
Flags
Regression Version 0.36b8
Affected Sets / Systems assaultp
Attached Files
png file icon assaultp065gre.png (2,598 bytes) Feb 14, 2008, 15:19
Relationships
There are no relationship linked to this issue.
Notes
14
User avatar
No.05332
phantomdj
Tester
Dec 28, 2009, 08:05
I don't think this is a bug. The same thing happens in the parent set [assault]. The way to select the hard skill in both sets is to push down on either joystick control while pressing the start button.

As I recall from BITD playing on this game, this is the same as it was in the arcade. But I can't confirm that 100%.

If you need more evidence that this is not a bug, I could probably disassemble the code to verify this behaviour is intentional.

Don Hodges
User avatar
No.05337
ShimaPong
Tester
Dec 28, 2009, 15:02
> The same thing happens in the parent set [assault].

Have you read a game magazine in those days or had any info about "Plus" version?

Level selection is additional factor of "Plus" version.
So no selection screen in "normal" Assault is correct.
User avatar
No.05340
phantomdj
Tester
Dec 29, 2009, 07:20
In the parent set [assault], you can activate the level selection by going into service mode [F2 on keyboard] and then pressing "service 1" [9 on keyboard] and then pressing joystick down [not sure of default key for this. maybe K?] until you get to the option "round select", and then press right [keyboard key L ?] until it changes to "on". Then exit service mode [F2] and play a game. You will see the level select, which also disappears very quickly. You really need to press down on a joystick before pressing the start button to select the advanced stage.

BITD I always played on the parent set, Assault. The one that I played on always had the level select option on. Maybe this can be set using a dip switch?

I never have seen or played on an actual Assault Plus machine.
User avatar
No.05346
Kold666
Developer
Dec 30, 2009, 08:45
edited on: Dec 30, 2009, 08:45
This is a mame bug, on my Assault pcb the selection screen doesn't disappear.
I activated it using the service screen
User avatar
No.05347
Fujix
Administrator
Dec 30, 2009, 12:23
The original Assault allows selecting starting stage by the service mode option.
The "Plus" version is a minor update to add the difficulty option because the original was too difficult.
User avatar
No.05348
Kold666
Developer
Dec 30, 2009, 14:18
I burned the plus eproms and run on my pcb, the selection screen doesn't disappear on the pcb
User avatar
No.05350
phantomdj
Tester
Dec 31, 2009, 10:09
I think I have found the cause of this bug.

Port #460007 is mapped to , among other things, the start button. After a credit is inserted, the game waits for the start button to be pressed.

When the start button is pressed, the skill selection screen is shown (if enabled in assault. in assault plus this is enabled by default) and a countdown timer is set to #258 (600 decimal = I assume 10 seconds at 60 hz interrupt)

Now, the game checks the inputs on the joysticks to see if either is pressed down. If it is, the skill is set to the higher level. It also checks to see if either joystick is pressed up. If it is, the skill is set to the easier level.

Then the game checks to see if the start button or the fire button is pressed. If it is, the countdown timer is set to #1E (30 decimal = .5 seconds) and "OK!" is drawn to the screen and the game starts after the counter runs out.

The problem is that the start button is getting "stuck" after being pressed to begin the game. We can fix the bug using the debugger by entering the following:

bp 144e,1,{b@460007=0;g}

After the above breakpoint is set, the game will wait 10 seconds for the player to choose his skill level.

I am not a MAME programmer but it seems to me to fix this bug, we need to have the input ports fall to zero faster after the buttons are released. In this case, port #460007 is the one that is critical.

Please let me know if you need more information.

I was mistaken to think that this is not a MAME bug. It is.
User avatar
No.05393
phantomdj
Tester
Jan 5, 2010, 08:44
I have some more information about the cause of this bug.

Assault runs on 4 CPU's. One of them (the HD63705) handles the input.

It looks like the critical port (memory address of the main CPU #460007) is being written to by the HD63705 AFTER the check is done by the main CPU.

I think the answer to this bug is to force the CPU's to run for fewer cycles in between switching.

In other words, the CPU's need to switch more often. If they did, the main CPU would not read the critical address until it was properly changed by the HD63705. This would fix this bug.

Let me know if you need more information.
User avatar
No.05427
Haze
Senior Tester
Jan 6, 2010, 12:33
edited on: Jan 6, 2010, 12:38
doesn't work even if you specify 'perfect interleave' so it could also be a race condition, or interrupt generation problem.

It does work if you overclock the MCU *and* boost the interleave however. It could be that the MCU isn't cycle accurate, and is running too slow, or there are RAM access related waitstates on the 68k side of things we don't emulate..
User avatar
No.08471
phantomdj
Tester
Apr 29, 2012, 07:39
Here is a thought. According to the Assault manual, the game runs on 4 CPUs. 2x 68000 and a 68B09EP and a HD68B09E.

However, the emulation of Assault defines CPU#4 as a HD63705 instead of the HD86B09E. I wonder if this makes any difference or could be somehow related to the bug? The 63705 is in the 6805 family of CPUs instead of the 6809 as it is supposed to be.

Any ideas?
User avatar
No.08472
Haze
Senior Tester
Apr 29, 2012, 13:29
The boards are so complex there are a virtually unlimited number of factors which could be influencing it, there's bound to be a lot of cycle stealing going on in addition to the more subtle differences between cpu types.

It's one of the worst case scenarios as far as MAME / emulation is concerned
User avatar
No.15878
MetalGod
Senior Tester
Dec 8, 2018, 09:36
edited on: Dec 8, 2018, 13:41
Fixed between mame 0.137 and 0.138
User avatar
No.15889
Haze
Senior Tester
Dec 9, 2018, 19:50
yeah, was fixed with an overclock + sync increase hack at that point, is fixed in current versions by changing when the IO interrupts happen instead... not 100% convince either fix is entirely correct, but the bug is no longer present
User avatar
No.15893
M.A.S.H.
Senior Tester
Dec 10, 2018, 18:50
edited on: Dec 10, 2018, 18:53
Set "Fixed in Version" to 0.137u1, fixed by David Haywood:
https://git.redump.net/mame/commit/?id=8571cc9b24a712d51feb3f051e93cbd4c374d5ff

And the hack was removed in MAME 0.202, by David Haywood:
https://git.redump.net/mame/commit/src/mame/drivers/namcos2.cpp?id=ea7f1e3bd977d12929e3cf5674f168143d5791bf