mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-09-29 08:55:10 +00:00
86 lines
1.2 KiB
ArmAsm
86 lines
1.2 KiB
ArmAsm
|
; try to get sine table from ROM
|
||
|
|
||
|
; zero page
|
||
|
GBASL = $26
|
||
|
GBASH = $27
|
||
|
YY = $69
|
||
|
ROW_SUM = $70
|
||
|
|
||
|
HGR_X = $E0
|
||
|
HGR_XH = $E1
|
||
|
HGR_Y = $E2
|
||
|
HGR_COLOR = $E4
|
||
|
HGR_PAGE = $E6
|
||
|
|
||
|
FRAME = $FC
|
||
|
SUM = $FD
|
||
|
SAVEX = $FE
|
||
|
SAVEY = $FF
|
||
|
|
||
|
;================================
|
||
|
; Clear screen and setup graphics
|
||
|
;================================
|
||
|
rom_sine:
|
||
|
|
||
|
;==========================================
|
||
|
; create sinetable using ROM cosine table
|
||
|
|
||
|
ldy #0
|
||
|
sinetable_loop:
|
||
|
tya ; 2
|
||
|
and #$3f ; wrap sine at 63 entries ; 2
|
||
|
|
||
|
cmp #$20
|
||
|
php ; save pos/negative for later
|
||
|
|
||
|
and #$1f
|
||
|
|
||
|
beq sin_noadjust
|
||
|
|
||
|
cmp #$10
|
||
|
bcc sin_left ; blt
|
||
|
bne sin_right
|
||
|
|
||
|
lda #$20 ; force sin(16) to $20 instead of $1F
|
||
|
bne sin_noadjust
|
||
|
|
||
|
sin_right:
|
||
|
; sec carry should be set here
|
||
|
sbc #$10 ; X-16 (x=16..31)
|
||
|
bne sin_both ; bra
|
||
|
sin_left:
|
||
|
; clc ; carry should be clear
|
||
|
eor #$FF ; 16-X (but plus one twos complement)
|
||
|
adc #$11
|
||
|
sin_both:
|
||
|
tax
|
||
|
lda sinetable_base,X ; 4+
|
||
|
|
||
|
lsr ; rom value is *256
|
||
|
lsr ; we want *32
|
||
|
lsr
|
||
|
sin_noadjust:
|
||
|
|
||
|
plp
|
||
|
bcc sin_done
|
||
|
|
||
|
sin_negate:
|
||
|
; carry set here
|
||
|
eor #$ff
|
||
|
; adc #0 ; off by one, does it matter?
|
||
|
|
||
|
sin_done:
|
||
|
sta sinetable,Y
|
||
|
|
||
|
iny
|
||
|
bne sinetable_loop
|
||
|
|
||
|
end:
|
||
|
jmp end
|
||
|
|
||
|
sinetable_base = $F5BA
|
||
|
|
||
|
sinetable=$6000
|
||
|
|
||
|
|