The IBM XT 8088 comes with something called "ROM BASIC", however I couldn't seem to access it via MS-DOS. [Note: Source code now available, see comment below]
Initially, it seemed to be inaccessible unless you are willing to remove the harddrive and reboot. So I set out on a mission; I wanted to access it from within MS-DOS! The value of all this? Weeeell... Hey, it's a challenge.
I read up on the specific interrupt you need to trigger ROM BASIC, and it is INT 18h.
However, it's not as easy as that. I started up DEBUG, punched a few assembly instructions so I could trigger INT 18h. It responded, and sure enough I got ROM BASIC. Unfortunately, the keyboard input was not working at all!
I consulted some friendly peeps at comp.lang.asm.x86 and they told me the whole IVT (interrupt vector table) had to be replaced with the one present before MS-DOS replaces it with its own IVT. In other words, I needed the default BIOS IVT table, otherwise I would be calling the DOS keyboard interrupt routines instead of the BIOS keyboard routines.
I temporarily removed the harddrive, and started the computer so that ROM BASIC came up. I then wrote a little BASIC program to dump the entire IVT contents as hexadecimal codes to screen. 100 at a time. Just enough so that I could take a photograph of each screen. (I don't have any means of connecting the XT to one of my other modern machines!).
Typing it all in on my Mac later, I started to make sense of it, and finally printed it all out, including my prototype 8088 program (yes, on old fashioned paper. And yes, this took way too long and my fingers hurt afterwards). Tricky stuff. I got some friendly advice from the guys in comp.lang.asm.x86 to keep me going further after nearly giving up (Thanks Bob, Rod, Frank!). My knowledge of assembly isn't the greatest so this endeavour forced me to learn a whole LOT.
Some glimpses of my assembly code.
Then, I finally got it to work, with keyboard working - as you can see below!
Ok, hmm, I spent way too much time on this! However, I'm glad it's over and done with now. I think it's cool that there is so much direct access to the hardware and to the memory with these old machines. Perhaps it's time to revive my Amiga now. [PS: Full code will be posted shortly, just need to type it all in]