Hello, Guest the thread was viewed1.3k times and contains 11 replies

last post from dddaaannn at the

Color mit Werten größer 15 und der Cursor geht hopps.

  • This is a core issue fixed by this pull request: https://github.com/MEGA65/mega65-core/pull/716

    I don't really understand that. How can this be a problem with the core?


    The Xemu emulator does not use the core. Up to ROM 920377 it works fine and with the newer ROM 920385 it doesn't work anymore. Something must have changed in the ROM, because Xemu doesn't use the core. :gruebel

  • Sorry, I jumped to a conclusion here. The issue fixed by the core change is the cursor "disappearing" for colors 8-15, which is caused by a broken implementation of character attributes.


    This issue is reporting a behavior where the cursor specifically (not characters in general) doesn't render the upper palette reverse attribute correctly during cursor blink. This is a ROM bug from the screen editor rewrite. I'll reopen and look into it.


    Thanks! Sorry for the confusion.

  • OK, my previous explanation is still accurate: the core change is meant to fix this issue. Character attribute combination misbehavior is one of several fixes to VIC-III bugs. Xemu needs to be updated with the character attribute fix. (I still need to put this change behind the VIC-III compatibility flag, so C65 prototype ROMs get the legacy behavior. I'll make sure this happens before the next release.)


    This is only visible in newer ROMs because a recent revision changed the way the cursor is rendered. The old behavior used reverse character screen codes for the cursor blink. The new behavior uses the reverse character attribute. The legacy attribute behavior is incapable of rendering both the reverse attribute and the "bold" upper palette attribute at the same time, so the cursor's reverse state appears the same as its normal state (i.e. the cursor is not visible).

  • Thanks for your explanations! :thumbup:

    ... the core change is meant to fix this issue.

    The "issue" arose only because there were changes in the new ROM. Up to the 920377 it worked.


    It is of course your business and decision as a team member, but I would not make changes in the ROM that necessarily also require a change in the core or otherwise misbehave with an older core or current emulator version. For this, I think the advantages that you want to achieve are too "minor" to even expect new versions of the emulator mandatory. Besides, one should also make sure that the older ROMs continue to work correctly with the new versions.


    But that's just my personal opinion. ;)

  • I disagree in one respect: The MEGA65 platform consists of the core and ROM (and system software), and if we're going to make any progress on fixing bugs and finishing unfinished features, we need to be able to fix bugs that depend on changes across components. It is not a goal of the project for all versions of the ROM to work with all versions of the core—at least not until platform version 1.0. I can already tell you that the ROM in the upcoming v0.96 release will have a hard dependency on the v0.96 core. I'm personally excited about the change that this will enable and I hope others will be excited too!


    That said, I agree with you in this specific case, and I'm going to fix it. :D The ROM change to the cursor rendering behavior was a nice idea, and it'd be fine if the character attributes worked the way the change expected they did, but they don't work that way. We will change the core to fix the character attributes (this is an "unfinished feature" that we're "finishing"), but that change will be behind a compatibility register, and backwards compatibility (no change) will be the default.


    The ROM is in the special position of being unable to activate these fixes because it hosts application software, and it should be up to the application whether to flip the flag. We considered isolating the flag setting to direct mode and BASIC (e.g. SYS always resets the flag on entry and sets it on exit, or something like that), but I can't think of a way to do that that's clean and intuitive for programmers. The best choice for this specific case is to roll back the cursor rendering behavior. So that's what I'll do.


    In other words, I agree with you when it comes to core changes that diverge from the C65 prototype, and we're solving that problem with compatibility registers and a ROM compatibility policy similar to what you're suggesting. It just doesn't apply to the entire core, only to those specific behaviors. I hope that makes sense. :)


    It is a goal of the project for the MEGA65 core to remain compatible with the C65 prototype ROM. That's a guiding light for the historical recreation aspect of the project.


    — Dan