Advertisement
verz

ItoA 16 bit

Aug 15th, 2019
1,582
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. update in: https://pastebin.com/b6i5JTBf
  2.  
  3.  
  4. *=$0801
  5.  
  6.         BYTE    $0B, $08, $0A, $00, $9E, $32, $30, $36, $31, $00, $00, $00
  7.  
  8. ;---------------------------------
  9.  
  10.  
  11. Example
  12.         lda #$49
  13.         sta lobyte
  14.         lda #1
  15.         sta hibyte
  16.  
  17.  
  18.         jsr _ItoA           ; converts Int16 to String
  19.         jsr _trimnum        ; trims leading spaces
  20.  
  21.  
  22.         ; prints trimmed string
  23.         lda #<CnvTrm       
  24.         ldy #>CnvTrm
  25.         jsr $ab1e
  26.         lda #13
  27.         jsr $ffd2
  28.         ; prints untrimmed string
  29.         lda #<CnvStr
  30.         ldy #>CnvStr
  31.         jsr $ab1e
  32.         rts
  33.  
  34.  
  35.  
  36.  
  37. ;-------------------------------
  38. ; Converts a 16bit number to BCD
  39. ;-------------------------------
  40. BINBCD16
  41.         SED             ; Switch to decimal mode
  42.         LDA #0          ; Ensure the result is clear
  43.         STA bcd+0
  44.         STA bcd+1
  45.         STA bcd+2
  46.         LDX #16         ; The number of source bits
  47. CNVBIT          
  48.         ASL lobyte     ; Shift out one bit
  49.         ROL hibyte
  50.         LDA bcd+0      ; And add into result
  51.         ADC bcd+0
  52.         STA bcd+0
  53.         LDA bcd+1      ; propagating any carry
  54.         ADC bcd+1
  55.         STA bcd+1
  56.         LDA bcd+2      ; ... thru whole result
  57.         ADC bcd+2
  58.         STA bcd+2
  59.         DEX             ; And repeat for next bit
  60.         BNE CNVBIT
  61.         CLD             ; Back to binary
  62.        
  63.         rts             ; All Done.
  64.  
  65.  
  66. ;-------------------------------
  67. ; Converts a 16bit unsigned number into string
  68. ;-------------------------------
  69. ;
  70. ;   Call with 16 bit number in lobyte/hibyte
  71. ;
  72. ;-------------------------------
  73.  
  74.  
  75. _ItoA
  76.         jsr BinBcd16
  77.         ;lda bcd+2
  78.         and #$0f
  79.         ora #$30
  80.         sta CnvStr+0
  81.  
  82.         lda bcd+1
  83.         and #$0f
  84.         ora #$30
  85.         sta CnvStr+2
  86.         lda bcd+1
  87.         lsr
  88.         lsr
  89.         lsr
  90.         lsr
  91.         ora #$30
  92.         sta CnvStr+1
  93.  
  94.         lda bcd+0
  95.         and #$0f
  96.         ora #$30
  97.         sta CnvStr+4
  98.         lda bcd+0
  99.         lsr
  100.         lsr
  101.         lsr
  102.         lsr
  103.         ora #$30
  104.         sta CnvStr+3
  105. ;        rts                    ; decomment to avoid stripping leading 0s
  106.  
  107.         ldx #0                  ;remove 0s at beginning
  108. _rem0   lda CnvStr,x
  109.         cmp #$30
  110.         bne _rts
  111.         lda #$20                ;put a space instead
  112.         sta CnvStr,x
  113.         inx
  114.         cpx #$5
  115.         bne _rem0
  116.  
  117. _rts    rts
  118.  
  119. _trimnum
  120.         ldy #0
  121. _trmlp  lda CnvStr,x
  122.         sta CnvTrm,y
  123.         beq _rts
  124.         inx
  125.         iny
  126.         jmp _trmlp
  127.  
  128.  
  129. bcd    byte 0,0,0
  130. lobyte byte 0
  131. hibyte byte 0
  132. CnvStr byte 0,0,0,0,0,0
  133. CnvTrm byte 0,0,0,0,0,0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement