Add sin_FAC1

This commit is contained in:
Rikard Nordgren committed 2025-04-07 18:58:43 +02:00
1 parent 5404a40b12
commit db9af4c19e
6 files changed
+83 -31

No files matched your search

-29
View File
@@ -1,29 +0,0 @@
;; #LAYOUT# STD * #TAKE
;; #LAYOUT# * BASIC_0 #TAKE
;; #LAYOUT# * * #IGNORE
;
; Math package - sine of FAC1 in radians
;
; See also:
; - [CM64] Computes Mapping the Commodore 64 - page 210 - XXX address does not match
; - https://www.c64-wiki.com/wiki/Floating_point_arithmetic
; - https://codebase64.org/doku.php?id=base:kernal_floating_point_mathematics
;
; XXX provide implementation
sin_FAC1:
+STUB_IMPLEMENTATION
poly_sin:
!byte $05 ; series length - 1
+PUT_CONST_POLY_SIN_1
+PUT_CONST_POLY_SIN_2
+PUT_CONST_POLY_SIN_3
+PUT_CONST_POLY_SIN_4
+PUT_CONST_POLY_SIN_5
+PUT_CONST_POLY_SIN_6
File renamed without changes.
+55
View File
@@ -0,0 +1,55 @@
;; #LAYOUT# STD * #TAKE
;; #LAYOUT# * BASIC_0 #TAKE
;; #LAYOUT# * * #IGNORE
;
; Math package - sine of FAC1 in radians
;
; See also:
; - [CM64] Computes Mapping the Commodore 64 - page 210 - XXX address does not match
; - https://www.c64-wiki.com/wiki/Floating_point_arithmetic
; - https://codebase64.org/doku.php?id=base:kernal_floating_point_mathematics
; - https://www.c64-wiki.com/wiki/SIN
sin_FAC1:
jsr mov_FAC1_FAC2 ; FAC1 <- X / (2*pi) (X2)
ldy #>const_DOUBLE_PI
lda #<const_DOUBLE_PI
jsr mov_MEM_FAC1
jsr div_FAC2_FAC1
jsr mov_FAC1_FAC2 ; FAC2 <- X2
jsr int_FAC1 ; FAC1 <- INT(X2)
jsr sub_FAC2_FAC1 ; FAC1 <- X2 - INT(X2) (F)
ldy #>const_QUARTER
lda #<const_QUARTER
jsr FCOMP
bmi sin_next ; FAC1 < 0.25
ldy #>sin_three_quarters
lda #<sin_three_quarters
jsr FCOMP
bmi sin_q23 ; FAC1 < 0.75
jsr mov_FAC1_FAC2 ; FAC1 <- FAC1 - 1.0
ldy #>const_ONE
lda #<const_ONE
jsr mov_MEM_FAC1
jsr sub_FAC2_FAC1
+bra sin_next
sin_q23:
ldy #>const_HALF
lda #<const_HALF
jsr sub_MEM_FAC1 ; FAC1 <- 0.5 - FAC1
; FALLTHROUGH
sin_next:
ldy #>poly_sin
lda #<poly_sin
jmp poly1_FAC1
+23
View File
@@ -0,0 +1,23 @@
;; #LAYOUT# STD * #TAKE
;; #LAYOUT# X16 BASIC_0 #TAKE-OFFSET 2000
;; #LAYOUT# * BASIC_0 #TAKE
;; #LAYOUT# * * #IGNORE
; Polynomial for the sine function
poly_sin:
!byte $05 ; series length - 1
+PUT_CONST_POLY_SIN_1
+PUT_CONST_POLY_SIN_2
+PUT_CONST_POLY_SIN_3
+PUT_CONST_POLY_SIN_4
+PUT_CONST_POLY_SIN_5
+PUT_CONST_POLY_SIN_6
; Constant 0.75 needed for sine calculation
sin_three_quarters:
!byte $80, $40, $00, $00, $00