GideonZ / 1541ultimate

Official GIT archive of 1541 ultimate II sources
GNU General Public License v3.0
178 stars 45 forks source link

Menu option for clearing turbo bits / registers. Possible bug on $D030 status on reset. #153

Open grue74 opened 4 years ago

grue74 commented 4 years ago

Sometimes it would be useful to be able to reset $d030 bit to the default value in the menu.

Like you're watching demo that uses it, reset when it's on. it seems to stay on until you manually clear it.

Shouldn't it clear on reset?

GideonZ commented 4 years ago

The turbo bit in $D030 does not really exist in itself. There are speed registers and speed preference registers. When a '1' is written into $d030, the speed preference registers are copied to the speed registers. The speed registers are reset to 0 (non-turbo) upon reset.

grue74 commented 4 years ago

I made a little test: activate turboenable bit option and set 48Mhz, exit menu and enter basic then make a test program: 10 print"hello! ";:goto 10 observe it being turbo speed. then poke 53296,0 observe it being normal speed. then reset from power button. speed is slow then reset from u64 menu. speed is fast

So there is inconsistency on how turbo speed works. I suggest that default is off when turbo enable bit is activated from the menu. It also gets enabled if you launch .d64's etc from menu, this is troublesome as only some parts of the software uses $d030 control, and if its enabled by default it causes crashes. This could also be yet another option, to choose if turbo is active or not when selecting turboenable bit.

GideonZ commented 4 years ago

OK... this is not good. It seems like there is an issue with writing to D030 when leaving the menu then. Now I am curious... does this happen with Overlay, Freeze or with both user interface options?

grue74 commented 4 years ago

Yes, it happens if I reset on Freeze, overlay, or telnet connection.

Jusalak commented 1 year ago

Interesting issue. $d030 is the register in C128 which enables the 2MHz speed, even in 64 mode. Some programs use 2MHz when the raster is in the lower or upper border area to gain some speed when run on a C128 in 64 mode.

Would it be feasible to add a pseudo-C128 configuration option, so that programs would think that they are running on a C128 on U64 and the 2MHz would be enabled as on a C128? On the surface it would not seem to be too complicated, as far as I know, $d02f and $d030 registers of VICIIe of C128 can be used to detect whether the program is running a C64 or C128 in 64 mode, so would it not suffice to emulate the C128 behaviour in these registers?