Initial version

This commit is contained in:
Michaelangel007 2017-06-11 07:18:38 -07:00
commit cd930e915c
2 changed files with 164 additions and 0 deletions

18
README.md Normal file
View File

@ -0,0 +1,18 @@
# Print Fixed Point #.16 Fraction
# Assembly (Source)
See file [print_fract.s](print_fract.s)
# Binary (Executable)
```
0800:a2 b5 a0 e9 20 15 08 a2 00 bd 70 08 20 ed fd e8
0810:e0 05 d0 f5 60 a9 00 8d 6a 08 8e 6b 08 8c 6c 08
0820:a2 00 20 60 08 20 54 08 20 60 08 20 60 08 20 44
0830:08 ad 6a 08 09 b0 9d 70 08 a9 00 8d 6a 08 e8 e0
0840:05 d0 df 60 18 a0 02 b9 6a 08 79 6d 08 99 6a 08
0850:88 10 f4 60 a0 02 b9 6a 08 99 6d 08 88 10 f7 60
0860:0e 6c 08 2e 6b 08 2e 6a 08 60 00 00 00 00 00 00
0870:00 00 00 00 00
```

146
print_fract.s Normal file
View File

@ -0,0 +1,146 @@
ORG $800
; ==================== Demo ====================
Demo
;0.7106 * 65536 = $B5E9
; A*B5E9
; =======
; '.'
; 7.1B1A
; 1.0F04
; 0.9628
; 5.5DD90
; 8.A7A0
;0.71058_________^
LDX #$B5
LDY #$E9
JSR PrintFract
LDX #0
PrintDigit
LDA D0,X
JSR $FDED
INX
CPX #5
BNE PrintDigit
RTS
; ==================== Conversion ====================
; --------------------
; Convert 16-bit fractional value to Decimal
; IN
; X = high 16-bit val
; Y = low 16-bit val
; OUT
; [D0..D4] Decimal Fraction
; --------------------
PrintFract
STX A2
STY A3
JSR ZeroInt
TAX
; Psuedo Code
; int8_t a[3]
; int8_t t[3]
; char d[5]
;
; for( iDigit = 0; iDigit < 5; iDigit++ )
; a *= 2
; t = a
; a *= 4
; a += t
; d[i] = a[0] | '0'
; a[0] = 0
NextDigit
JSR Mul2 ; *2
JSR CopyT2 ;
JSR Mul2 ; *4
JSR Mul2 ; *8
JSR AddT2 ; x*10 = x*8 + x*2
LDA A1 ; Convert binary num to ASCII
ORA #$30+$80
STA D0,X
JSR ZeroInt
INX
CPX #5
BNE NextDigit
RTS
; ==================== Utility ====================
; --------------------
; Add Arrays
; A += T
; --------------------
AddT2
CLC
LDY #2
_AddT2
LDA A2-1,Y
ADC T2-1,Y
STA A2-1,Y
DEY
BPL _AddT2
RTS
; --------------------
; Copy Array
; T = A
; --------------------
CopyT2
LDY #2
_CopyT2
LDA A2-1,Y
STA T2-1,Y
DEY
BPL _CopyT2
RTS
; --------------------
; 24-bit SHL
; A *= 2
; --------------------
Mul2
ASL A3
ROL A2
ROl A1
RTS
; --------------------
; Clear Integer in 8.16 format
; A[0] = 0
; --------------------
ZeroInt
LDA #0
STA A1
RTS
; ==================== Data ====================
; 24-bit Number
A1 DB 0
A2 DB 0
A3 DB 0
; Temp
T1 DB 0 ; Always zero
T2 DB 0
T3 DB 0
; String Output in ASCII
D0 DB 0
D1 DB 0
D2 DB 0
D3 DB 0
D4 DB 0