Xbox360 –> Windows Executable Converter (2017)
github.com
github.com
So what you see is some tech demo samples perfectly and maybe a couple of bespoke games working OKish, but then the complexity burden overwhelms the project and it kind of stagnates.
You have a fundamental misunderstanding here. HLE in the style that CXBX does it is not possible for 360 games as every userland library is static linked and LTCG is enabled by default (maybe required for MS cert?) for release builds. Nearly everything is inlined and impossible to replace with calls to matching windows APIs as a result. Xenia and rexdex both emulate the kernel at the syscall level and don't touch userland at all.
> Just going the extra mile and full system emulating pays massive dividends.
Maybe for security research and correctness purposes, it has little practical value for ps3/360 gen emulation and beyond.
Xbox360 –> Windows Executable Converter (2017) https://news.ycombinator.com/item?id=36705223
The Simpsons Hit and Run leaked source code https://news.ycombinator.com/item?id=36703711
PCSX2 is an open source PS2 Emulator https://news.ycombinator.com/item?id=36702084
Xenia: Xbox 360 Emulator https://news.ycombinator.com/item?id=36702731
RPCS3 – Open Source Playstation 3 Emulator https://news.ycombinator.com/item?id=36690498
Considering a new Xbox Series X will play most Xbox 360 discs (or at least the ones you care about), it's not even close to abandonware.
Recompiler: Porting Xbox360 Executables to Windows - https://news.ycombinator.com/item?id=15474393 - Oct 2017 (58 comments)
Maybe I'm too lazy, but that really sounds like something I would let a computer automatically do.
>with “more you might like”
In itself that's a very good feature, it becomes a problem with a host of other patterns to transform discoverability into addiction. Most often these 'bad recommendations' are high engagement content (controversial, or low-value but high attractiveness clickbait) that are purposefully known by the platform to only be tangentially related to the content, if at all.
Even that is surprisingly hard! Hard enough that we had to stop working on it when we realized that it's a startup, or at least a major undertaking, in its own right.
Here's a recent case that would be even harder to automate because it's tracking the same story over quite a long period of time: https://news.ycombinator.com/item?id=36713290.
If anyone knows how to write code to build those sorts of lists, I'd love to know about it! the nice thing is that the relevant data is all public so anyone who wants to work on it can.
Just wanted to thank you for the creativity.
But yeah, it is crazy complex
if (hitByMissile == True) {
lives--;
if (lives == 0) playing = False;
}
; next address is 0x8f02
it might turn into: ld a, (4011h)
jr z, 8f02h
ld a, (4020h)
dec a
ld (4020h), a
jr z, 8f02h
xor a, a
ld (0x4021h), a
; next address is 8f02h
That might disassemble back to C as: if (var4011 != 0) {
var4020--;
if (var4020 == 0) {
var4021 == 0;
}
}
like that. Less readable, because we have no variable names, and not identical to the source code but probably close enough, but the important thing is we don't care if we understand it or not. If we declare a variable that our original code stores at 4020h in a 16-bit address space, but it ends up somewhere wildly different in our 32-bit address space because we're recompiling on a newer machine, we don't care - we just care that the name gets used consistently.If you then read through the disassembled source you could start to piece together what the variables are, though.
The typical code generator for a compiler uses all kinds of boilerplate for common constructs (loops, function calls, data access) and once you know about these you can usually recognize them on sight.
Optimizing compilers can make this quite a bit harder by the way, extra passes that do all kinds of reshuffling to get rid of instructions, to combine them and to move things from memory into registers.
You can usually tell compilers to output assembly code, doing that for a program that you wrote yourself is a good exercise to see how your high level code translates into lower level code. And with optimization off all you see is the code generator's output.
Now, that we've relentlessly squandered all of it, well, that's on us.