mirror of https://github.com/bsnes-emu/bsnes.git
Update to bsnes v028r11? release.
New WIP up. I was a little too busy to work on bsnes this weekend, but I got some work done tonight. First, I moved the field / interlace / overscan status functions over to the PPU, where they belong. This led me to kill a lot of extra CPU timing variables, such as vblstart and vnmi_trigger_pos. The latter I had to kill because I can no longer call sCPU::update_interrupts() when the PPU changes the overscan setting. You may be wondering about interlace toggle -- well, it can only take effect at the start of a new frame anyway, and the timing for scanline 0 is the same regardless of interlace setting, so it doesn't really need to call update_interrupts() anyway. With this moved back to the PPU, I was able to clean up the PPU functions a bit, too. Before, I had PPU::scanline_is_hires() and CPU::interlace(), and then a function called PPU::get_scanline_info() that would read the previous two functions and copy them into a struct. What an odd construct, I'm sure it was more complex in the past. Cruft, basically. I just killed that, renamed scanline_is_hires to just hires, and now SNES::Video just queries ppu.hires() and ppu.interlace() directly. Much nicer. I didn't lose any speed here, either. I made up the difference by force inlining the PPU states in the bPPU header file. I ran all my IRQ and NMI tests again, I didn't see any regressions. Testing of games that use interlace and overscan, as well as of IRQ- sensitive games, would be appreciated. While cleaning up the PPU, I had some code that would flush the PPU buffer when disabling interlace. I removed that as it looked rather ugly. Don't really have a clean way of handling that. Not like any game out there toggles interlace every frame anyway. I went through and killed a bunch of config file options that don't actually do anything anymore, such as audio.frequency and video.use_vram. Lastly, I rewrote the advanced panel code finally. All options that can be controlled through the UI have been removed. The list is ~80% smaller now. I also improved a lot of the descriptions. I think it looks a lot better now, at least. I went with a blacklist, rather than whitelist. I figure, better to have extra options if I forget to filter them out; than to have missing options if I forget to add them. Before the next release, I'd like to add back default_height() stuff to get the textboxes and buttons smaller on the Windows port. Maybe revert that back to Tahoma 8. I should also add descriptions to the last few advanced panel options missing them. Other than that -- just regression testing, I suppose. I can't break up the PPU enslavement any more without adversely affecting performance at this point. Hmm, would also be nice to rename vcounter / hclock / hcounter to vcounter / hcounter / hdot. Afraid of missing a reference somewhere and screwing up the timing, heh. I tried to get the icon working again on the Windows port. But using LoadImage or CreateIconIndirect doesn't handle the alpha level of bsnes' icon properly. It ends up as a 1-bit transparency that looks terrible in the titlebar, as well as the taskbar. The only way I can get it to look good is with LoadIcon and grabbing the icon from the resource file. The reason I don't want to do this is because it's not at all portable to GTK+. Sigh. Tested this on Win2k, by the way. Win2k isn't supposed to support the alpha channel in icons at all, but it sure the hell does on the taskbar. I even tried GetIconInfo() on the icon returned from LoadIcon(), and then CreateIconIndirect on that, and it crushes the translucency again. So it isn't a problem with the format of hbmMask and hbmColor in my ICONINFO struct. [No archive available]
This commit is contained in:
parent
4d922ba17c
commit
92cfb1268a