-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy path6809_HEX2BN.s
67 lines (63 loc) · 1.36 KB
/
6809_HEX2BN.s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
; Title: Hex ASCII to Binary
;
; Name: HEX2BN
;
; Purpose: Converts two ASCII characters to one byte of binary data
;
; Entry: Register A = ASCII more significant digit
; Register B = ASCII less significant digit
;
; Exit: Register A = Binary data
;
; Registers Used: A,B,CC
;
; Time: Approximately 39 cycles
;
; Size: Program 25 bytes
; Data 1 byte on stack
;
; CONVERT MORE SIGNIFICANT DIGIT TO BINARY
;
HEX2BN:
SUBA #'0' ; SUBTRACT ASCII OFFSET (ASCII 0)
CMPA #9 ; CHECK IF DIGIT DECIMAL
BLS SHFTMS ; BRANCH IF DECIMAL
SUBA #7 ; ELSE SUBTRACT _OFFSET FOR LETTERS
SHFTMS: LSLA ; SHIFT DIGIT TO MORE SIGNIFICANT BITS
LSLA
LSLA
LSLA
;
; CONVERT LESS SIGNIFICANT DIGIT TO BINARY
;
SUBB #'0' ; SUBTRACT ASCII OFFSET (ASCII 0)
CMPB #9 ; CHECK IF DIGIT DECIMAL
BLS CMBDIG ; BRANCH IF DECIMAL
SUBB #7 ; ELSE SUBTRACT OFFSET FOR LETTERS
;
; COMBINE LESS SIGNIFICANT, MORE SIGNIFICANT DIGITS
;
CMBDIG:
STB ,-S ; SAVE LESS SIGNIFICANT DIGIT IN STACK
ADDA ,S+ ; ADD DIGITS
RTS
;
; SAMPLE EXECUTION
SC1D:
; CONVERT ASCII 'C7' TO C7 HEXADECIMAL
LDA #'C'
LDB #'7'
JSR HEX2BN ; A = C7H
;
; CONVERT ASCII '2F' TO 2F HEXADECIMAL
;
LDA #'2'
LDB #'F'
JSR HEX2BN ; A = 2FH
;
; CONVERT ASCII '2A' TO 2A HEXADECIMAL
;
LDA #'2'
LDB #'A'
JSR HEX2BN ; A = 2AH
END