Behavior with BPLCON1 shifts and mid-scanline BPLCON0 change
3 Attachment(s)
I've run into a bitplane rendering mismatch when using BPLCON1 shifts and changing the number of bitplanes mid-scanline.
Display setup:
The copper instructions look like this for each line (with different values for BPLCON1): Code:
0100 1200 [06c 0d0] ; BPLCON0 := 0x1200 Tested with WinUAE 4.4.0 and latest Beta, showing slightly different behaviors. (EDIT: test executable updated) |
Great, new undocumented feature :)
It is more correct in subpixel mode (missing left part becomes visible). I haven't yet debugged why it even happens.. There is probably some internal Denise delays that cause this effect. |
Could you do following tests:
- I assume it does not happen if PF1 == PF2? - does it happen if you swap PF1 and PF2? - does it happen if PF1 BPLCON1 bit is F (instead of zero. Or some other non-zero static value)? (or when swapped, PF2 is F) - does it happen only if PF1 > PF2 and/or PF2 > PF1? PF1 != PF2 requires subpixel mode which explains the difference. |
3 Attachment(s)
Test executable updated (adjust PF1 portion of BPLCON1 with RMB + mouse up/down). Screenshots with PF1 values of $0 to $f attached, that should cover all combinations.
I hope the literal screenshots are still helpful, don't have any capturing equipment... :) |
1 Attachment(s)
For completeness: This is how the center image looks like
|
1 Attachment(s)
Interesting tiny difference when ECS Denise or AGA. (Check black/red in right edge) OCS Denise or A1000: identical to image in first post.
Old test executable. Image is from real A500 connected OSSC + custom configured "extreme" overscan mode. |
I've probably made it work in vAmiga. Some details can be found in this GitHub issue:
https://github.com/dirkwhoffmann/vAmiga/issues/609 However, I am not sure if this can help troubleshooting UAE since the code base of vAmiga is completely different. Furthermore, I’ve only tested the program with the start configuration and I haven’t compared my emulator output with the real machine for other BPLCON combinations yet (in other words: I didn’t push any mouse button when running the test). |
Should now work correctly in WinUAE (winuae.7z updated). ECS Denise/AGA extra feature is not yet emulated.
Denise logic was not correct. Normal sequence is: - Agnus does BPLxDAT DMA. Denise stores the data. - When BPL1DAT DMA happens, Denise copies all BPLxDAT contents to internal storage registers. All planes. - When BPLCON1 shift matches horizontal counter, only currently active planes are copied to shift register. (UAE used plane count value when BPL1DAT was written but it needs to be current value) - All planes' shift registers are active, including disabled planes. (UAE only shifted active planes, even if plane count decreased mid scanline) (Possibly more detailed description will appear in undocumented features thread later) EDIT: just noticed earlier post. interesting timing.. |
ECS Denise/AGA side-effect: if bitplane gets disabled mid-scanline and if bit 0 of disabled bitplane's last word copied to shifter is one, it appears twice on screen. This logic results in 100% identical output when compared to real ECS Denise A500 and A1200.
Quite weird behavior. Emulation added, supported only in subpixel mode. |
- When BPLCON1 shift matches horizontal counter, only currently active planes are copied to shift register.
Quick question: This means that if BPLCON1 contains the same shift values for even and odd planes and assuming that all bitplanes are enabled, all shift registers get updated simultaneously. But if the shift values for even and odd planes differ, we have two copy events. When the shift value for odd planes matches, shift registers 1,3, and 5 are filled. When the shift value for even planes matches, shift registers 2,4, and 6 are filled. is this correct? (My emulator is doing this wrong at the moment). |
@losso: Do you mind if I add your program to my regression test suite for vAmiga? It's a public repo on GitHub: https://github.com/dirkwhoffmann/vAmigaTS
|
btw, I did some quick tests how hires<>lores changes work and it looks like OCS Denise, ECS Denise and AGA all have slightly different behavior (few pixels during change have "undocumented" behavior). Going to examine this more after 4.9 is out.
Quote:
|
All times are GMT +2. The time now is 23:53. |
Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.