>>>> "Brian" == Brian Knittel
<brian at quarterbyte.com> writes:
Brian> Pretty much plug and go. It's very much like a SCSI interface....
Brian> But from the programmer's standpoint, it's very simple. An IO
Brian> command points to a "channel program" which is usually just a
Brian> device command word and a data transfer address. The channel
Brian> takes it from there, and an interrupt is issued when the
Brian> operation is complete (usually).
SCSI is a good analogy.
Some channel programs could be quite hairy. An extreme example is the
boot loader for the 360/44 emulator facility -- that's a chunk of
magic hidden memory and logic that allows the 44 to execute SS
(character/decimal type) instructions. It doesn't natively do that,
so it traps to the emulator, which does the work. So you can run
OS/360 and COBOL or PL/I applications (very slowly).
The emulator is loaded from a card deck, via the "Emulator IPL" button
on the console. The deck is a plain assembler binary deck, exactly as
you could get punched out for any binary, with address and data length
fields on every card.
The channel program is self-modifying; it uses data and command
chaining to read the address and length fields of each card into
another channel word, which then transfers the right number of bytes
to the right place -- repeating until the deck is finished.
Amazing...
paul