User Tools

Site Tools


base:int16_and_uint16_conversion_to_string

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
base:int16_and_uint16_conversion_to_string [2019-08-16 17:25] verzbase:int16_and_uint16_conversion_to_string [2019-08-16 23:49] verz
Line 3: Line 3:
 _UtoA converts an unsigned number\\ _UtoA converts an unsigned number\\
 The conversion is obtained via a BCD intermediate value. The conversion is obtained via a BCD intermediate value.
-<code>+<code 6502acme>
 bcd     = $61    ; system Fac, 3 bytes bcd     = $61    ; system Fac, 3 bytes
 int16   = $64    ; system Fac, 2 bytes int16   = $64    ; system Fac, 2 bytes
Line 22: Line 22:
  
 _ItoA _ItoA
-        lda int16+1+        lda int16+1           ; is it positive
         bpl _pos         bpl _pos
  
-_neg    clc+_neg    clc                   ; it's negative: let's 2complement it
         lda int16         lda int16
         eor #$ff         eor #$ff
Line 34: Line 34:
         adc #0         adc #0
         sta int16+1         sta int16+1
-        lda #'-'+        lda #'-'              ; prepares the sign value
         sta sgn         sta sgn
  
-_pos    jsr _UtoA+_pos    jsr _UtoA             ; the work is done by _UtoA routine
  
-        lda sgn +        lda sgn               ; if the sign was negative 
-        beq _enditoa +        beq _enditoa           
-        dex+        dex                   ; adds '-' before the number
         sta CnvStr,x         sta CnvStr,x
 _enditoa _enditoa
Line 60: Line 60:
  
 _UtoA _UtoA
-        jsr BINBCD16_2+        jsr BINBCD16          ; converts the number to BCD
         ;lda bcd+2         ;lda bcd+2
-        and #$0f+        and #$0f              ; extracts every byte and adds $30
         ora #$30         ora #$30
         sta CnvStr+1         sta CnvStr+1
Line 95: Line 95:
         ldx #1                  ; remove 0s at beginning         ldx #1                  ; remove 0s at beginning
 _rem0   lda CnvStr,x _rem0   lda CnvStr,x
-        cmp #$30+        cmp #$30                ; if it's a '0'
         bne _rts         bne _rts
         lda #$20                ; put a space instead         lda #$20                ; put a space instead
         sta CnvStr,         sta CnvStr,
         inx         inx
-        cpx #$5+        cpx #$5                 ; exits before last digit
         bne _rem0         bne _rem0
  
Line 140: Line 140:
 CBIT1   ASL int16       ; Shift out one bit             5 CBIT1   ASL int16       ; Shift out one bit             5
         ROL int16+1     ;                               5         ROL int16+1     ;                               5
-;        LDA bcd+0      ; And add into result             +;        LDA bcd+0      ;              
-        ADC bcd+0       ;                               3+        ADC bcd+0       ; And add into result           3
         STA bcd+0       ;                               3         STA bcd+0       ;                               3
-        ASL int16       ; Shift out one bit             5+        ASL int16       ;                               5
         ROL int16+1     ;                               5         ROL int16+1     ;                               5
         ADC bcd+0       ;                               3         ADC bcd+0       ;                               3
         STA bcd+0       ;                               3         STA bcd+0       ;                               3
-        ASL int16       ; Shift out one bit             5+        ASL int16       ;                               5
         ROL int16+1     ;                               5         ROL int16+1     ;                               5
         ADC bcd+0       ;                               3         ADC bcd+0       ;                               3
         STA bcd+0       ;                               3         STA bcd+0       ;                               3
-        ASL int16       ; Shift out one bit             5+        ASL int16       ;                               5
         ROL int16+1     ;                               5         ROL int16+1     ;                               5
         ADC bcd+0       ;                               3         ADC bcd+0       ;                               3
         STA bcd+0       ;                               3         STA bcd+0       ;                               3
-        ASL int16       ; Shift out one bit             5+        ASL int16       ;                               5
         ROL int16+1     ;                               5         ROL int16+1     ;                               5
         ADC bcd+0       ;                               3         ADC bcd+0       ;                               3
         STA bcd+0       ;                               3         STA bcd+0       ;                               3
-        ASL int16       ; Shift out one bit             5+        ASL int16       ;                               5
         ROL int16+1     ;                               5         ROL int16+1     ;                               5
         ADC bcd+0       ;                               3         ADC bcd+0       ;                               3
Line 196: Line 196:
  
 usage example: usage example:
-<code>+<code 6502tasm >
 Example Example
         lda #0         lda #0
base/int16_and_uint16_conversion_to_string.txt · Last modified: 2019-08-18 09:35 by verz