libretro / uae4arm-libretro

Port of uae4arm for libretro (rpi/android)
6 stars 8 forks source link

Support for hdf games. #14

Open Snowbro88 opened 3 years ago

Snowbro88 commented 3 years ago

This emulator is excellent, the fastest available on PS Vita, I suppose it would be difficult but it is possible to support games in hdf format?, since this way the loading times are drastically reduced compared to adf. Thank you.

Chips-fr commented 3 years ago

The code to handle hdf is here, however there is no way to use one from retroarch interface. It should be possible to use them using uae file, but it's quite complex. Does your hdf autoboot ? Majority of hdf seems to not autoboot and needs a boot device. It is sometime hidden by whdload process which is completely absent from this core...

Snowbro88 commented 3 years ago

First of all, I will tell you that I speak Spanish, so sorry for my poor English, now about what you say, I suppose the hdf games that I have require a boot device because in UAE4ALL PS vita they need to insert the hdf and then reset. I am not an expert in what i say, there is another core in retroarch Vita that accepts hdf (PUAE) but does not reach full speed.

Anyway, thanks for the answers and interest and I tell you that this core seems to perform perfectly, it just lacks support for hdf to be 10 of 10.

Chips-fr commented 3 years ago

I have look back in the code and yes it already support hdf. I forgot however to add hdf in the list of supported extensions for uae4arm so you can't load one at the moment :)

You need to wait following request get available in vita: https://github.com/libretro/libretro-super/pull/1500

As said there are limitations: only autoboot hdf is supported. Avoid A500 config since i don't think amiga 500 support majority of autoboot hdf (amiga 600 should be a minimum in order to hdf to boot, perhaps i will enable this in auto mode).

It's uae4all2 ? I think it only support autoboot hdf (or at least you need to provide one) and i don't think it has an integrated mechanism to start non autoboot hdf or whdload images...

Snowbro88 commented 3 years ago

Ok I suppose that the hdf that I use in UAE4ALL2 must be autoboot as you say, so I don't think there are problems in that sense to run them in the core UAE4ARM. I will wait for the core update to test the hdf.

Comment that doing more tests almost all the games work full speed with an Amiga 500 configuration, but those that require the Amiga 1200 such as the AGA chipset suffer a lot in performance.

I hope that with an Amiga 600 configuration most of the non AGA games will run smoothly.

Thank you.

Snowbro88 commented 3 years ago

Well the core has already been updated and now if it recognizes the hdf games, but unfortunately it has the problem that when I load any hdf game with any configuration (A600 or A1200), a c-128 error occurs and retroarch vita closes, I have. confirmed with friends of a forum, then I wonder if this problem could be reviewed or as you mentioned could you leave the A600 configuration by default, thanks

Chips-fr commented 3 years ago

Ok. Since i don't have a vita i have no idea what could be the issue and what does mean this error. rtype did the vita port, @r-type are you still here :) ? So A600 with HDF fails but A600 with adf is working ?

Snowbro88 commented 3 years ago

Yes, as you mentioned, the A600 configuration works for adf but it does not work for hdf and also another problem is that the A1200 configuration does not work in any way for any format.

Regarding the c-128 error, it is a typical error in Vita that occurs almost always when something does not work well, I am not an expert and I don't know exactly what it means, the console creates a file about the error that occurred, if it is useful I can upload it.

I hope r-type can help us, and thank you very much for the reply.

Uukrull commented 3 years ago

I checked the dump and it crashed at https://github.com/libretro/uae4arm-libretro/blob/c3a1e2dcf87507251f401c8311c1e8266e0c2472/libretro/osdep/writelog.cpp#L31

I disabled that code and the recompiled binary now works with .hdf files and whdload :)

A1200 configuration crashes at https://github.com/libretro/uae4arm-libretro/blob/c3a1e2dcf87507251f401c8311c1e8266e0c2472/src/jit/compemu_support.cpp#L3499 so maybe @frangarcj could take a look at the vita code? https://github.com/libretro/uae4arm-libretro/blob/c3a1e2dcf87507251f401c8311c1e8266e0c2472/src/jit/compemu_support.cpp#L190

Chips-fr commented 3 years ago

Thanks a lot for this analysis :) I remember when hdf is accessed a lot of logs get generated, perhaps the vita can't handle too much logs...

I already commented LOGI call in write_log in one of my push so that logs doesn't get forwarded to libretro. Let's see if this pull solve this crash: https://github.com/libretro/uae4arm-libretro/pull/16

If it's not enough whole function can be commented or even WITH_LOGGING switch removed (not sure it's good idea to have it for end-user)

Uukrull commented 3 years ago

Unfortunately, removing LOGI didn't help at all and still crashes at the same spot:

         ID: 0x40030219
        Stop reason: 0x30004 (Data abort exception)
        Status: 0x1 (Running)
        PC: 0x8134d08c (retroarch_vita.elf@1 + 0x2e808c => write_log(char const*, ...) at ??:?)

=== THREAD "" <0x40030219> CRASHED (Data abort exception) ===

DISASSEMBLY AROUND PC: 0x8134d08c (ARM):

812e807c <_Z9write_logPKcz+0x20>:
812e807c:       e2820010        add     r0, r2, #16
812e8080:       e5902000        ldr     r2, [r0]
812e8084:       e2833014        add     r3, r3, #20
812e8088:       e28d0008        add     r0, sp, #8
!!!             e58d3004        str     r3, [sp, #4] !!!
812e8090:       fa049994        blx     8140e6e8 <vsnprintf>
812e8094:       e5940000        ldr     r0, [r4]
812e8098:       e3500000        cmp     r0, #0
Chips-fr commented 3 years ago

Ok. I've disabled the whole function for vita in latest push:

https://github.com/libretro/uae4arm-libretro/pull/16/commits/241461c271cc5f824e942e59b50e66fbf4fe8188

Chips-fr commented 3 years ago

If hdf are working, it's easy to support whdload slave inside lha archive. I already have it working in my view and tested on rpi...

Chips-fr commented 3 years ago

The correction has been merged. It should be available in nightly.

Snowbro88 commented 3 years ago

Thanks friend, I often checked if the change had already been applied, I have already tried it with the nightly of March 1 and now they work perfectly with the hdf format, only the A1200 config does not work for games that require the AGA chipset, but it is a minor detail most important games work with A600 config, some other minor detail is that to change the game at least in PS Vita it is necessary to close and re-run retroarch, or when in Vita you close retroarch after playing with this core uae4arm, causes an error but they are minor details, nothing serious, thank you very much, you are a very accessible dev.

Chips-fr commented 3 years ago

Ok thanks for the feedback. For the A1200 issue we can continue on corresponding issue. I have no idea for the others problems. If you can retrieve debug dump it could help.

PukeGX commented 3 years ago

Hello ! First, thanks for this wonderful core for Vita, it works great with Vita Launcher for example. But I encounter a problem with WHDload games in lha format, and I don't know if I do something wrong or not, so maybe it's an issue.

i use the WHDLoad games by Retroplay in lha format, they should be autoboot, and it's the case with some games, like Turrican, no problem with this, it works wonderfully, but with some games (like Barbarian_v1.1_Palace_1784.lha for example), when booting in UAE4ARM, I got the message Dos-Error #205 on reading "devs:kickstarts/kick34005.a500" in AmigaDOS. But I have the kick in the "system" folder of retroarch, and retroarch said it's present in the core information. With P-UAE core, there is a WHDLoad folder in the "saves" directory of retroarch where we can add files needed, but I don't see an equivalent folder for UAE4ARM.

Is there a solution ? If yes, where should I put the "missing" files ? Can I "install" it ? Or are we stuck for the moment ?

Thanks in advance, and thanks again for your work !

Chips-fr commented 3 years ago

I tried the game you indicate but it use whdcommon:kick34005.a500 instead of devs:kickstats/kick34005.a500 as you... Anyway i think some version of whdload look for kickstart as you indicate. It's more complicated configuration to handle. uae4arm core generate a WHDLoad.hdf . You need to retrieve it then inject the kick34005.a500 inside /devs/kickstarts of this WHDLoad.hdf then put back this hdf inside your vita. There are multiple way to inject file inside .hdf . One is to use winuae, attach this hdf as harddrive, add a workbench in floppy, add a virtual directory which contains kickstart. Then when on workbench, use the shell or gui to copy the kickstarts. There are some tools on windows or linux but never tried them.