Anyone decompile AltairDOS?
- All --
I've run into a reported snag in my Altair32 Emulator relating to handling hardware interrupts. AltairDOS can use hardware interrupts to regain control or exit from running programs. Many emulators (mine included) don't emulate hardware interrupts very well if at all.
I've tried to add interrupts in the emulator to support this, but it doesn't seem to be trapping the interrupts properly from AltairDOS. So, I wondered if anyone has any technical details on AltairDOS or even a decompilation or source file for it so I can see what's going on with the character input routine.
Thanks in advance!
I haven't had any problem with AltairDOS interrupt processing on the Altair Clone, so I don't believe you are running into an issue related to AltairDOS. Here are a few things to check. I'm sure several of these are obvious and you've already done them.
1) A15-A12 must be set properly prior to booting in order to identify the type of serial port in use. AltairDOS adjusts its interrupt routine to check the proper status bits based on these switch settings.
2) Related to item 1, your emulation must accurately simulate the control register and bit positions of the emulated I/O card as AltairDOS will be using and looking at these.
3) During boot, the "INTERRUPTS?" prompt must be answered with a capital "Y". A lower case "y" does not give an error and is interpreted as "N"o.
4) AltairDOS does NOT assume the VI/RTC card. Instead, it expects the serial I/O card is connected directly to the PINT line. In this case, your emulation should respond to the interrupt acknowledge cycle with a RST7 instruction.
- Mike --
This is very helpful. Regarding #1 and #2, if I don't use interrupts, DOS works fine so I'd have to say that the serial part of it works (SIO2 @ 10h, so A12 and A8 are UP).
Regarding #3, I found this out the hard way. That's how I found it was getting stuck after enabling interrupts because I couldn't get past the next configuration question.
#4 I have to look into.
Does the source code to DOS exist somewhere? I've never found it anywhere.
I have not seen a source listing for AltairDOS, but I have disassembled sections of it in the past.
After answering "Y" to interrupts, AltairDOS writes to the 2SIO/6850 to enable receive interrupts. Check your emulation of the 6850 for these steps since these haven't been tested fully when running AltairDOS without interrupts.
If the emulated 6850 1) receives a character, and 2) has receive interrupts enabled, and 3) the 8080 has interrupts enabled, then the next M1 cycle (instruction fetch) should disable interrupts and execute a RST7 instruction instead of fetching the instruction at the PC. That should be just about all there is to it. AltairDOS should just work then.