First post, by rcblanke
- Rank
- Oldbie
1000 Miglia (http://www.mobygames.com/game/dos/1000-miglia) seems to be broken in CVS (was working fine in 0.65). I can start the game, but not the actual racing (the screen remains blank).
Regards,
Ronald
1000 Miglia (http://www.mobygames.com/game/dos/1000-miglia) seems to be broken in CVS (was working fine in 0.65). I can start the game, but not the actual racing (the screen remains blank).
Regards,
Ronald
Seems to be hanging in a timer-loop.
out 43,e8
in al,42
and al,80
je loop
The out 43,e8 sets the counterstatus_set so they don't
receive the counter (which they seem to expect) but the
status reg. No idea how to fix it though.
They may as well be checking for the counter output bit.
loop: is before out 43?
What mode is Timer2 set to?
1+1=10
> They may as well be checking for the counter output bit
Actually they do that, right.
> loop: is before out 43?
Yes, just that tight loop.
The timer mode is zero, but maybe the p->new_mode
should be reset somewhere (game is on abandonia btw.)
This makes the game work but since undocmented behavior is "exploited" I'm not completely sure it is right. Maybe I'll check on real hardware.
Edit: removed bad patch.
Bochs has two different pit implementations, one of them has the
status-reading function (not documented too well) so maybe i can
check the behaviour against that implementation.
The problem is not the status readback but the timer is set to mode 0 without the timer value being written. My patch simulates it to be set to 0xffff in that case but it probably keeps the old value (which is the same as about 0xffff for that game).
1+1=10
Never mind, I found the actual bug.
new_mode was only reset for timer 0, not for timer 2. The game doesn't use anything undocumented.
Somehow i knew the new_mode is to blame (not really).
Thanks, will add this.
Thanks fellows, nice work!
Somebody could test the rocket science games again 😀
Something interesting: Preferrably games that have ports for different platforms seem to make more use of timers. Could it be that those platforms are equipped with more timers and programmers desperately looked for a way to replace those on the IBM PC platform when porting?
1+1=10