IBM 5170 Technical Reference page 257

Hide thumbs Also See for 5170:
Table of Contents

Advertisement

TITLE 01/04/84 KEYBOARD BIOS
.LIST
PUBL I C
KEYBOARD
10 1
PUBLIC
KB_INT_l-
­
PUBLIC
K16
0000
CODE
SEGMENT BYTE PUBL I C
EXTRN
ODS:NEAR
EXTRN
START
1:
NEAR
EXTRN
K6: BYTE
EXTRN
K6L: ABS
EXTRN
K7; BYTE
EXTRN
K8: BYTE
EXTRN
K9: BYTE
EXTRN
Kl0; BYTE
EXTRN
Kl':BYTE
EXTRN
K12:BYTE
EXTRN
K13:BYTE
EXTRN
K14:BYTE
EXTRN
K15:BYTE
I NT 16 ---------------------­ ----------------------------------­
K[YBOARD
!
/0
THES[ ROUTINES PROVIDE KEYBOARD SUPPORT
INPUT
(AH)=O
(AH)=l
READ THE NEXT ASCI I CHARACTER STRUCK FROM THE KEYBOARD
RETURN THE RESULT
IN (AL),
SCAN CODE IN (Ali)
SET THE Z FLAG TO I NO I CATE
I F AN ASC I I CHARACTER
I S AVA
I
LABlE
TO BE READ.
(ZFj=l -­ NO CODE AVA I LABLE
(ZF)=O -­ CODE IS AVA I LABLE
IF Zf =
0,
THE NEXT CHARACTER
IN THE BUFFER TO BE READ IS
IN AX,
AND THE ENTRY REMAINS IN THE BUFFER
(AH)=2
RETURN THE CURRENT SH I FT STATUS
IN AL REG I STER
THE BIT SETTINGS FOR THIS CODE ARE INDICATED IN THE
THE EQUATES FOR KBJLAG
OUTPUT
AS NOTED ABOVE,
ONLY AX AND FLAGS CHANGED
ALL REGISTERS RETAINED
ASSUME
CS:CODE,DS;DATA
0000
KEYBOARD
10 1
PROC
;»>
ENTRY POINT FOR ORG OE82EH
0000
FB
5TI­
I NT ERRU PTS BACK ON
0001
1E
PUSH
OS
SAVE CURRENT OS
0002
53
PUSH
BX
SAVE BX TEMPORAR I LY
0003
E8 0000 £
CALL
DDS
ESTABLISH POINTER TO DATA REGION
0006
OA E4
OR
AH,AH
AH=O
0008
74 DB
JL
K1B
ASC
1 I
READ
OOOA
FE CC
DEC
AH
AH=l -
OOOC
74 45
JZ
K2
ASCI I STATUS
000£
FE CC
DEC
AH
AH=2 -
0010
74 67
JZ
K3
SH I FT STATUS
0012
5B
POP
BX
RECOVER REG I SHR
0013
1 F
POP
OS
0014
CF
I RET
I NVALI
0
COMMAND
READ
iHE KEY TO FIGURE OUT WHAT TO DO
0015
8B lE 001A R
K1B:
MOV
BX, BU FFER_HEAO
GET POINTER TO HEAD OF BUFFER
,..-...."
0019
0010
OOlF
3B lE 001C R
75 07
88 9002
eMP
J"
MOV
BX,BUFFER_TAll
KTC
AX,09002H
TEST END OF BUFFER
IF ANYTHING
IN BUFFER DONT DO INTERRUPT
MOVE IN WA I T CODE & TYPE
0022
CD 15
INT
15H
PERFORM OTHER FUNCT I ON
0024
Kl :
ASCI I READ
0024
fB
S1I
INTERRUPTS BACK ON DURING LOOP
0025
90
NOP
ALLOW AN
I NTERRUPT TO OCCUR
0026
fA
K1C:
Cli
INTERRUPTS BACK OFF
0027
88 lE OOlA R
MOV
BX, BUFFER_HEAD
GET POINTER TO HEAD OF BUFFER
0028
3B lE OOlC R
CMP
BX, BUFFER_TAl L
TEST END OF BUFFER
002F
53
PUSH
ax
SAVE ADDRESS
0030
9C
PUSHF
SAVE FLAG
0031
£8
OLi8A
R
CALL
MAKE LED
GO GET MODE IND!CA.TOR DATA BYTE
0034
0038
8A 1 £ 0097 R
32 08
MOV
XOR
BL, KB FLAG 2
BL,AL­
-
GET PREV I OUS BITS
SEE
I F ANY 01 FFERENT
003A
80 E3 07
AND
Bl,07H
ISOLATE INDICATOR BITS
0030
74 04
JZ
K1A
1
F NO CHANGE BYPASS UPDATE
003F
E8 044C R
CALL
SND_LEDl
GO TURN ON MODE
INDICATORS
0042
fA
ell
o
I SABLE
INTERRUPTS
0043
90
K1A:
POPF
RESTORE FLAGS
0044
5B
POP
BX
RESTORE ADDRESS
0045
74
DO
JZ
K1
LOOP UNTIL SOMETHING IN BUFFER
0047
0049
8B 07
£8 C07F R
MOV
CALL
AX,
[ax]
K4
GET SCAN CODE AND ASC I I CODE
MOVE POINTER TO NEXT POSITION
004C
89 1E OOlA R
MOV
BUFFER_HEAD,BX
STORE VALUE
IN VAR I ABLE
0050
5B
POP
BX
RECOVER REGI STER
0051
l f
POP
OS
RECOVER SEGMENT
0052
CF
I RET
RETURN TO CALLER
;---.~-
ASCII
STATUS
0053
K2,
0053
fA
Cli
INTERRUPTS OFF
0054
8B
1E
OOlA R
MOV
BX, BUFFER_HEAD
GET HEAD POINTER
0058
3B lE 001C R
CMP
BX, BUFFER_TAl L
I
F EQUAL (Z=l) THEN NOTHING THERE
OOSC
8B 07
MOV
AX,
[BX]
OOSE
9C
PUSHF
SAVE FLAGS
OoSF
0060
50
E8 048A R
PUSH
CALL
AX
MAKE_LED
SAVE CODE
GO GET
t~ODE
INDICATOR DATA BYTE
0063
8A 1E 0097 R
MOV
BL, KB_FLAG_2
GET
PREVIOUS BITS
0067
32 08
XOR
BL,AL
SEE I F ANY 01 FFERE'lT
0069
80 E3 07
AND
BL,07H
ISOLATE I NO I CATOR BITS
006C
74 03
JZ
SK2
I F NO CHANGE BYPASS UPDATE
~
006E
E8 044c R
CALL
SND_LEDl
GO TURN ON MODE
I NO I CATORS
0071
58
SK2 ;
POP
AX
RESTORE CODE
0072
90
POPF
RESTORE FLAGS
0073
FB
S1l
I
NTERRUPTS BACK ON
0074
5B
POP
BX
RECOVER REGISTER
0075
l f
POP
OS
RECOVER SEGMENT
0076
CA 0002
RET
2
THROW AWAY FLAGS
;.----- SHIFT STATUS
0079
K3:
0079
007C
AD 0017 R
58
MOV
POP
AL,K8 FLAG
BX
-
GET THE SHI FT STATUS FLAGS
RECOVER REG I STER
0070
1F
POP
OS
RECOVER REG I STERS
007E
eF
IRET
RETURN TO CALLER
007F
KEYBOARD_ I 0_1
ENOP
Keyboard 5-115

Hide quick links:

Advertisement

Table of Contents
loading

Table of Contents