sic@ritcsh.UUCP (Eric A. Neulight) (08/28/88)
[ Yet another type-ahead buffer expansion program. This is a shar archive that yields the assembly language source and a uuencoded executable. Received via path uunet!ccicpg!cci632!ritcsh!sic. -- R.D. ] "256keys" is a little program I whipped up when I got tired of the PC beeping at me just because I type faster than it thinks. It creates a 256 key type-ahead buffer. I have found it to work on just about every generic PC. I do not think I need to profess the utility of a nice keyboard type-ahead buffer. If you examine the assembler source which I have included, you will see that there is nothing esoteric or mystical here. BIOS keeps keyboard FIFO pointers in its data segment (0040h). All that the program does is take memory for a larger FIFO buffer, and if it is allocated within segment 0040h (addressable by BIOS key routines), it initializes new BIOS key buffer pointers, and "terminates and stays resident". 256keys.com is uuencoded. Just uudecode it, and run it. It will attempt to install itself. As it says in the program comments, your best bet for having it install successfully at seg 40h is to run it as the first program upon booting the machine. If it cannot install at seg 40h, it will tell you. If it is already installed, it will tell you. If for some reason you wish to compile your own (maybe the uuencoded file got munched, or god forbid you don't have uudecode), do the following: masm 256keys; link 256keys; exe2bin 256keys; del 256keys.exe rename 256keys.bin 256keys.com Happy Hacking! (what else can you do with an (ack) Intel Processor) (and don't mind the copyright notice, that's just hype.) ============================================================================== CLAIMER: Well -- I wrote it! Eric Alan Neulight "INSANITY is just a state of mine." Electrical Engineering "Nothing is Impossible -- Just Impractical." Computer Science House Rochester Institute of Technology BITNET: EAN4762@RITVAX UUCP: ...!rutgers!rochester!ritcv!ritcsh!sic ============================================================================== #--------------------------------CUT HERE------------------------------------- #! /bin/sh # # This is a shell archive. Save this into a file, edit it # and delete all lines above this comment. Then give this # file to sh by executing the command "sh file". The files # will be extracted into the current directory owned by # you with default permissions. # # The files contained herein are: # # -rw------- 1 root root 4578 Aug 15 18:44 256keys.asm # -rw------- 1 root root 1064 Aug 15 18:44 256keys.uu # echo 'x - 256keys.asm' if test -f 256keys.asm; then echo 'shar: not overwriting 256keys.asm'; else sed 's/^X//' << '________This_Is_The_END________' > 256keys.asm X;=============================================================================; X;+---------------------------------------------------------------------------+; X;| |; X;| 256keys.asm -- 256 key typeahead buffer for IBM compatible BIOS. |; X;| |; X;| Created by: Eric A. Neulight 3417 Birch Circle |; X;| Creation Date: July 8, 1987 Allentown, PA |; X;| |; X;| (c) 1987 All Rights Reserved |; X;+---------------------------------------------------------------------------+; X;| Revision History |; X;| |; X;| Revisions End |; X;+---------------------------------------------------------------------------+; X;| Notes: |; X;| 1. This module was created to be run as a .com file. |; X;| Be sure to run exe2bin after compiling and linking. |; X;+---------------------------------------------------------------------------+; X;=============================================================================; X name keys256 X X;=============================================================================; XKEYS256_CODE segment word public 'CODE' X assume cs:KEYS256_CODE X X;=============================================================================; X;-----------------------------------------------------------------------------; X; This module installs a large typeahead buffer into BIOS, replacing ; X; BIOS' measly 16 key typeahead. The only limitation of this is caused ; X; by BIOS itself, in that the newly allocated buffer must reside within ; X; the BIOS data area, i.e. segment 40h. ; X; ; X; The install module will ensure that the buffer lives within segment 40h. ; X; Most BIOS will allow this. For the greatest chance of successful ; X; installation, and protection against corruption, run this as the first ; X; "terminate and stay resident" program upon booting. ; X;-----------------------------------------------------------------------------; X X;-----------------------------------------------------------------------------; X; .com module must have runnable code at 100h in code segment. ; X;-----------------------------------------------------------------------------; X org 100h Xxinstall: jmp install X X;-----------------------------------------------------------------------------; X; declaration for memory to hold 256 key typeahead fifo. ; X;-----------------------------------------------------------------------------; X even Xkey_buf dw 256 dup (0) X Xprotect: X X X;-----------------------------------------------------------------------------; X; various messages used during installation. ; X;-----------------------------------------------------------------------------; Xresid$ db 0Dh,0Ah,'256 Key Buffer Is Now Installed',0Dh,0Ah,'$' Xnores$ db 0Dh,0Ah,'256 Key Buffer Is Already Installed',0Dh,0Ah,'$' Xnomem$ db 0Dh,0Ah,'Cannot Locate 256 Key Buffer At Segment 40h',0Dh,0Ah,'$' X X X;-----------------------------------------------------------------------------; X; installation routine. X;-----------------------------------------------------------------------------; Xinstall: X mov ax,40h X mov ds,ax ;address bios data area. X cmp word ptr ds:[80h],1eh ;already installed? X jnz exit ;jump if installed. X X mov ax,cs ;check addressability. X sub ax,40h ;must be able to locate X cmp ax,0FE0h ; within segment 0040h. X ja exit1 ;jump if cannot locate. X mov cl,4 X shl ax,cl X add ax,offset key_buf X jc exit1 ;jump if cannot locate. X cmp ax,0FE00h ;enough room for buffer? X ja exit1 ;jump if cannot locate. X X cli ;able to locate. X mov ds:[1Ah],ax ;install new fifo head ptr. X mov ds:[1Ch],ax ;install new fifo tail ptr. X mov ds:[80h],ax ;install new buf bottom ptr. X add ax,256*2 ;calculate buffer top. X mov ds:[82h],ax ;install new buf top ptr. X sti X X mov ah,9 X mov dx,cs X mov ds,dx X mov dx,offset resid$ X int 21h ;display success message. X X mov dx,offset protect ;terminate and stay resident X int 27h X Xexit: mov ah,9 X mov dx,cs X mov ds,dx X mov dx,offset nores$ X int 21h ;display already installed. X jmp short termin X Xexit1: mov ah,9 X mov dx,cs X mov ds,dx X mov dx,offset nomem$ X int 21h ;display cannot locate. X Xtermin: mov ax,4C00h X int 21h ;terminate normally X X;=============================================================================; XKEYS256_code ends X X;=============================================================================; X end xinstall ________This_Is_The_END________ if test `wc -l < 256keys.asm` -ne 119; then echo 'shar: 256keys.asm was damaged during transit (should have been 119 bytes)' fi fi ; : end of overwriting check echo 'x - 256keys.uu' if test -f 256keys.uu; then echo 'shar: not overwriting 256keys.uu'; else sed 's/^X//' << '________This_Is_The_END________' > 256keys.uu Xbegin 644 256keys.com XMZ7T"D```````````````````````````````````````````````````````K XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````#0HR-38@2V5Y($)U9F9E<B!)<R!.;W<@5 XM26YS=&%L;&5D#0HD#0HR-38@2V5Y($)U9F9E<B!)<R!!;')E861Y($EN<W1A' XM;&QE9`T*)`T*0V%N;F]T($QO8V%T92`R-38@2V5Y($)U9F9E<B!!="!396=MQ XM96YT(#0P:`T*)+A``([8@SZ``!YU.8S(+4``/>`/=SRQ!-/@!00!<C,]`/YW@ XM+OJC&@"C'`"C@``%``*C@@#[M`F,RH[:N@0#S2&Z!`/-)[0)C,J.VKHH`\TAE X2ZPNT"8S*CMJZ4`/-(;@`3,TA^ X`` Xend ________This_Is_The_END________ if test `wc -l < 256keys.uu` -ne 20; then echo 'shar: 256keys.uu was damaged during transit (should have been 20 bytes)' fi fi ; : end of overwriting check exit 0