Category : Assembly Language Source Code
Archive   : ASMDEVEL.ZIP
Filename : SCANKEY.ASM
;SCAN CODE ASND ASCII OF ANY KEY
;***********************************************************************
CSEG SEGMENT PARA PUBLIC 'CODE'
;-----------------------------------------------------------------------
ASSUME CS:CSEG
ORG 100H
SCAN PROC FAR
AGAIN: MOV AH,0 ;READ CHARACTER FUNCT
INT 16H ;KEYBOARD I/O ROM CALL
MOV BX,AX ;MOV AX TO BX
CALL BINIHEX ;PRINT SCAN CODE AND CHARACTER
JMP AGAIN ;DO IT AGAIN
INT 20H ;RETURN TO DOS
SCAN ENDP ;END OF MAIN
;DATA SEGMENT
QUOTE DB '".$'
NOASC DB ' ===> No ASCII conversion for this key.$'
YESASC DB ' ===> ASCII conversion is "$'
;-----------------------------------------------------------------------
BINIHEX PROC NEAR
;SUBROUTINE TO CONVERT BINARY NUMBER IN BX
; TO HEX ON CONSOLE SCREEN
;ALSO ADDED MODIFICATION TO PRINT ASCII
; OF VALUE IF THERE IS ONE
MOV DL,0DH ;CARRIAGE RETURN
MOV AH,02H ;DISPLAY OUTPUT FUNCTION
INT 21H ;CALL DOS
MOV DL,0AH ;LINEFEED
MOV AH,02H ;DISPLAY OUTPUT FUNCTION
MOV CH,4 ;NUMBER OF DIGITS
ROTATE: MOV CL,4 ;SET COUNT TO 4 BITS
ROL BX,CL ;LEFT DIGIT TO RIGHT
MOV AL,BL ;MOVE TO AL
AND AL,0FH ;MASK OFF LEFT DIGIT
ADD AL,30H ;CONVERT HEX TO ASCII
CMP AL,3AH ;IS IT > 9 ?
JL PRINTIT ;JUMP IF DIGIT =0 TO 9
ADD AL,7H ;DIGIT IS A TO F
PRINTIT:
MOV DL,AL ;PUT ASCII CHARACTER IN DL
MOV AH,02H ;DISPLAY OUTPUT FUNCT
INT 21H ;CALL DOS
DEC CH ;DECREMENT COUNTER
CMP CH,02H ;2 DIGITS YET?
JZ SPACE ;NO, DON'T PRINT A SPACE
CMP CH,00H ;DON ALL 4 DIGITS?
JNZ ROTATE
SPACE: MOV DL,20H ;SPACE CHARACTER
MOV AH,02H ;DISPLAY OUTPUT FUNCTION
INT 21H ;CALL DOS
CMP CH,00H ;DONE ALL 4 DIGITS?
JNZ ROTATE ;ANOTHER
CMP BL,00H ;IF ASCII CONVERSION
JNZ ASCII ; GOTO ASCII
MOV DX,OFFSET NOASC ;MESSAGE TEXT
MOV AH,09H ;PSTRING FUNCT
INT 21H ;CALL DOS
JMP SKIP ;NO ASCII CODE
ASCII: MOV DX,OFFSET YESASC
MOV AH,09H
INT 21H
MOV DL,BL ;PUT TRUE ASCII CHARACTER IN DL
MOV AH,02H ;DISPLAY OUTPUT FUNCTION
INT 21H ;CALL DOS
MOV DX,OFFSET QUOTE
MOV AH,09H
INT 21H
SKIP: MOV DL,0DH ;CARRIAGE RETURN
MOV AH,02H ;DISPLAY OUTPUT FUNCTION
INT 21H ;CALL DOS
MOV DL,0AH ;LINEFEED
MOV AH,02H ;DISPLAY OUTPUT FUNCTION
INT 21H ;CALL DOS
RET ;RETURN FROM THIS SUBROUTINE
BINIHEX ENDP
;-----------------------------------------------------------------------
CSEG ENDS ;END OF CODE SEGMENT
;***********************************************************************
END AGAIN ;END OF ASSEMBLY
Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!
This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.
But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/