Format of KEYB internal data:
Offset Size Description )
00h DWORD original INT 09
04h DWORD original INT 2F
08h DWORD unused (0) original INT 16 in older KEYB versions???
0Ch WORD flags A (see #02973)
0Eh WORD flags B (see #02974)
10h BYTE flags??? (bit1 used)
11h BYTE ???
12h 4 BYTEs ???
16h 2 BYTEs country ID letters, default is "US"
18h WORD current code page (see #01757 at INT 21/AX=6602h)
---DOS 3.3---
1Ah WORD pointer to first item in list of code page tables???
1Ch WORD pointer to ??? item in list of code page tables
1Eh 2 BYTEs unused???
20h WORD pointer to key translation data (see #02976)
22h WORD pointer to last item in code page table list (see #02975)
24h 9 BYTEs ???
---DOS 4.01---
1Ah 2 BYTEs ???
1Ch WORD pointer to first item in list of code page tables???
1Eh WORD pointer to ??? item in list of code page tables
20h 2 BYTEs unused???
22h WORD pointer to key translation data (see #02976)
24h WORD pointer to last item in code page table list (see #02975)
26h 9 BYTEs ???
---DOS 6.22--- (checked out with 6.22, but might be earlier)
1Ah 2 BYTEs ???
1Ch WORD pointer to current (first???) item in list of code page tables
(corresponding to codepage indicated at offset 18h)
(initial value is FFFFh)
1Eh WORD pointer to (entry to) list of code page tables (see #02975)
If not FFFFh, INT 2F/AX=AD81h scans this list of code page
tables until the requested code page was found in list or
end of table was reached (FFFFh). If found, offsets 18h and
1Ch will be changed to requested new code page. If not found,
it returns with AX=0001h 'code page not supported').
20h WORD unused??? (initial value: FFFFh)
22h WORD pointer to key translation data (see #02455)
24h WORD pointer to last item in code page table list (see #02454)
26h WORD CAPSLock/ShiftLock management flags??? (0)
Note: It appears that none of the bits is ever set inside
KEYBs code!
The following is guesswork:
bit15: =1: With country specific keyboard mapping (<Ctrl>+
<Alt>+<F2>) active, <CapsLock> works as CAPSLock
instead of ShiftLock??? Pressing a key in first row
resets CapsLock???
(Effective only on PC Convertible or with Enhanced
keyboard).
bit14-10: unused (0)
bit 9: =1: With country specific keyboard mapping active:
some kind of temporary (table) shift???
bit 8-0: unused (0)
28h BYTE unused (0)
29h BYTE make code xx for <Ctrl>+<Alt>+<xx> to set keyboard mapping
to US-layout (default is 3Bh=<F1>???)
(see INT 2F/AX=AD82h,INT 2F/AX=AD83h)
2Ah BYTE make code yy for <Ctrl>+<Alt>+<yy> to set keyboard mapping
to country specific layout (default is 3Ch=<F2>???),
(see INT 2F/AX=AD82h,INT 2F/AX=AD83h)
2Bh 16 BYTEs unused (0) ???
Note: at least in MS-DOS v6.22, the signature "SHARED DATA" immediately
precedes this structure