You are on page 1of 6

; BIOS Keyboard

;
; Copyright (c)
;
;
include
;
;
DATA
DATA
dgroup
code

forframe.mac

;
;declare:
;
;uses:
;
;
;
;
getkey

INTEGER*2 GETKEY
EXTERNAL GETKEY
I2 = GETKEY()
returns to I2 either ASCII value (0 .. 255) OR
Extended code * 256
consumes keystroke

getkey_out:
ved.'
getkey
;
;declare:
;
;uses:
;
;
;
;
inkey

interface routines for FORTRAN


1986-1997 Kevin G. Rhoads. All rights reserved.

segment
PUBLIC 'DATA' USE16
ends
group
DATA
segment
'CODE' PUBLIC USE16
assume cs:code,ds:dgroup,es:dgroup,ss:dgroup

proc
public
save
mov
int
cmp
je
mov
restore
ret
db

far
getkey
ah,0
16h
al,0
getkey_out
ah,0
'(c) 1986-1993 Kevin G. Rhoads, all rights reser

endp
INTEGER*2 INKEY
EXTERNAL INKEY
I2 = INKEY()
returns to I2 ASCII value (0 .. 255)
Extended code * 256
consumes keystroke
proc
public
save
mov
int
restore
ret
db

PLUS

far
inkey
ah,0
16h

'(c) 1986-1993 Kevin G. Rhoads, all rights reser


ved.'
inkey
endp
;
; RETURNS ONLY SCAN CODE/EXTENDED CODE
;
getscn
proc
far
public
getscn
save
mov
ah,0
int
16h

mov
mov
restore
ret
db
ved.'
getscn
;
;
;declare:
;
;uses:
;
;
;
;
;
g3tkey
getk3y
getkey2

g3tkey_got:
g3tkey_out:
ved.'
g3tkey
;
;
;declare:
;
;uses:
;
;
;
;
;
;
inkey2
inkeynw

inkey2_got

ved.'
inkey2

al,ah
ah,0
'(c) 1986-1993 Kevin G. Rhoads, all rights reser

endp
INTEGER*2 g3tkey
EXTERNAL g3tkey
I2 = g3tkey()
returns to I2 either ASCII value (0 .. 255) OR
Extended code * 256
returns zero (immediately) if no character present
DOES NOT consume keystroke
proc
label
label
public
save
mov
int
jnz
mov
jmp
cmp
je
mov
restore
ret
db

far
far
far
g3tkey,getk3y,getkey2
ah,1
16h
g3tkey_got
ax,0
g3tkey_out
al,0
g3tkey_out
ah,0
'(c) 1986-1993 Kevin G. Rhoads, all rights reser

endp
INTEGER*2 inkey2
EXTERNAL inkey2
I2 = inkey2()
returns to I2 ASCII value (0 .. 255) PLUS
Extended code * 256
returns zero (immediately) if no character present
uses extended keyboard BIOS call
DOES NOT consume keystroke
proc
label
public
save
mov
int
jnz
mov
label
restore
ret
db
endp

far
far
inkey2,inkeynw
ah,1
16h
inkey2_got
ax,0
near
'(c) 1986-1993 Kevin G. Rhoads, all rights reser

;
;
;declare:
;
;uses:
;
;
;
;
getkex

INTEGER*2 getkex
EXTERNAL getkex
I2 = getkex()
returns to I2 either ASCII value (0 .. 255) OR
Extended code * 256
consumes keystroke

proc
far
public
getkex
save
mov
ah,11h
mov
bp,0
add
bp,bp
;force zero flag, if function 11
h not implemented we try 01 next
int
16h
jnz
getkex_got
mov
ah,0
jmp
getkex_old
getkex_got:
mov
ah,10h
;new style calls work, keystroke
waiting
getkex_old:
int
16h
cmp
al,0
je
getkex_out
mov
ah,0
getkex_out:
restore
ret
db
'(c) 1986-1994 Kevin G. Rhoads, all rights reser
ved.'
getkex
endp
;
;
;declare:
INTEGER*2 g3tkex
;
EXTERNAL g3tkex
;uses:
I2 = g3tkex()
;
returns to I2 either ASCII value (0 .. 255) OR
;
Extended code * 256
;
returns zero (immediately) if no character present
;
uses extended keyboard BIOS call
;
DOES NOT consume keystroke
;
g3tkex
proc
far
getk3x
label
far
getkeyx
label
far
public
g3tkex,getk3x,getkeyx
save
mov
ah,11h
int
16h
jnz
g3tkex_got
mov
ax,0
jmp
g3tkex_out
g3tkex_got:
cmp
al,0
je
g3tkex_out
mov
ah,0
g3tkex_out:
restore
ret
db
'(c) 1986-1994 Kevin G. Rhoads, all rights reser
ved.'

g3tkex
;
;
;declare:
;
;uses:
;
;
;
;
;
;
inkex2
inkexnw
inkeyx

inkex2_got

ved.'
inkex2
;
;
;declare:
;
;uses:
;
;
;
;
getkez

endp
INTEGER*2 inkex2
EXTERNAL inkex2
I2 = inkex2()
returns to I2 ASCII value (0 .. 255) PLUS
Extended code * 256
returns zero (immediately) if no character present
uses extended keyboard BIOS call
DOES NOT consume keystroke
proc
label
label
public
save
mov
int
jnz
mov
label
restore
ret
db

far
far
far
inkex2,inkexnw,inkeyx
ah,11h
16h
inkex2_got
ax,0
near
'(c) 1986-1994 Kevin G. Rhoads, all rights reser

endp
INTEGER*2 getkez
EXTERNAL getkez
I2 = getkez()
returns to I2 either ASCII value (0 .. 255) OR
Extended code * 256
consumes keystroke
proc
public
save

far
getkez

getkez_again:
mov
ah,11h
mov
bp,0
add
bp,bp
h not implemented we try 01 next
int
16h
jnz
getkez_got
mov
ah,01h
int
16h
mov
ah,0
jnz
getkez_old
mov
ax,9002h
int
15h
jmp
getkez_again
getkez_got:
mov
ah,10h
waiting
getkez_old:
int
16h
cmp
al,0
je
getkez_out
mov
ah,0

;force zero flag, if function 11

;old style keystroke waiting


;keyboard is waiting ...
;new style calls work, keystroke

getkez_out:
ved.'
getkez
;
;
;declare:
;
;uses:
;
;
;
;
;
;
g3tkez
getk3z
getkeyz

restore
ret
db

'(c) 1986-1994 Kevin G. Rhoads, all rights reser

endp
INTEGER*2 g3tkez
external g3tkez
I2 = g3tkez()
returns to I2 either ASCII value (0 .. 255) OR
Eztended code * 256
returns zero (immediately) if no character present
uses extended keyboard BIOS call first, then regular
DOES NOT consume keystroke

proc
far
label
far
label
far
public
g3tkez,getk3z,getkeyz
save
mov
ah,11h
mov
bp,0
add
bp,bp
;force zero flag, if function 11
h not implemented we try 01 next
int
16h
jnz
g3tkez_got
mov
ah,1
int
16h
jnz
g3tkez_got
mov
ax,0
jmp
g3tkez_out
g3tkez_got:
cmp
al,0
je
g3tkez_out
mov
ah,0
g3tkez_out:
restore
ret
db
'(c) 1986-1994 Kevin G. Rhoads, all rights reser
ved.'
g3tkez
endp
;
;
;declare:
INTEGER*2 inkez2
;
external inkez2
;uses:
I2 = inkez2()
;
returns to I2 ASCII value (0 .. 255) PLUS
;
Extended code * 256
;
returns zero (immediately) if no character present
;
DOES NOT consume keystroke
;
inkez2
proc
far
inkeznw
label
far
inkeyz
label
far
public
inkez2,inkeznw,inkeyz
save
mov
ah,11h
mov
bp,0
add
bp,bp
;force zero flag, if function 11
h not implemented we try 01 next
int
16h

inkez2_got

ved.'
inkez2
;
;
prtscn

ved.'
prtscn
;
;
code

jnz
mov
int
jnz
mov
label
restore
ret
db

inkez2_got
ah,1
16h
inkez2_got
ax,0
near
'(c) 1986-1994 Kevin G. Rhoads, all rights reser

endp
`
proc
public
save
push
push
push
push
push
int
pop
pop
pop
pop
pop
restore
ret
db
endp
ends
end

far
prtscn
ax
bx
cx
dx
es
5
es
dx
cx
bx
ax
'(c) 1986-1993 Kevin G. Rhoads, all rights reser

You might also like