mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-11-01 01:06:33 +00:00
126 lines
1.8 KiB
ArmAsm
126 lines
1.8 KiB
ArmAsm
; thick sine
|
|
|
|
; 105 bytes -- original with table sine
|
|
; 89 bytes -- use ROM cosine table to generate sine table
|
|
; 86 bytes -- put sine table in zero page
|
|
; 89 bytes -- adjust to add #1 to avoid thick line at middle
|
|
; 87 bytes -- Y is 0 after HGR2
|
|
|
|
; zero page
|
|
sinetable=$70
|
|
HGR_X = $E0
|
|
HGR_XH = $E1
|
|
HGR_Y = $E2
|
|
HGR_COLOR = $E4
|
|
HGR_PAGE = $E6
|
|
|
|
SAVEX = $FE
|
|
SAVEY = $FF
|
|
|
|
; ROM routines
|
|
|
|
HGR2 = $F3D8
|
|
HPOSN = $F411 ; (Y,X),(A) (values stores in HGRX,XH,Y)
|
|
HPLOT0 = $F457 ; plot at (Y,X), (A)
|
|
costable_base = $F5BA
|
|
|
|
;================================
|
|
; Clear screen and setup graphics
|
|
;================================
|
|
thick_sine:
|
|
|
|
jsr HGR2 ; set hi-res 140x192, page2, fullscreen
|
|
; A and Y both 0 at end
|
|
|
|
; try to get sine table from ROM
|
|
|
|
rom_sine:
|
|
|
|
;==========================================
|
|
; create sinetable using ROM cosine table
|
|
|
|
; ldy #0
|
|
ldx #$f
|
|
sinetable_loop:
|
|
|
|
lda costable_base+1,Y
|
|
force_zero:
|
|
lsr ; rom value is *256
|
|
lsr ; we want *32
|
|
lsr
|
|
|
|
sta sinetable+$10,Y
|
|
sta sinetable+$00,X
|
|
eor #$FF
|
|
sec
|
|
adc #$0
|
|
sta sinetable+$30,Y
|
|
sta sinetable+$20,X
|
|
|
|
lda #0 ; hack, ROM cosine table doesn't
|
|
; have a good zero for some reason
|
|
|
|
iny
|
|
dex
|
|
|
|
beq force_zero
|
|
bpl sinetable_loop
|
|
|
|
; x is FF at this point
|
|
|
|
|
|
;============================
|
|
; main loop
|
|
;============================
|
|
|
|
; dex
|
|
stx HGR_COLOR ; required
|
|
; though in emulator it defaults to $FF
|
|
|
|
draw_circle:
|
|
|
|
ldy #0
|
|
sty SAVEY
|
|
|
|
blah_smc:
|
|
ldx #0
|
|
stx SAVEX
|
|
|
|
circle_loop:
|
|
lda SAVEX
|
|
and #$3f
|
|
tax
|
|
lda sinetable,X
|
|
|
|
; clc
|
|
asl
|
|
|
|
; $60 is midscreen
|
|
adc #$60
|
|
ldx SAVEY
|
|
ldy #0
|
|
jsr HPLOT0 ; plot at (Y,X), (A)
|
|
|
|
inc SAVEX
|
|
|
|
inc SAVEY
|
|
bne circle_loop
|
|
|
|
done:
|
|
inc blah_smc+1
|
|
|
|
; lda SAVEX
|
|
; and #$3f
|
|
; cmp #$3f
|
|
; bne blah
|
|
|
|
bit SAVEX
|
|
bvc blah
|
|
|
|
lda HGR_COLOR ; flip draw color $ff/$00/$ff
|
|
eor #$ff
|
|
sta HGR_COLOR
|
|
blah:
|
|
|
|
jmp draw_circle
|