Nice work on the palette and particle functions! The colors are now more vibrant.
I found a dosbox-x debugger which corresponds one-to-one with source code, in addition to the alternative "ykhwong dosbox" debugger which is available inside his latest archive here.
Also, on the qdos effort, I think it's possible that there is a page fault, but that the hard lock of the video screen is overlaying the message. It may be possible to disable the 3dfx video so that the text message is seen. However, a simpler way may be the dosbox debugger and the gdb tool with a debug enabled qdos.
When the program locks or otherwise, the alt-pause combo (dosbox debugger) will stop qdos from running. The debugger window should then show the current eip address while some other keypress steps backwards through prior eip address values. Those eip values can then be used against the gdb tool to find the functions in qdos before and at the time of the hard lock. This is the gdb command for this: x/i eip-value. Part of this is a summary of the last paragraph here: http://www.delorie.com/djgpp/v2faq/faq12_2.html.
Perhaps this faq has a better method for the last part: assuming that the EIP value is NNNNNNNN, type this at the GDB prompt: list *0xNNNNNNNN
You may have already considered this or solved the issue, but hopefully this is useful.