annotate 3rdparty/packages/coyota/bin_dec32.as @ 3054:22ddd48b4ec2

level1 krn: Fix scheduler bug that only affected 6309 The original 6809 binary was correct, but it was disassembled and interpreted wrongly, so that reassembly went wrong on 6309.
author Tormod Volden <debian.tormod@gmail.com>
date Sun, 25 Jan 2015 22:36:02 +0100 (2015-01-25)
parents 9306e2875040
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1909
323e7751c250 Updated
boisy
parents:
diff changeset
1 ************************************************
323e7751c250 Updated
boisy
parents:
diff changeset
2 *
323e7751c250 Updated
boisy
parents:
diff changeset
3 * Binary to decimal conversion (32 bit)
323e7751c250 Updated
boisy
parents:
diff changeset
4
323e7751c250 Updated
boisy
parents:
diff changeset
5 * OTHER MODULES NEEDED: DECTAB$
323e7751c250 Updated
boisy
parents:
diff changeset
6
323e7751c250 Updated
boisy
parents:
diff changeset
7 * ENTRY: X=buffer for ascii string
323e7751c250 Updated
boisy
parents:
diff changeset
8 * Y=bits 31-16 of binary value to convert
323e7751c250 Updated
boisy
parents:
diff changeset
9 * D=bits 15-0 of binary value to convert
323e7751c250 Updated
boisy
parents:
diff changeset
10
323e7751c250 Updated
boisy
parents:
diff changeset
11 * EXIT: all registers (except cc) preserved
323e7751c250 Updated
boisy
parents:
diff changeset
12
323e7751c250 Updated
boisy
parents:
diff changeset
13
323e7751c250 Updated
boisy
parents:
diff changeset
14 nam 32 bit Binary to Decimal Conversion
323e7751c250 Updated
boisy
parents:
diff changeset
15 ttl Assembler Library Module
323e7751c250 Updated
boisy
parents:
diff changeset
16
323e7751c250 Updated
boisy
parents:
diff changeset
17
2952
9306e2875040 coyota: Port to lwtools
Tormod Volden <debian.tormod@gmail.com>
parents: 2951
diff changeset
18 BIN_DEC32 EXPORT
1909
323e7751c250 Updated
boisy
parents:
diff changeset
19
2952
9306e2875040 coyota: Port to lwtools
Tormod Volden <debian.tormod@gmail.com>
parents: 2951
diff changeset
20 SECTION code
1909
323e7751c250 Updated
boisy
parents:
diff changeset
21
323e7751c250 Updated
boisy
parents:
diff changeset
22 Base fcb $3B,$9A,$CA,$00 1,000,000,000
323e7751c250 Updated
boisy
parents:
diff changeset
23 fcb $05,$F5,$E1,$00 100,000,000
323e7751c250 Updated
boisy
parents:
diff changeset
24 fcb $00,$98,$96,$80 10,000,000
323e7751c250 Updated
boisy
parents:
diff changeset
25 fcb $00,$0F,$42,$40 1,000,000
323e7751c250 Updated
boisy
parents:
diff changeset
26 fcb $00,$01,$86,$A0 100,000
323e7751c250 Updated
boisy
parents:
diff changeset
27 fcb $00,$00,$27,$10 10,000
323e7751c250 Updated
boisy
parents:
diff changeset
28 fcb $00,$00,$03,$E8 1,000
323e7751c250 Updated
boisy
parents:
diff changeset
29 fcb $00,$00,$00,$64 100
323e7751c250 Updated
boisy
parents:
diff changeset
30 fcb $00,$00,$00,$0A 10
323e7751c250 Updated
boisy
parents:
diff changeset
31 fcb $00,$00,$00,$01 1
323e7751c250 Updated
boisy
parents:
diff changeset
32
323e7751c250 Updated
boisy
parents:
diff changeset
33
323e7751c250 Updated
boisy
parents:
diff changeset
34 * Entry:
323e7751c250 Updated
boisy
parents:
diff changeset
35 * A = format flag (0 = write leading zeros, 1 = do not)
323e7751c250 Updated
boisy
parents:
diff changeset
36 * X = address of buffer to hold number
323e7751c250 Updated
boisy
parents:
diff changeset
37 * Y = address of 32 bit value
323e7751c250 Updated
boisy
parents:
diff changeset
38 * Exit:
323e7751c250 Updated
boisy
parents:
diff changeset
39 * X = address of buffer holding number
323e7751c250 Updated
boisy
parents:
diff changeset
40 BIN_DEC32:
323e7751c250 Updated
boisy
parents:
diff changeset
41 pshs d,x,y,u
323e7751c250 Updated
boisy
parents:
diff changeset
42 tfr x,u
323e7751c250 Updated
boisy
parents:
diff changeset
43 tfr y,x
323e7751c250 Updated
boisy
parents:
diff changeset
44 ldb #10 max number of numbers (10^9)
323e7751c250 Updated
boisy
parents:
diff changeset
45 pshs b save count on stack
323e7751c250 Updated
boisy
parents:
diff changeset
46 leay <Base,pcr point to base of numbers
323e7751c250 Updated
boisy
parents:
diff changeset
47 s@ lda #$30 put #'0
323e7751c250 Updated
boisy
parents:
diff changeset
48 sta ,u at U
323e7751c250 Updated
boisy
parents:
diff changeset
49 s1@ bsr Sub32 ,X=,X-,Y
323e7751c250 Updated
boisy
parents:
diff changeset
50 inc ,u
323e7751c250 Updated
boisy
parents:
diff changeset
51 bcc s1@ if X>0, continue
323e7751c250 Updated
boisy
parents:
diff changeset
52 bsr Add32 add back in
323e7751c250 Updated
boisy
parents:
diff changeset
53 dec ,u+
323e7751c250 Updated
boisy
parents:
diff changeset
54 dec ,s decrement counter
323e7751c250 Updated
boisy
parents:
diff changeset
55 beq done@
323e7751c250 Updated
boisy
parents:
diff changeset
56 lda ,s
323e7751c250 Updated
boisy
parents:
diff changeset
57 cmpa #$09
323e7751c250 Updated
boisy
parents:
diff changeset
58 beq comma@
323e7751c250 Updated
boisy
parents:
diff changeset
59 cmpa #$06
323e7751c250 Updated
boisy
parents:
diff changeset
60 beq comma@
323e7751c250 Updated
boisy
parents:
diff changeset
61 cmpa #$03
323e7751c250 Updated
boisy
parents:
diff changeset
62 bne s2@
323e7751c250 Updated
boisy
parents:
diff changeset
63 comma@ ldb #',
323e7751c250 Updated
boisy
parents:
diff changeset
64 stb ,u+
323e7751c250 Updated
boisy
parents:
diff changeset
65 s2@ leay 4,y point to next
323e7751c250 Updated
boisy
parents:
diff changeset
66 bra s@
323e7751c250 Updated
boisy
parents:
diff changeset
67 done@ leas 1,s
323e7751c250 Updated
boisy
parents:
diff changeset
68 clr ,u put nil byte at end
323e7751c250 Updated
boisy
parents:
diff changeset
69 * 1,234,567,890
323e7751c250 Updated
boisy
parents:
diff changeset
70 tst ,s format flag
323e7751c250 Updated
boisy
parents:
diff changeset
71 beq ex2@
323e7751c250 Updated
boisy
parents:
diff changeset
72 ldb #14 length of string with commas + 1
323e7751c250 Updated
boisy
parents:
diff changeset
73 ldx 2,s get pointer to buffer
323e7751c250 Updated
boisy
parents:
diff changeset
74 a@ decb
323e7751c250 Updated
boisy
parents:
diff changeset
75 beq ex@
323e7751c250 Updated
boisy
parents:
diff changeset
76 lda ,x+ get byte
323e7751c250 Updated
boisy
parents:
diff changeset
77 cmpa #'0
323e7751c250 Updated
boisy
parents:
diff changeset
78 beq a@
323e7751c250 Updated
boisy
parents:
diff changeset
79 cmpa #',
323e7751c250 Updated
boisy
parents:
diff changeset
80 beq a@
323e7751c250 Updated
boisy
parents:
diff changeset
81 ex@ leax -1,x
323e7751c250 Updated
boisy
parents:
diff changeset
82 stx 2,s
323e7751c250 Updated
boisy
parents:
diff changeset
83 ex2@ puls d,x,y,u,pc
323e7751c250 Updated
boisy
parents:
diff changeset
84
323e7751c250 Updated
boisy
parents:
diff changeset
85 * Entry:
323e7751c250 Updated
boisy
parents:
diff changeset
86 * X = address of 32 bit minuend
323e7751c250 Updated
boisy
parents:
diff changeset
87 * Y = address of 32 bit subtrahend
323e7751c250 Updated
boisy
parents:
diff changeset
88 * Exit:
323e7751c250 Updated
boisy
parents:
diff changeset
89 * X = address of 32 bit difference
323e7751c250 Updated
boisy
parents:
diff changeset
90 Sub32 ldd 2,x
323e7751c250 Updated
boisy
parents:
diff changeset
91 subd 2,y
323e7751c250 Updated
boisy
parents:
diff changeset
92 std 2,x
323e7751c250 Updated
boisy
parents:
diff changeset
93 ldd ,x
323e7751c250 Updated
boisy
parents:
diff changeset
94 sbcb 1,y
323e7751c250 Updated
boisy
parents:
diff changeset
95 sbca ,y
323e7751c250 Updated
boisy
parents:
diff changeset
96 std ,x
323e7751c250 Updated
boisy
parents:
diff changeset
97 rts
323e7751c250 Updated
boisy
parents:
diff changeset
98
323e7751c250 Updated
boisy
parents:
diff changeset
99
323e7751c250 Updated
boisy
parents:
diff changeset
100 * Entry:
323e7751c250 Updated
boisy
parents:
diff changeset
101 * X = address of 32 bit number
323e7751c250 Updated
boisy
parents:
diff changeset
102 * Y = address of 32 bit number
323e7751c250 Updated
boisy
parents:
diff changeset
103 * Exit:
323e7751c250 Updated
boisy
parents:
diff changeset
104 * X = address of 32 bit sum
323e7751c250 Updated
boisy
parents:
diff changeset
105 Add32 ldd 2,x
323e7751c250 Updated
boisy
parents:
diff changeset
106 addd 2,y
323e7751c250 Updated
boisy
parents:
diff changeset
107 std 2,x
323e7751c250 Updated
boisy
parents:
diff changeset
108 ldd ,x
323e7751c250 Updated
boisy
parents:
diff changeset
109 adcb 1,y
323e7751c250 Updated
boisy
parents:
diff changeset
110 adca ,y
323e7751c250 Updated
boisy
parents:
diff changeset
111 std ,x
323e7751c250 Updated
boisy
parents:
diff changeset
112 rts
323e7751c250 Updated
boisy
parents:
diff changeset
113
2952
9306e2875040 coyota: Port to lwtools
Tormod Volden <debian.tormod@gmail.com>
parents: 2951
diff changeset
114 ENDSECT