libretro / fuse-libretro

A port of the Fuse Unix Spectrum Emulator to libretro
GNU General Public License v3.0
36 stars 47 forks source link

Can't select Pentagon 512K #54

Closed ghost closed 3 years ago

ghost commented 6 years ago

When running .SCL or .TRD files (TR-DOS) it automatically starts Fuse in the Pentagon 128K Model. Because this version of Fuse is so old it doesn't autoboot the files. If I go to the RetroArch menu and choose Pentagon 512K it says it needs content loaded to be able to change it !? You can't do this because when you load a .SCL etc. it automatically changes to Pentagon 128K again !

Autobooting TR-DOS files was introduced into Fuse a long time ago but this version is even older. If you are not going to update it can you at least change the default Model for .SCL and .TRD to Pentagon 512K please ? It has to be the 512K version as this has a built in loader (Gluk) where you can just press Enter twice to load. (In Pentagon 128K model you have to list the contents of the disk and then manually type the file you wan't to load).

leiradel commented 6 years ago

You can't do this because when you load a .SCL etc. it automatically changes to Scorpion again !

Thanks for the report.

Autobooting TR-DOS files was introduced into Fuse a long time ago

You can use the keyboard to load the desired content. Make sure you set the Sinclair Keyboard as the device type in RetroArch's Input Options menu. If you don't have a physical keyboard, use the Select button on the controller to bring the virtual keyboard.

ghost commented 6 years ago

I know you can use the keyboard, but you have to type 'list' to find out what the filename is on the disk and then 'run "nameofgame"'. Imagine trying to do this with a controller for every game ! (or with a keyboard!). In Pentagon 512K mode you can just press Enter twice. Hopefully you can change the default model to Pentagon 512K (for .scl and .trd files) or update the emulator.

ghost commented 6 years ago

I tried changing the last line of this part (in the file fuse/utils.c ) -

case LIBSPECTRUM_CLASS_DISK_TRDOS:

    if( !( machine_current->capabilities &
       LIBSPECTRUM_MACHINE_CAPABILITY_TRDOS_DISK ) &&
        !periph_is_active( PERIPH_TYPE_BETA128 ) ) {
      error = machine_select( LIBSPECTRUM_MACHINE_PENT ); if( error ) break;
    }

To this -

error = machine_select( LIBSPECTRUM_MACHINE_PENT512 ); if( error ) break;

But this didn't seem to work (the GLUCK screen should come up). This is the file part that the Fuse devs changed to default to Scorpion (which is the default in the latest version) instead of Pentagon.

Could you fix this please so that Pentagon 512K is the default for .scl files.

leiradel commented 6 years ago

Sorry, I'm not a Fuse maintainer.

ghost commented 6 years ago

I thought you were the guy that's responsible for the Libretro port ? There is obviously a bug there that's preventing this from working (as well as not being able to change the TRDOS model). I take it you are not going to be updating Fuse then ?

leiradel commented 6 years ago

I thought you were the guy that's responsible for the Libretro port ?

The libretro port is unofficial, changes to Fuse should be directed to the official maintainers.

ghost commented 6 years ago

As you're not interested in updating to the latest version (which would fix this bug) I may as well close this. The Fuse devs changed this to Scorpion as the default a long time ago. I was asking if you could change it as a workaround for this old version.

ghost commented 5 years ago

Pentagon 512K is now the default model selected when running TRDOS files. I might close this.

It would be much better if someone could implement FUSE's new(ish) TRDOS 'Autoboot' feature. Then we could have the default model as Scorpion as this has much closer timing to the original Spectrum. Pentagon plays the games too fast.

https://github.com/libretro/fuse-libretro/issues/27 https://sourceforge.net/p/fuse-emulator/code/5746/

TRDOS games are a great choice for Libretro Fuse because they are just one file, you don't have to worry about multi-loads, most of them have a built in cheat menu, and some include new and alternate loading screen artwork by Andy Green / MAC etc.

Another reason for an update to this old Fuse version ! :)

tomconte commented 3 years ago

I think this issue should now be solved with the update to Fuse 1.6.0, could someone please confirm?

zzedmore commented 3 years ago

Whenever a SCL or TRD file is loaded it automatically selects the Scorpion machine. This is incompatible with some TR-Dos software and has completely different timing. What we could do with is a core option to choose which model will be used when loading SCL and TRD files, Scorpion - Pentagon 128 - Pentagon 512.

leiradel commented 3 years ago

The right fix would be to stop it selecting Scorpion when a SCL or TRD is loaded, and just use whatever machine is currently selected.

tomconte commented 3 years ago

Got it guys, thanks! So I guess I introduced a regression here, it is now selecting the Scorpion (the default in upstream Fuse) instead of Pentagon... I will look at your suggestions to fix.

zzedmore commented 3 years ago

Not really a regression. Scorpion has been the default in standalone Fuse for a long time but it can be changed in the menu. This libretro core has been stuck with the v1 choice many years ago. The three Pentagon models and the Scorpion model in the core options don't actually do anything so probably best to remove them and add a separate option for the model to use when loading SCL and TRD files, if that makes sense.

leiradel commented 3 years ago

There's already a core option to select the machine, add one more machine selection option is just confusing. The core should honor the currently selected machine when loading any kind of content, even if the machine can't use the content, in which case a OSD message can alert the user of the fact.

tomconte commented 3 years ago

So the current code says:

    if( !( machine_current->capabilities &
       LIBSPECTRUM_MACHINE_CAPABILITY_TRDOS_DISK ) &&
        !periph_is_active( PERIPH_TYPE_BETA128 ) ) {
      error = machine_select( LIBSPECTRUM_MACHINE_SCORP ); if( error ) break;
    }

So it looks to me it is only auto-selecting the Scorpion if I have a non-TRDOS machine, right? If I have selected a Pentagon, which is TRDOS-capable, then it should not change to Scorpion, correct?

zzedmore commented 3 years ago

Oh yes, I see what you mean. You can select Pentagon or Scorpion as a model (when loading TAP, TZX etc.) but if you load a TR-DOS image (SCL or TRD) then it always uses the Scorpion model regardless of what's selected in the core options.

tomconte commented 3 years ago

Folks, I just tested this, but I am afraid can't really see the problem. The emulator seems to honor the machine I have selected, i.e. Pentagon 128K or Pentagon 512K, when I load a TRD or SCL file, at least that is what I can see when I step through the code.

EDIT: what does happen, is that if I have not selected a TR-DOS capable machine (e.g. Spectrum 48K), THEN the Scorpion will be forced as the default indeed.

Which ROM could I use to check which type of machine is running? I am using a couple games and they just work, but I can't really see if the emulated machine is really the one I selected...

zzedmore commented 3 years ago

Sorry, you're right. It does work. I tried it with a game that needed a multicolor fix to be selected for Pentagon and it does behave differently when selecting Scorpion.

Another issue that your 1.6.0 update has fixed. Thanks! I guess this can be closed now.