Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cirrus: BLT with coordinate overflow does not update screen, may crash #221

Closed
finnbrudal opened this issue Jan 14, 2024 · 5 comments
Closed

Comments

@finnbrudal
Copy link
Contributor

BLT operations that occur across screen edges fail to update the screen. For example, this may occur with decrementing BLTs along the left or top sides of the screen, or an unaligned color expansion BLT to the left side of the screen. An overflowing destination address, such as with an unaligned color expansion BLT to the top left corner, makes Bochs crash.

@vruppert
Copy link
Contributor

I have now fixed the redraw values for backward BitBlt. According to the specs color expansion cannot be used with decreasing addresses. Please let me know if there are still issues.

@finnbrudal
Copy link
Contributor Author

This sets w and h to 0 as well and makes Bochs freeze for several seconds. For the backwards case, incrementing both redraw.x and redraw.y by 1 fixed the original problem. The other problem is with (forwards) unaligned BLTs on the left side, that start before the beginning of the scanline. By adjusting the destination address according to the left side clipping settings before it is used in any calculations, this problem should be taken care of as well.

@vruppert
Copy link
Contributor

Oops...
I'm sorry for that mistake. I have now applied a better version. Do you have a test case for the other part of the issue? I also need one for your pull request.

vruppert added a commit that referenced this issue Jan 17, 2024
If x0 + width exceeds the screen width, mark tile(s) on the left side of the screen, too.
This should finally fix issue #221.
@vruppert
Copy link
Contributor

Are all of the Cirrus issues you reported fixed now?

@finnbrudal
Copy link
Contributor Author

Yes, everything seems to work now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants