Wow, thanks for all the suggestions! Based on what I've heard, I think initially I'll start my code at $2000, and I'll keep my buffer from the end of code to MEMTOP or $A000, depending on how I wrote my original code. I'm guessing I can easily do the calculation and go from there.
As to keyboard handling, using K: seems easy enough.
As to screen handling, I'm not sure yet what to do. Initially I'll try using S: and see where that gets me. TECO doesn't expect much. It was designed to work on dumb terminals, and would work find on a Teletype. My expectation would be that a character out routine would print a character. If it was at the last column of a line or was an end-of-line ($9B?), it would advance to the next line. If it was on the final row, it would scroll the screen. Does this mean I need to write the code to do this? (@dmsc - From your description, maybe the OS does *just* what I need, though slowly. I'll give it a try)
As to IOCB usage, I'm a bit confused about setting them up. At a glance, it appears IOCB0 is already open. Is it always open and set to the S:? Do I need to check if a specific device is open before opening one myself? Do I need to check each IOCB to see if it is in use before I do an open? Sorry, I haven't gotten around to the RTFM part thoroughly yet
FWIW, I tried a simple print character IOCB example from a book, but it didn't work at all. It opened E: on IOCB2 and called CIOV at $E456 to print a string.
I did try using the putchar macro from MADS stdio library, and it worked just fine. I'm guessing it is using the IOCB PUT VECTOR call mentioned by @dmsc?
As to assemblers, I'll probably stick with MADS. My code looks like it will take few mods to work with it. For specifying the start of a program, I assume the "run main" line means the code starts at label main? If so, is this the common approach across assemblers?
Thanks again, everyone. BTW, I thought I had posted this in the programming sub-forum. Apparently not, but it seems to have gotten sufficient attention! Once I've got the basics working, I'll try to remember to post there.