diff lib/alib/bin_dec.a @ 2474:7d70b7e1cb21

Moved net and alib files into here
author boisy
date Tue, 30 Mar 2010 02:44:42 +0000
parents
children aaba193af04f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/alib/bin_dec.a	Tue Mar 30 02:44:42 2010 +0000
@@ -0,0 +1,97 @@
+************************************************ 
+*
+* Binary to decimal conversion
+
+* OTHER MODULES NEEDED: DECTAB$
+
+* ENTRY: X=buffer for ascii string
+*        D=binary value to convert
+
+* EXIT: all registers (except cc) preserved
+
+* BGP - 04/11/2009 - Fixed issue where BIN_DEC was printing negative
+* sign in certain cases.  Cleared nega flag to fix issue.
+
+ nam Binary to Decimal Conversion
+ ttl Assembler Library Module
+
+
+ psect BIN_DEC,0,0,0,0,0
+
+ vsect
+nega rmb 1
+ endsect
+
+BIN_SDEC:
+ clr nega,u
+ tsta
+ bpl  BIN_DEC
+ sta nega,u
+ comb
+ coma
+ addd #$0001
+ bra BIN_DEC_COMMON	+++ added BGP
+
+BIN_DEC:
+ clr nega,u		+++ added BGP
+BIN_DEC_COMMON
+ pshs a,b,x,y
+ lda #7 clear out 7 bytes in buffer
+
+bindc1
+ clr ,x+
+ deca
+ bne bindc1
+ ldx 2,s restore buffer start address
+ ldd ,s get data
+ bne bindc2 not 0, do convert
+ lda #'0
+ sta ,x
+ bra bindc8 exit
+
+bindc2
+ tst nega,u
+ beq bindc25
+ pshs a
+ lda #'-
+ sta ,x+
+ puls a
+bindc25
+ leay DECTAB$,pcr point to conversion table
+ clr ,--s temps, flag 1st dgt not placed
+
+bindc3
+ clr 1,s current digit=0
+
+bindc4
+ subd ,y sub table element
+ bcs bindc5 too far, correct
+ inc 1,s bump digit
+ bra bindc4 loop til done
+
+bindc5
+ addd ,y restore, 1 too many subtracts
+ pshs a,b save rest of number
+ lda 3,s get the digit
+ adda #$30 make it ascii
+ cmpa #'0 is it zero?
+ bne bindc6 no, skip
+ tst 2,s is it 1st digit in string?
+ beq bindc7 yes, don't do leading 0s
+
+bindc6
+ inc 2,s indidicate at least 1 digit
+ sta ,x+ save in buffer
+
+bindc7
+ leay 2,y next table entry
+ tst 1,y end of table
+ puls a,b restore data
+ bne bindc3 no..loop
+ leas 2,s
+
+bindc8
+ puls a,b,x,y,pc restore and return
+
+ endsect
+