; more source code at http://www.ahjoe.com/source/srcdown.asp .286 public sendkey, getkey, testkey, buffull, bufempty code segment assume cs:code, ds:code sendkey proc far ; ax=charcode push ax push bx push si push di push ds cmp ah, 0 jnz sendkj0 mov ah, 30h sendkj0: mov bx, 40h mov ds, bx mov di, ds:[1ch] mov bx, di call incptr cmp bx, ds:[1ah] jz fullk mov ds:[di], ax mov ds:[1ch], bx fullk: pop ds pop di pop si pop bx pop ax retf sendkey endp getkey proc far ; out: ; ax=key code ; if buf empty, it will wait push bx push si push ds mov ax, 40h mov ds, ax getkeyrep: mov si, ds:[1ah] cmp si, ds:[1ch] jz getkeyrep mov ax, [si] mov bx, si call incptr mov ds:[1ah], bx pop ds pop si pop bx retf getkey endp testkey proc far ; out: ; zf=1 buff empty; ; zf=0 ax=key code push si push ds mov ax, 40h mov ds, ax mov si, ds:[1ah] mov ax, [si] cmp si, ds:[1ch] pop ds pop si retf testkey endp bufempty proc far ; test key buffer be empty or not ; out: ; zf=0 not empty; zf=1 empty push si push ds mov si, 40h mov ds, si mov si, ds:[1ah] cmp si, ds:[1ch] pop ds pop si retf bufempty endp buffull proc far ; test key buffer be full or not ; out: ; zf=0 not full; zf=1 full push ds push bx mov bx, 40h mov ds, bx mov bx, ds:[1ch] call incptr cmp bx, ds:[1ah] pop bx pop ds retf buffull endp incptr proc near inc bx inc bx cmp bx, 3eh jb incok mov bx, 1eh incok: retn incptr endp decptr proc near dec bx dec bx cmp bx, 1ch ja decok mov bx, 3ch decok: retn decptr endp code ends end sendkey