TXXOS – How To Build An Operating System for IBM 370 Mainframe

Bare Metal Programming on IBM 370

This site is about exploring how to program a IBM 370 Mainframe without the use of any operating system or supervisor program.

It is being published in installments as I get time to add to the project.

You can start at the Beginning or jump to the Table Of Contents.




  1. Great information. I have read it about 3 or 4 times, and now trying to step through each topic, testing the sample code.

    1st ?: Did you use dasdinit to create the 3350 disk?
    May have others as I go, but GREAT information.
    Thank You
    Tom C

  2. This is a really nice piece of work, Tommy….thanks for sharing it.

    I have a question that is a bit off-topic, but does involve bare metal i/o…when I was at Chevron Geophysical here in Houston back in the 80’s we had an assembler routine that could read 9-trk tapes of seismic data that had extremely long block sizes; much bigger than MVS could support at he time (>> 32K or 64K).

    I’d like to find a (or write my own) routine like that for use in the CMS environment. Would that be possible?

    Thanks again.


    • I have spoken with people who have done this but I have not ever had the opportunity. There was some trick in channel programming that allowed very large blocks to be read. I don’t remember the details but if I were to guess I would think you might start with data chaining. There may well be some additional issues and I really don’t know anything about VM/CMS and what might need to be done there. You might ask around on an IBM forum and find someone who has the answer. This was not a very common problem outside the seismic world where tapes were created that effectively had only one block on the entire tape.

  3. I did paper tape emulated on a tape drive, we read 1 byte records and there was no Inter record gap it read to the end of what they called the end of take in the Newspaper industry, printers a a funny lot of fellows, got there own jargon

Leave a Reply

Your email address will not be published. Required fields are marked *