Xell-Reloaded Build Compatible With All Consoles, Including Winchester

  • Thread starter Thread starter alexfree
  • Start date Start date
  • Views Views 7,175
  • Replies Replies 25
  • Likes Likes 7
Consulte fazer o Mupen64-360 rodar em um Xbox 360 com placa-mãe Winchester. Aqui está uma explicação gerada pela IA que ajudou a corrigir, juntamente com o link de download dos arquivos XeLL Reloaded e Mupen64-360 corrigidos. Eu mesmo ainda não li a explicação completa, então estou compartilhando-a enquanto a IA a produção.

Este foi basicamente um projeto de codificação de vibração com GPT Codex e Claude, e o resultado pareceu ter sido muito feito. Dito isto, levou muito tempo, dinheiro e perseverança. Também tive que confiar muito no racismo lógico para elaborar o método, decidir o que testar, interpretar os resultados e manter a investigação em andamento. A IA fez grande parte da codificação, mas chegou a um resultado funcional ainda exigiu muitos testes práticos e resolução de problemas.

Também pretendo trabalhar para conservar mais emuladores, até ficar ligado.

The investigation and corrections were carried out with the help of GPT Codex and Claude. Both were used to analyze the source code, interpret logs, identify bugs and develop fixes, query the results were tested directly on the Xbox 360 Winchester.

The problem was not caused by an incompatibility. Wrap the XeLL ELF charger, a USB recovery in libxenon, and the disk mount code used by the Mupen64-360.

In XeLL Reloaded, we first fixed a build order issue in the fork without Alex. The stage2.elf32.gz target removes object files that are still needed for the Stage 1 link, so the build order had to be adjusted. Also restaurants the missing rules file required by the toolset. The change is most important for the elf.ce restaurant elf_run.S before the ELF loader rewrite in May 2020, keeping the libxenon restaurant modern. With this combination, XeLL was finally able to enter the execution to the recompiled Mupen.

Without libxenon, we fixed a null pointer access in qh_end_transfer() that caused the red missing screen with dar=0x3c. We also unblock that USB recovery is resetting port 0 instead of the port where the device is actually connected. In our case, the flash drive was on port 4, not recovery being able to repeatedly reset the wrong port and leave the arming driver present in its retry loop. Both as reset calls have been changed to use the actual device port. Another fix caused ehci_reset_usb_port() to return an error when entering a low-speed port into OHCI, preventing the EHCI code from trying to initialize a port it no longer has. EHCI_TUNE_CERR was also restored from 0 to 3, now this has not been the main cause of the issue.

Mupen64-360 was all rebuilt against the corrected libxenon. This requires locating, compiling, and installing ZLX-Library, libxemit, and ntfs-xenon. Also assets that rebuild and reinstall ZLX depo that an incomplete library caused linker errors involving symbols such as ZLX::Font, ZLX::Browser and ZLX::Console.

The ROM loading freeze ended up having a separate cause. The flash drive was formatted as FAT directly in sector 0, without MBR, a layout commonly called superfloppy. ZLX was selling the 0x55AA subscription and interpreting the FAT boot sector as a participation table. This produces used LBAs, including 0x7265206B, which initially appears to be a USB or SCSI issue. The return effort helped solve the FindPartitions() issue in mount.cpp.

We fixed participation detection so that it checks FAT16 or FAT32 directly in sector 0 before attempting to interpret the sector as an MBR. If a valid FAT file system encounters there, it will be mounted as a participation arriving in sector 0. After this fix, the flash drive was mounted correctly and how ROMs come to load.

There is still a problem when both the flash drive and the external HDD are connected. The TinyEHCI driver detected both devices, but the ZLX was mounted only one USB interface at a time. We added support for mounting environments as interfaces and adjusted the order so that the flash drive remains uda0 and the external HDD becomes udb0. This is important because Mupen looks for your installation at uda0:/mupen64-360/. When the HDD was mounted as uda0, Mupen could no longer find the expected files, which caused problems with the background and ROM loading. With the order corrected, the flash drive continues sending the main device, the HDD is available as additional armament, and a single connected USB device is still mounted as uda0.

The final working version is based on the Mupen64-360 0.992 beta. Version 0.993 beta2 was also investigated, but before video output in Winchester. From what we've observed, it doesn't seem to have many code differences compared to 0.992 beta, so we haven't been performing a full comparison now.

I haven't tested the emulator extensively yet, but so far everything seems to be working perfectly. I tested Castlevania and The Legend of Zelda: Ocarina of Time, and both worked successfully. The XeLL carries the recompiled Mupen64-360 as the ROMs run from the flash drive and the external HDD can remain connected as additional armament.

Thanks for reading!

I updated the download links in my post and added a version with aspect ratio settings in the menu.

I've updated the download again with several audio, stability, and performance fixes:


  • Audio: Fixed resampler issues, improved audio queue/cache handling, and implemented a packet-based audio queue with a persistent resampler and DMA aligned to 2048-byte blocks.
  • Stability: Fixed texture copying issues and a recompiler heap bug.
  • Performance: Added a small CRC optimization and an ABI3/ENVMIXER3 optimization.
  • Additional changes: Removed the experimental profiler and increased the audio queue headroom from 16 KiB to 32 KiB.
 

Attachments

Last edited by fixingthings,
  • Like
Reactions: Vetus_Mundi
Awesome! I will try this out later. Thank you very much!

Could you maybe make it where it doesn't stretch the screen? It's fine for games with widescreen options as well as hacks. Perhaps an option?
 
Last edited by Vetus_Mundi,
Awesome! I will try this out later. Thank you very much!

Could maybe make it where it doesn't stretch the screen? It's fine for widescreen games and hacks. Perhaps an option?
Done! I've updated the download links in my post and added a version with aspect ratio settings in the menu.

Update: I'm still working on the fixes. The aspect ratio adjustment isn't quite right yet. Once I've finished fixing it, I'll come back and edit this post to let you know. The updated download will be available in my previous comment.
 
Last edited by fixingthings,
Awesome, thank you again. Do you have any plans to possibly update the core in the future?

If you do update and use not64 as a base, I should let you know that after the last 2019 version of not64, certain SM64 hacks on longer work, so if you decide to port any of them I would recommend that specific version, though sadly it would lack fixes for games in later versions.

Is there a way to remap buttons? I would like to map N64 B button to Xbox 360 X button. As far as I can tell there isn't a way to remap. Would you mind adding an option? I apologize if I am asking too much and if so, please let me know.

One thing I like better about this port of Mupen64 over the Wii and GC ports is the dynamic recompiler. I will explain:
There is a tool to inject N64 ar/gameshark codes into N64 roms. Some years ago I made a walk through walls code for OOT 1.2. I am not the first though.

Anyway, it is temporarily activated by holding the A button. To get this code to work as intended some emulators/ports require the interpreter core to recompile the newly changed code. It can work on the dynamic recompiler on wii64 and not64 but the A button needs to be held most of the time until in-game. Unfortunately though it will stay active unless a save state is created and the game is reloaded without the A button being held or by switching to the interpreter core.
 
Last edited by Vetus_Mundi,
Awesome, thank you again. Do you have any plans to possibly update the core in the future?

If you do update and use not64 as a base, I should let you know that after the last 2019 version of not64, certain SM64 hacks on longer work, so if you decide to port any of them I would recommend that specific version, though sadly it would lack fixes for games in later versions.

Is there a way to remap buttons? I would like to map N64 B button to Xbox 360 X button. As far as I can tell there isn't a way to remap. Would you mind adding an option? I apologize if I am asking too much and if so, please let me know.

One thing I like better about this port of Mupen64 over the Wii and GC ports is the dynamic recompiler. I will explain:
There is a tool to inject N64 ar/gameshark codes into N64 roms. Some years ago I made a walk through walls code for OOT 1.2. I am not the first though.

Anyway, it is temporally activated by holding the A button. To get this code to work as intended some emulators/ports require the interpreter core to recompile the newly changed code. It can work on the dynamic recompiler on wii64 and not64 but the A button needs to be held most of the time until in-game. Unfortunate though it will stay active unless a save state is created and the game is reloaded without the A button being held or by switching to the interpreter core.
I don't have any plans for that at the moment. I've updated the download link (wait for the admins to approve it) with some new audio, stability, and performance patches. I plan to keep improving the emulator and will probably try to bring dulldc to XeLL on Winchester as well. Tomorrow, I'll try to add a button-mapping option. Stay tuned.
 
  • Like
Reactions: Vetus_Mundi
I don't have any plans for that at the moment. I've updated the download link (wait for the admins to approve it) with some new audio, stability, and performance patches. I plan to keep improving the emulator and will probably try to bring dulldc to XeLL on Winchester as well. Tomorrow, I'll try to add a button-mapping option. Stay tuned.

Great! Thank you again!

Speaking of nulldc, are you planning on adding the updates from the recent Wii port?

(Edit: Now I see the post and the attachment.:))

Edit 2: I noticed the dialog text on Ocarina of Time is now a bit blurrier. Was the framebuffer textures option enabled?
 
Last edited by Vetus_Mundi,

Site & Scene News

Popular threads in this forum