[comp.binaries.ibm.pc] v01i181: kbuf_ma, increases keyboard buffer w/asm source

madler@Hamlet.Caltech.Edu (Mark Adler) (03/04/89)

Posting-number: Volume 01, Issue 181
Originally-from: madler@Hamlet.Caltech.Edu (Mark Adler)
Submitted-by: madler@Hamlet.Caltech.Edu (Mark Adler)
Archive-name: kbuf_ma/kbuf_ma.uue

[
This program expands your microcomputer's keyboard buffer to nearly 150
bytes.

An interesting feature is that loading this program multiple times will
expand the buffer more and more.  This is because rather than accessing
the BIOS keyboard buffer directly it invokes the BIOS keyboard software
interrupt to get characters and put them into its own buffer.

Source in assembly language is included.

To distinguish this program from others that sound like "keybuf" and
"kbuf", I appended the author's initials to the archive name.

checksum     size (bytes)  file (between BEGIN--cut and END--cut lines)
    4918         9056      this uuencoded posting

checksum     size (bytes)  file
   10617         6551      kbuf_ma.arc

-- R.D.
]

BEGIN--cut here--cut here
begin 644 kbuf_ma.arc
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
:)9DF,R^2D8UTY",AJ4@.8A`#&-B`;QH`&@!`
`
end
END--cut here--cut here