Thanks Guys,
There's obviously several ways to do it, will check through the merits of
each.
-----Original Message-----
From: Christopher Phillips [mailto:cphillips@reflectionsinteractive.com]
Sent: Wednesday, 26 September 2001 5:40 PM
To: 'cbm-hackers@cling.gu.se'
Subject: RE: 8bit binary to ASCII
> Does any one have a short assembly routine for converting an
> 8bit unsigned
> binary number (0-255) to ASCII?
>
The following is untested, but it's nice and short.
I know the ((N/2*3*17)+40)/256 trick is fine, I just
don't have an assembler handy. And my head
always hurts when deciding between bcc and bcs!
Christopher.
----------------------------------------------------------------
.convertbytetoasciidecimal
;enter with number in A
;exit with null terminated 3 character
string in buf
ldx#32 ;default first char to space..
stx buf+1 ;and clear low 5 bits of buf+1
cmp#100
bcc writefirstdigit
sbc#100
ldx#'1'
cmp#100
bcc writefirstdigit
sbc#100
ldx#'2'
.writefirstdigit
stx buf
; A now contains N=0..99
; save it on the stack, then
; compute ((N/2*3*17)+40)/256
; to get the high digit
php
lsr a
sta Non2
asl a ; also clears carry :-)
adc Non2
;A now contains N/2*3
sta Nby2on3
asl a
rol buf+1
asl a
rol buf+1
asl a
rol buf+1
asl a
rol buf+1 ; buf+1 & A now contain hi & lo bytes of N*2/3*16
adc Nby2on3
bcc $1
inc buf+1
$1: adc#39 ;doesnt matter if this adds 39 or 40
clc
bcc $1
inc buf+1
$1: clc
lda buf+1
tax
adc#'0' ; and leave carry clear
sta buf+1
plp
adc asczerotakeXtimes10,x
sta buf+2
rts
.Non2 ;never need both of these at once.
.Nby2on3
byte 0
.buf
byte 0,0,0,0
.asczerotakeXtimes10
byte '0'- 0, '0'-10, '0'-20, '0'-30, '0'-40
byte '0'-50, '0'-60, '0'-70, '0'-80, '0'-90
-Virus scanned and cleared ok
Message was sent through the cbm-hackers mailing list
PLEASE TAKE NOTE:
The contents of this email (including any attachments) may be
privileged and confidential. Any unauthorised use of the contents
is expressly prohibited. If you have received this email in error,
please advise us immediately (you can contact us by telephone
on +61 8 9441 2311 by reverse charge) and then permanently
delete this email together with any attachments. We appreciate
your co-operation.
Whilst Orbital endeavours to take reasonable care to ensure
that this email and any attachments are free from viruses or other
defects, Orbital does not represent or warrant that such is explicitly
the case
(C) 2000: Orbital Engine Company (Australia) PTY LTD and its
affiliates
Message was sent through the cbm-hackers mailing list
Archive generated by hypermail 2.1.1.