[Back to KEYBOARD SWAG index] [Back to Main SWAG index] [Original]
{
> Does anyone know how to increase the size of the keyboard buffer? I need
> to be able to pump out more than 16 bytes to the buffer.
This is a resident utility I wrote myself for this purpose.
It has to be loaded in conventional memory (NOT LoadHigh) at an address lower
than $10400, preferrably immediately after Keyb.com.
One warning: there may be programs around (very old XT-programs, or bad
programs), which will try to access the keyboard buffer at it's standard
address $40:$1E. If you use one of these programs, the machine will crash.
}
{*********************************************
* Installs keyboard buffer of any size *
* Usage: bigkey [bufparas] *
* Bufparas: desired size of keyboard buffer *
* in paragraphs (16 bytes) *
* default : 10 <-> 79 chars *
* *
* The size of the resident program will be *
* 96 bytes + buffer size. *
* *
* Horst Kraemer 2:2410/121.16@fidonet.org *
* 30.06.92 *
*********************************************}
program bigkey;
uses
dos;
const
PSPOffset=6;
var
KeyBufTail : word absolute $40:$1A;
KeyBufHead : word absolute $40:$1C;
KeyBufStart : word absolute $40:$80;
KeyBufEnd : word absolute $40:$82;
EnvSeg,Dist,BufParas,Code:word;
procedure usage;
begin
writeln('Usage: bigkey [bufparas]');
writeln('bufparas: size of buffer in paragraphs (>2)');
writeln(' default : 10 <-> 79 chars');
halt(1)
end;
begin
if paramcount>1 then Usage;
if paramcount=0 then
BufParas:=10
else begin
val(paramstr(1),BufParas,Code);
if (Code<>0) or (BufParas<=2) then Usage
end;
Dist:=prefixseg+PSPOffset-$40; {Distance BIOS segment <-> start of buffer}
if Dist+BufParas >= $1000 then begin
writeln('End of buffer not in BIOS segment');
Halt(1)
end
else
writeln('Buffer for ',BufParas*8-1,' characters installed');
Dist:=Dist shl 4; {Offset of buffer relative to BIOS segment}
asm cli end;
KeyBufTail := Dist;
KeyBufHead := Dist;
KeyBufStart := Dist;
KeyBufEnd := Dist + BufParas shl 4;
asm sti end;
{ Free environment and leave only
keyboard buffer in memory
}
swapvectors;
envseg:=memw[prefixseg:$2c];
asm
mov es,envseg
mov ah,49h
int 21h
mov dx,PSPOffset
add dx,BufParas
mov ax,3100h
int 21h
end;
end.
[Back to KEYBOARD SWAG index] [Back to Main SWAG index] [Original]