MSX.M-80 2.00 24-Aug-15 PAGE 1 ;***** PRINT KEY CODE IN HEXADECIMAL ***** .Z80 ; Use Zilog codes 000D CR EQU 0DH ; Carriage return 000A LF EQU 0AH ; Line Feed 0005 SYSTEM EQU 0005H ; System call entry 0000' ASEG ; Absolute SEGment ORG 100H ; Set start address ;--- Main routine --- 0100 11 011D LD DE,MSG1 ; Print MSG1 0103 CD 0141 CALL PUTMSG 0106 0E 01 LD C,1 ; [Console Input] 0108 CD 0005 CALL SYSTEM 010B F5 PUSH AF ; Save character 010C 11 012D LD DE,MSG2 ; Print MSG2 010F CD 0141 CALL PUTMSG 0112 F1 POP AF ; Get character 0113 CD 0147 CALL PUTHEX ; Print code in hex 0116 11 013D LD DE,MSG3 ; Print MSG3 0119 CD 0141 CALL PUTMSG 011C C9 RET ; Return to MSX-DOS 011D 0D 0A 49 6E MSG1: DB CR,LF,'Input Char ? $' 0121 70 75 74 20 0125 43 68 61 72 0129 20 3F 20 24 012D 0D 0A 48 65 MSG2: DB CR,LF,'Hex Code = $' 0131 78 20 20 20 0135 43 6F 64 65 0139 20 3D 20 24 013D 68 0D 0A 24 MSG3: DB 'h',CR,LF,'$' ;--- Print message (DE = Pointer) --- 0141 PUTMSG: 0141 0E 09 LD C,9 ; [String output] 0143 CD 0005 CALL SYSTEM 0146 C9 RET ; PUTMSG end ;-- Print accumulator in hexadecimal form --- 0147 PUTHEX: 0147 F5 PUSH AF ; Save code 0148 0F RRCA ; Shift code 0149 0F RRCA ; 4 bits (high) 014A 0F RRCA ; <---> 014B 0F RRCA ; 4 bits (low) 014C CD 0150 CALL HEXSUB ; Print 4 bits 014F F1 POP AF ; Restore code 0150 HEXSUB: ; [Print 4 bits (low)] 0150 E6 0F AND 0FH ; Use low 4 bits only 0152 C6 30 ADD A,'0' ; Convert 0154 FE 3A CP '9'+1 ; 0- 9 -> '0' - '9' 0156 38 02 JR C,HEXS1 ; 10-15 -> 'A' - 'F' 0158 C6 07 ADD A,'A'-10-'0' 015A HEXS1: 015A 5F LD E,A ; E = Output code 015B 0E 02 LD C,2 ; [Console output] 015D CD 0005 CALL SYSTEM 0160 C9 RET ; End of PUTHEX/HEXSUB END ; Program end Macros: Symbols: 000D CR 015A HEXS1 0150 HEXSUB 000A LF 011D MSG1 012D MSG2 013D MSG3 0147 PUTHEX 0141 PUTMSG 0005 SYSTEM