uli / dragonbasic

Dragon BASIC compiler for Game Boy Advance
Other
42 stars 7 forks source link

Blit operations in graphics mode 4 and 5 are broken. #18

Open supercom32 opened 6 years ago

supercom32 commented 6 years ago

Bug found under Linux using Dragon Basic commit ID: d2ce042366068083a5fe3089873a22221fffbc26

When using graphics mode 4 and 5, blitting doesn't work correctly. In graphics mode 4, if you load a 256-index paletted BMP file, blit it to the screen, and perform a flip operation, nothing is shown. In fact, you can attempt to blit / write to both screen buffers and flip between them and nothing will be shown. The same behaviour appears to happen in mode 5 as well. No images will be displayed (proper or corrupt) and no errors will be generated. The user just gets a black screen.

This problem is rather important since mode 4 is the only bitmapped page flipping mode that supports full screen 256 color images (Since mode 3 doesn't have enough free memory to support double buffering/page flipping).

uli commented 1 year ago

I cannot reproduce this issue with mode 5. I have modified old_tut_7 by changing the screen mode to 5 and adding a FLIP at the end, and it works just fine.

Mode 4 blitting is simply unimplemented, so it's easy to explain why it doesn't work. I'd like to fix that since it's the last high-severity bug, but as I have said I might not have the time to do soon.

supercom32 commented 1 year ago

I'm not sure about mode 5, since it's been so long since I logged this, but glad to know mode 4 is simply not implemented (won't bother trying to coax it to work lol).

Non Issue Related: I managed to find a copy of a game I was working on for Dragon Basic which used a fully featured external DBC library I made called "Dragon Engine" to make developing games significantly faster. The goal was to abstract out all the lower level stuff and just give the user access to very high-level functionality without having to manage anything themselves. However, I abandoned the effort since there was too many unexplainable stability bugs which I could only attribute to the compiler. To be honest, I'm surprised about how far I was able to take Dragon Basic! :smile:

For fun, I posted a copy of my build here, so you can see how far I was able to take Dragon Basic with all the odd hacks and strange workarounds necessary to get it somewhat stable. Unfortunately, it doesn't build anymore as I think I abandoned my library mid-refactoring but at least a saved a copy of a working BIN.

https://www.supercom32.net/Personal/Random/IrritatingPuzzle.zip