1909
|
1 ************************************************
|
|
2 *
|
|
3 * Binary to decimal conversion (32 bit)
|
|
4
|
|
5 * OTHER MODULES NEEDED: DECTAB$
|
|
6
|
|
7 * ENTRY: X=buffer for ascii string
|
|
8 * Y=bits 31-16 of binary value to convert
|
|
9 * D=bits 15-0 of binary value to convert
|
|
10
|
|
11 * EXIT: all registers (except cc) preserved
|
|
12
|
|
13
|
|
14 nam 32 bit Binary to Decimal Conversion
|
|
15 ttl Assembler Library Module
|
|
16
|
|
17
|
|
18 psect BIN_DEC32,0,0,0,0,0
|
|
19
|
|
20
|
|
21 Base fcb $3B,$9A,$CA,$00 1,000,000,000
|
|
22 fcb $05,$F5,$E1,$00 100,000,000
|
|
23 fcb $00,$98,$96,$80 10,000,000
|
|
24 fcb $00,$0F,$42,$40 1,000,000
|
|
25 fcb $00,$01,$86,$A0 100,000
|
|
26 fcb $00,$00,$27,$10 10,000
|
|
27 fcb $00,$00,$03,$E8 1,000
|
|
28 fcb $00,$00,$00,$64 100
|
|
29 fcb $00,$00,$00,$0A 10
|
|
30 fcb $00,$00,$00,$01 1
|
|
31
|
|
32
|
|
33 * Entry:
|
|
34 * A = format flag (0 = write leading zeros, 1 = do not)
|
|
35 * X = address of buffer to hold number
|
|
36 * Y = address of 32 bit value
|
|
37 * Exit:
|
|
38 * X = address of buffer holding number
|
|
39 BIN_DEC32:
|
|
40 pshs d,x,y,u
|
|
41 tfr x,u
|
|
42 tfr y,x
|
|
43 ldb #10 max number of numbers (10^9)
|
|
44 pshs b save count on stack
|
|
45 leay <Base,pcr point to base of numbers
|
|
46 s@ lda #$30 put #'0
|
|
47 sta ,u at U
|
|
48 s1@ bsr Sub32 ,X=,X-,Y
|
|
49 inc ,u
|
|
50 bcc s1@ if X>0, continue
|
|
51 bsr Add32 add back in
|
|
52 dec ,u+
|
|
53 dec ,s decrement counter
|
|
54 beq done@
|
|
55 lda ,s
|
|
56 cmpa #$09
|
|
57 beq comma@
|
|
58 cmpa #$06
|
|
59 beq comma@
|
|
60 cmpa #$03
|
|
61 bne s2@
|
|
62 comma@ ldb #',
|
|
63 stb ,u+
|
|
64 s2@ leay 4,y point to next
|
|
65 bra s@
|
|
66 done@ leas 1,s
|
|
67 clr ,u put nil byte at end
|
|
68 * 1,234,567,890
|
|
69 tst ,s format flag
|
|
70 beq ex2@
|
|
71 ldb #14 length of string with commas + 1
|
|
72 ldx 2,s get pointer to buffer
|
|
73 a@ decb
|
|
74 beq ex@
|
|
75 lda ,x+ get byte
|
|
76 cmpa #'0
|
|
77 beq a@
|
|
78 cmpa #',
|
|
79 beq a@
|
|
80 ex@ leax -1,x
|
|
81 stx 2,s
|
|
82 ex2@ puls d,x,y,u,pc
|
|
83
|
|
84 * Entry:
|
|
85 * X = address of 32 bit minuend
|
|
86 * Y = address of 32 bit subtrahend
|
|
87 * Exit:
|
|
88 * X = address of 32 bit difference
|
|
89 Sub32 ldd 2,x
|
|
90 subd 2,y
|
|
91 std 2,x
|
|
92 ldd ,x
|
|
93 sbcb 1,y
|
|
94 sbca ,y
|
|
95 std ,x
|
|
96 rts
|
|
97
|
|
98
|
|
99 * Entry:
|
|
100 * X = address of 32 bit number
|
|
101 * Y = address of 32 bit number
|
|
102 * Exit:
|
|
103 * X = address of 32 bit sum
|
|
104 Add32 ldd 2,x
|
|
105 addd 2,y
|
|
106 std 2,x
|
|
107 ldd ,x
|
|
108 adcb 1,y
|
|
109 adca ,y
|
|
110 std ,x
|
|
111 rts
|
|
112
|
2446
|
113 endsect
|