Why the Jr needs STACKS=0,0
Posted: Sat Jul 25, 2009 5:54 am
DOS has a few different stacks that it can switch to when handling interrupts. 8088 class machines are slow at switching stacks, so for performance reasons DOS gives you the option (STACKS=0,0) to not switch stacks during an interrupt.
Even with the stack switching turned on, things should just be slower. So what's wrong with the Jr?
Somebody disassembled DOS 5 and figured out that it was hooking the hardware keyboard interrupt. It doesn't do this on a PC or an XT, and it should have avoided it on the Jr as well but the programmer that checked the 'ID' byte assumed that any ID byte that was greater than FE was an AT class system. (Unfortunately, FD is the Jr.)
So there is an alternative to STACKS=0,0 - you can patch the check in DOS that hooks the keyboard interrupt. Probably not worth doing, but that is the technical reason why it works on a PC or XT without STACKS=0,0, but not on the PCjr.
Mike
Even with the stack switching turned on, things should just be slower. So what's wrong with the Jr?
Somebody disassembled DOS 5 and figured out that it was hooking the hardware keyboard interrupt. It doesn't do this on a PC or an XT, and it should have avoided it on the Jr as well but the programmer that checked the 'ID' byte assumed that any ID byte that was greater than FE was an AT class system. (Unfortunately, FD is the Jr.)
So there is an alternative to STACKS=0,0 - you can patch the check in DOS that hooks the keyboard interrupt. Probably not worth doing, but that is the technical reason why it works on a PC or XT without STACKS=0,0, but not on the PCjr.
Mike