Maybe get a hold of this Jonathan Walters chappy. He claims to have got Classic running on a G5 under Leopard already, although what "work" actually means in this context isn't exactly clear. This came from the Action Retro account on Youtube. View attachment 1932604
Let's try to get ahold on him. If he is telling the truth and is able to get classic to work on Leopard, that would be great. If he isn't, we just got to keep on trying.
i believe it would work if you patched in the needed symbols to leopard's binary, as i mentioned in my other post. people have been doing similar stuff to old windows versions for many many years (people were making wrappers like this for windows 2000 as far back as 2005 or so)
i believe it would work if you patched in the needed symbols to leopard's binary, as i mentioned in my other post. people have been doing similar stuff to old windows versions for many many years (people were making wrappers like this for windows 2000 as far back as 2005 or so)
I agree with you, but there is difference between the windows world and Mac world.. I don't think its out of question, just someone needs to test it. Tell me what needed symbols are needed.
It is not just the SYMBOLS, but the Apple private entry points providing specific services to the Classic environment. These might link all the way to kernel services.
I suspect they became tedious to maintain and not worth the effort.
That's probably why I'm so hung up on it. It might be more feasible to reimplement Classic from the ground up. Perhaps adding some features back that Classic removed like, perhaps, a proper desktop/fullscreen mode?
It's been an age, but I once hacked a PowerPC app (out of necessity as I didn't bring the CD for a game of mine on some stupid vacation I was dragged into as a kid so I hacked the game to bypass the protection check), and I remember it as being trivial. I mean so trivial that I had previously not known how to use gdb or assembly and figured it out in maybe an hour. Every such check (or a cluster of checks which is likely here) will boil down to a branch if equal or branch of not equal which, IIRC (it's been decades), meant flipping a 0x40 to 0x41 or visa versa in POWER machine code.
I don't have a PowerPC based Mac but suggesting a fix will require source code strikes me as premature, especially since these days hackers not only have disassemblers but full blown decompilers.
It's been an age, but I once hacked a PowerPC app (out of necessity as I didn't bring the CD for a game of mine on some stupid vacation I was dragged into as a kid so I hacked the game to bypass the protection check), and I remember it as being trivial. I mean so trivial that I had previously not known how to use gdb or assembly and figured it out in maybe an hour. Every such check (or a cluster of checks which is likely here) will boil down to a branch if equal or branch of not equal which, IIRC (it's been decades), meant flipping a 0x40 to 0x41 or visa versa in POWER machine code.
I don't have a PowerPC based Mac but suggesting a fix will require source code strikes me as premature, especially since these days hackers not only have disassemblers but full blown decompilers.
There is a gigantic difference between bypassing a CD check and tweaking a core part of one version of an operating system to work in another version, and it's not as simple as flipping a few bits around.
The Classic component makes many, many calls to core OS frameworks-- some of which are very different and maybe even nonexistent in a different version of the Mac OS. That's not to say that source code would be required, but it would be a monumental-- perhaps even unimagineable task without it.
The Classic component makes many, many calls to core OS frameworks-- some of which are very different and maybe even nonexistent in a different version of the Mac OS.
More specifically, it's looking for several special symbols in the ApplicationServices binary that it can't find, because the one that shipped with Leopard doesn't contain them.
I managed to run classic in the development versions (beta versions) of leopard, I believe it is possible to play with exchanging files with the beta version, but unfortunately I can't do that because I only have notebooks, and that would require a desktop with a second hd to not be extremely laborious and tedious .
Few month ago i try to reverse frameworks. Globally all classic-environment specific functions are replaced with stripped down versions, stubs which does nothing, or unconditionally signales about failure, few are removed completely. At least CoreGraphics dependency (partially) must be reimplemented, because of it communicates with WindowServer and some things are not implemented at WindowServer side. WindowServer cant be simply replaced at runtime like libraries. Other required frameworks, i thnik, can be replaced at app-level with older versions from Tiger.
With few hacks and stubs (which return success) im able to run and debug TruBlueEnvironmet, it even does something. I not found how exactly app launching are works inside it, so it still useless, but works.
Classic Startup crashes somewhere inside AE framework, even with replaced with older version around at some place.
C:
#include <stdio.h>
#include <mach/port.h>
/* --------- Bindings to ApplicationServices --------- */
struct CPSConnection;
typedef struct CPSConnection CPSConnection;
extern int _CPSGetCurrentProcess (CPSConnection *c);
// while present it are non accessable?
// it is just a wrapper to a Mach Port RPC, so it can be regenerated?
//extern int _CGSCheckInNewProcess (mach_port_t port, TODO...);
/* --------- Wrapper Impementations --------- */
int CPSGetCurrentProcess (CPSConnection *c) {
fprintf(stderr, "Wrapped CPSGetCurrentProcess!\n");
fflush(stderr);
int res = _CPSGetCurrentProcess(c);
return res == -600 ? 0 : res;
}
// task --- ???
// c --- connection
// copyFlag --- ???
// name --- buffer for name
// nameSize --- size for name buffer, strlen(name)+1.
// type_id --- file type (TruBlueEnvironment pass "APPL")
// creator_id --- ??? (TruBlueEnvironment pass "bbox")
// out1 --- ???
// out2 --- ???
// out3 --- ???
// out4 --- ???
int CPSRegisterChild (void *task, CPSConnection *c, int copyFlag, int flags, char *name, int nameSize, int type_id, int creator_id, void **out1, void **out2, void **out3, void **out4) {
fprintf(stderr, "Wrapped CPSRegisterChild! name=%s\n", name);
fflush(stderr);
*out1 = (void*) 1000;
*out2 = (void*) 2000;
*out3 = (void*) 3000;
*out4 = (void*) 4000;
// TODO
// _CGSCheckInNewProcess
// TODO
return 0;
// return 1006;
}
int CPSIsClassicRunningInAnySession (void **data) {
int res = 1003;
*data = NULL;
return res;
}
Code:
# skip installation of exception handler which brokes gdb
# note: this addresses are specific to latest Tiger TruBlueEnvironment
tbreak *0x5e006b20
command 1
jump *0x5e006b2c
end
Few month ago i try to reverse frameworks. Globally all classic-environment specific functions are replaced with stripped down versions, stubs which does nothing, or unconditionally signales about failure, few are removed completely. At least CoreGraphics dependency (partially) must be reimplemented, because of it communicates with WindowServer and some things are not implemented at WindowServer side. WindowServer cant be simply replaced at runtime like libraries. Other required frameworks, i thnik, can be replaced at app-level with older versions from Tiger.
With few hacks and stubs (which return success) im able to run and debug TruBlueEnvironmet, it even does something. I not found how exactly app launching are works inside it, so it still useless, but works.
Classic Startup crashes somewhere inside AE framework, even with replaced with older version around at some place.
C:
#include <stdio.h>
#include <mach/port.h>
/* --------- Bindings to ApplicationServices --------- */
struct CPSConnection;
typedef struct CPSConnection CPSConnection;
extern int _CPSGetCurrentProcess (CPSConnection *c);
// while present it are non accessable?
// it is just a wrapper to a Mach Port RPC, so it can be regenerated?
//extern int _CGSCheckInNewProcess (mach_port_t port, TODO...);
/* --------- Wrapper Impementations --------- */
int CPSGetCurrentProcess (CPSConnection *c) {
fprintf(stderr, "Wrapped CPSGetCurrentProcess!\n");
fflush(stderr);
int res = _CPSGetCurrentProcess(c);
return res == -600 ? 0 : res;
}
// task --- ???
// c --- connection
// copyFlag --- ???
// name --- buffer for name
// nameSize --- size for name buffer, strlen(name)+1.
// type_id --- file type (TruBlueEnvironment pass "APPL")
// creator_id --- ??? (TruBlueEnvironment pass "bbox")
// out1 --- ???
// out2 --- ???
// out3 --- ???
// out4 --- ???
int CPSRegisterChild (void *task, CPSConnection *c, int copyFlag, int flags, char *name, int nameSize, int type_id, int creator_id, void **out1, void **out2, void **out3, void **out4) {
fprintf(stderr, "Wrapped CPSRegisterChild! name=%s\n", name);
fflush(stderr);
*out1 = (void*) 1000;
*out2 = (void*) 2000;
*out3 = (void*) 3000;
*out4 = (void*) 4000;
// TODO
// _CGSCheckInNewProcess
// TODO
return 0;
// return 1006;
}
int CPSIsClassicRunningInAnySession (void **data) {
int res = 1003;
*data = NULL;
return res;
}
Code:
# skip installation of exception handler which brokes gdb
# note: this addresses are specific to latest Tiger TruBlueEnvironment
tbreak *0x5e006b20
command 1
jump *0x5e006b2c
end
Great to see some progress on this. You mentioned you couldn't download and check , I simply created an account and was able to download without issues. Let me know if you still have issues downloading the file.
I managed to run classic in the development versions (beta versions) of leopard, I believe it is possible to play with exchanging files with the beta version, but unfortunately I can't do that because I only have notebooks, and that would require a desktop with a second hd to not be extremely laborious and tedious .
To bring back a thread that had some activity - I was recently looking into this myself and I saw that one of the Beta Builds of Leopard, plus this patch would allow Classic Environment to work.
I am trying to run an OS 9 Application on my Power Macintosh G5 Quad.
Maybe one of you guys with more insight would be able to make it work.
Article on Patched Version to Run Classic on OS X 10.5 Leopard:
Not sure if it has anything that can be utilized merged into the last 10.5.8 or into Sorbet Leopard so this works. That would be great to get this to work in 10.5 - that I won't have to run to my G4 or rely on Sheep Shaver, which doesn't run everything.
Keep me posted if this helps - I'd be great if we can get this running after all these years. Thanks.
To bring back a thread that had some activity - I was recently looking into this myself and I saw that one of the Beta Builds of Leopard, plus this patch would allow Classic Environment to work.
I am trying to run an OS 9 Application on my Power Macintosh G5 Quad.
Maybe one of you guys with more insight would be able to make it work.
Article on Patched Version to Run Classic on OS X 10.5 Leopard:
Not sure if it has anything that can be utilized merged into the last 10.5.8 or into Sorbet Leopard so this works. That would be great to get this to work in 10.5 - that I won't have to run to my G4 or rely on Sheep Shaver, which doesn't run everything.
Keep me posted if this helps - I'd be great if we can get this running after all these years. Thanks.
Did this ever make any progress? I've got an iBook I'm upgrading and would like a few OSes to play with. I'd love a Sorbet/Classic combo if it ever gets figured out.