For the assembler extensions I used the IDA Pro disassembler, which makes figuring out this amount of code possible at all. It lets one easily rename labels, make cross references and give names to constants very comfortably, thus slowly creating a more and more complete picture of what's going on. I always compare it to figuring out a 10000 pieces puzzle, maybe pointless but satisfying nonetheless. It also results in interesting insights on the way, there is for example a huge bug in one of the extensions (C_STRG$) that crashes Basic instantly. Not sure how this could go unnoticed for such a long time, the code probably only ever worked when compiled. Anyway, it's fixed in the attached code.
For the Basic code I tried to create a workflow that allows me to do a similar thing, just not as interactively. I created a Perl script that cleans up the code and applies certain translations, guided by a substitution file that I gradually fill the more I understand of the code. It's a bit quick&dirty but still powerful: a line starting with a number adds a REMark at this line number. If the line exists the REMark is appended to the existing line. A line starting with "-" and a number deletes the line. All other lines define substitutions in the form "procFun71531,init_menu_sprites". After adding a few lines I execute the Perl script again and continue to work with the newly created file, slowly making the source more readable. Sometimes variable names go through multiple guesses before a clear picture forms


For QDesign this file contains the reversed names of 154 procedures and 709 variables. It also adds 227 comments. I think the result is pretty cool overall and even seems to work

Thanks to Martin Head for providing the decompiled code, couldn't have done this without it!
Apart from the most immediate bug fixes mentioned above I didn't yet improve anything in the code, that might be for a later time. But maybe this is also interesting for some other parties.
Cheers, Marcel