what could cause this sprite corruption
1 Attachment(s)
I'm trying to fix a game (Oscar).
Using SPS 1228 (ECS, 2 disks) with WinUAE quickstart A500 When using cycle exact (full), all is okay But when not using cycle exact (which is the default), character sprite sometimes is shifted to the bottom with a corrupt first graphics line (white pixels like morse code) Attachment 66739 Looks like a timing issue. Copperlist has a copper jump for double buffering probably, switched in vertical blank. Could it be because sometimes there's extra processing in vblank before the switch? I don't understand why this is happening: sprite control word is okay (else sprite would be somewhere else), and data aren't changed either (note: this is a composite sprite with 4 sprites, note that the corrupt pattern is doubled, on 2 or 4 sprites composing both halves of the character) The same issue happens in the AGA version, but in the underwater levels, just when a sound is played (so extra CPU used) a trashed pixel line appears and character is shifted down by 1 pixel... |
Quote:
|
yeah, but it means that on another machine (A1200, A4000 ...) the bug will appear. Games usually don't need cycle exact to run, and when they do, we have to fix them for whdload.
|
The sprite data change is that via CPU or Blitter?
|
If only sprite has corruption: it isn't going to be copper list double buffer related or lots more than single sprite would get corrupted.
Most likely CPU is doing some direct sprite register copper list or sprite coordinate or sprite data modifications too late or too early. |
I could fix it by removing the COPJMP just after switching the copperlist in vblank
Code:
00C0C454 23f9 00c2 ff0e 00df f080 MOVE.L $00c2ff0e [0007664c],$00dff080 Doing this fixes the sprite issue, but all the rest (bobs) are flickering. Seems that it breaks double buffering... |
Perhaps above code runs after line that does first sprite DMA fetches (25 in PAL) and if CPU is faster, it runs early and updates sprite pointers too early.
It would be quite strange way to handle sprites, loads sprite control words from previous copper list but sprite data from pointers loaded by new copper list :) |
I'm not going to worry about that now. I investigated this after I had a similar problem while doing the whdload patch, only when sound was played.
It appears that we delay sound play using vpos wait, and not doing this trashes the sound but fixes the sprite issue! |
i tried Oscar SPS on A500 Quickstart with WinUAE 4.2.1 without cycle exact and sprite is perfect
https://i.ibb.co/3s5TGcY/oscar-glitches.png |
got 4.3.1 beta here.
|
I wouldn't trust that version too much yet..
Also changelog explains another (more likely) reason that almost guarantees different timing in non-ce 68000 modes compared to old versions. In non-ce mode 68000 cycle counting was mostly approximate. Now it is fully accurate. (It means: if program runs in fast ram and it never accesses chip ram, both ce mode and non-ce 68000 will have 100% exact same timing.) |
Don't worry Toni. I fixed the sprite glitch that occurred on very fast configurations (and is probably related to that one).
To fix CPU-dependent loop on audio DMACON writes; we had inserted VPOS loops. I think we overdid it too much and when the "bubble" sample was played, it slowed down the main loop too much and it desynced the sprite refresh. Why did that happen on fast configs I don't know. Probably because in that case, vblank runs faster than expected. Reducing the VPOS loops (still checking that audio was playing okay with winuae using chip hack to trash audio on purpose) just a little bit fixes the sprite issue... |
HA, you make a WHDLoad Installer for Oscar ECS ?
Sweeeeet :spin I was waiting for this, hehe :) Yes the game is, well say, not the best ;) ..... but still Thank you JODT and all WHDLoad installer creators :bowdown |
yes, Oscar ECS is completed now :) Waiting for Wepl to update whdload page.
This is really a colorful platformer with 7 levels & bonuses, water/mirror effects, etc.... This is huge. I think the gameplay is too boring which explains people don't like it too much. I added trainer features like: - instant kill of enemies (instead of 3 times, suggested by Hexae, nice idea) - find the clapperboard => end of level (this is too much of a cheat) - second button jump I couldn't cancel the annoying respawn easily though. |
AWESOME, this makes Oscar "almost" playable. The 3 hit kills of the Original where always ridiculous.:o , so youre improvements really helps this game :great
Sure, Jumping and runnings feels as bad as always but that is not youre fault. To be fair to Flair , its technically well made, so i am really happy to see Oscar on my A600 :) The Second Button option dosent work for me (Mega-Drive Pad) . Huge Thanks to Jotd for the Installer :great |
> The Second Button option dosent work for me (Mega-Drive Pad):
damn. I have to dig out my old joysticks & test. Pad has more than 2 buttons. Are you sure one of the buttons doesn't match the amiga second button? because 2 button joysticks are also designed for sega. |
The C Button on the Mega Drive Joypad works normally just like the 2nd button, but it dosent work with the Oscar Ecs slave.
|
I happen to have a sega quickjoy with lots of buttons. Going to test that.
|
All times are GMT +2. The time now is 10:04. |
Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.