@Vanders said:Of course the Amiga had the best system ever: every entry point into a library was via. a jump table, so if you wanted to patch a function, you just changed the address of the function in the jump table. You could do monkey patching at runtime. ...except for the few exec.library functions that were "optimized" by squeezing all of their code into the jump table entry. Try to SetFunction() those, and the most likely outcome was the friendly Guru Meditation box. You could still monkey-patch them by hand, of course, but that required copying the full six-byte jump table entry, rather than just the four-byte address.(Indirect addressing? Who wants that? The Amiga library jump tables contained actual executable jmp.l instructions: two bytes for the instruction and four for the 32-bit address. This meant that, i your library function could be implemented in four bytes of 68k assembly, and if you were crazy enough to do it, you could squeeze it into the jump table entry itself and still have two bytes left over for an rts, allowing you to save several clock cycles per call.) I'm not sure what it tells about me that I still remember all that after nearly 20 years. I think I even still have the RKRMs somewhere up it the attic.