Mercurial > hg > Members > kono > os9 > sbc09
comparison examples/printval.asm @ 57:2088fd998865
sbc09 directry clean up
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 23 Jul 2018 16:07:12 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
56:4fa2bdb0c457 | 57:2088fd998865 |
---|---|
1 ;print value as decimal | |
2 | |
3 org $100 | |
4 | |
5 ldx #$ff00 | |
6 loop: | |
7 bsr printdec | |
8 ldb #32 | |
9 swi2 | |
10 leax 1,x | |
11 bne loop | |
12 sync | |
13 | |
14 | |
15 printdec: | |
16 pshs cc,d,x ; save regs | |
17 lda #$80 ; init. terminator | |
18 nxtdg: | |
19 sta ,-s ; push digit term | |
20 ldb #16 ; 16 bit counter for rotate | |
21 clra ; clear accu and carry | |
22 roll: | |
23 rola ; divide by 10 using binary | |
24 adda #$f6 ; long division, shifting X one | |
25 bcs sub ; bit at a time info A and | |
26 suba #$f6 ; subtracting 10 which sets | |
27 sub: | |
28 exg d,x ; C if sub goes, else add 10 | |
29 rolb ; back and reset C. Rotating X | |
30 rola ; by means of A & B both shifts | |
31 exg d,x ; X bits into A and shifts | |
32 decb ; result bits into X. Do 17 | |
33 bpl roll ; times to get last result bit. | |
34 leax ,x ; test X and repeat if | |
35 bne nxtdg ; X is not zero | |
36 tfr a,b | |
37 prog: | |
38 orb #$30 ; make into ASCII digit, call | |
39 swi2 ; print char | |
40 ldb ,s+ ; pull next digit of stack and | |
41 bpl prog ; repeat if not terminator | |
42 puls cc,d,x,pc ; restore regs and return | |
43 | |
44 | |
45 end | |
46 |