147 lines
2.4 KiB
ArmAsm
147 lines
2.4 KiB
ArmAsm
|
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
|
||
|
|