dos33fsprogs/graphics/gr/parallax/par_bot.s

192 lines
2.3 KiB
ArmAsm
Raw Normal View History

2022-09-26 03:16:32 +00:00
; Parallax
; by deater (Vince Weaver) <vince@deater.net>
; Zero Page
GBASL = $26
GBASH = $27
FRAME = $EA
FRAME2 = $EB
FRAME4 = $EC
X2 = $FB
COLORS = $FC
PAGE = $FD
; Soft Switches
SET_GR = $C050 ; Enable graphics
FULLGR = $C052 ; Full screen, no text
PAGE1 = $C054 ; Page1
PAGE2 = $C055 ; Page2
LORES = $C056 ; Enable LORES graphics
; ROM routines
2022-09-26 03:24:43 +00:00
GBASCALC= $F847 ; take Y-coord/2 in A, put address in GBASL/H ( a trashed, C clear)
2022-09-26 03:16:32 +00:00
SETGR = $FB40
WAIT = $FCA8 ;; delay 1/2(26+27A+5A^2) us
parallax:
;===================
; init screen
2022-09-26 03:24:43 +00:00
jsr SETGR ; lores graphics
bit FULLGR ; full screen
2022-09-26 03:16:32 +00:00
2022-09-26 03:24:43 +00:00
lda #$0 ; start on page1
2022-09-26 03:16:32 +00:00
sta PAGE
parallax_forever:
2022-09-26 03:24:43 +00:00
inc FRAME ; increment frame
lda FRAME ; also have frame/2 and frame/4
2022-09-26 03:16:32 +00:00
lsr
sta FRAME2
lsr
sta FRAME4
;==========================
; flip page
2022-09-26 03:24:43 +00:00
lda PAGE ; get current page
pha ; save for later
2022-09-26 03:16:32 +00:00
2022-09-26 03:24:43 +00:00
lsr ; switch visible page
2022-09-26 03:16:32 +00:00
lsr
tay
lda PAGE1,Y
2022-09-26 03:24:43 +00:00
pla ; save old draw page
2022-09-26 03:16:32 +00:00
2022-09-26 03:24:43 +00:00
eor #$4 ; toggle to other draw page
2022-09-26 03:16:32 +00:00
sta PAGE
;========================
; setup for 23 lines
2022-09-26 03:24:43 +00:00
ldx #23 ; 23 lines (double high)
2022-09-26 03:16:32 +00:00
yloop:
;==============
; point GBASL/GBSAH to current line
2022-09-26 03:24:43 +00:00
txa ; get line addr in GBASL/H
2022-09-26 03:16:32 +00:00
jsr GBASCALC
lda GBASH
2022-09-26 03:24:43 +00:00
2022-09-26 03:16:32 +00:00
clc
2022-09-26 03:24:43 +00:00
adc PAGE ; adjust for page
2022-09-26 03:16:32 +00:00
sta GBASH
;==============
; current column (work backwards)
2022-09-26 03:24:43 +00:00
ldy #39
2022-09-26 03:16:32 +00:00
xloop:
2022-09-26 03:24:43 +00:00
lda #0 ; default color black
2022-09-26 03:16:32 +00:00
sta COLORS
; calculate colors
; color = (XX-FRAME)^(YY)
;===========================
; SMALL
2022-09-26 03:24:43 +00:00
sec ; subtract frame from Y
2022-09-26 03:16:32 +00:00
tya
sbc FRAME4
sta X2
txa
eor X2
and #$2
beq skip_color_small
lda #$4c
; lda #$1b
sta COLORS
skip_color_small:
;===========================
; MEDIUM
sec ; subtract frame from Y
tya
sbc FRAME2
sta X2
txa
clc
adc #1
eor X2
and #$4
beq skip_color_medium
lda #$26
sta COLORS
skip_color_medium:
;===========================
; LARGE
sec ; subtract frame from Y
tya
sbc FRAME
sta X2
txa
clc
adc #2
eor X2
and #$8
beq skip_color_large
lda #$1B
; lda #$4c
sta COLORS
skip_color_large:
;========================
; actually draw color
2022-09-26 03:24:43 +00:00
lda COLORS ; store out pixel
2022-09-26 03:16:32 +00:00
sta (GBASL),Y
2022-09-26 03:24:43 +00:00
dey ; loop for X-coord
bpl xloop ;
2022-09-26 03:16:32 +00:00
2022-09-26 03:24:43 +00:00
dex ; loop for Y-coord
2022-09-26 03:16:32 +00:00
2022-09-26 03:24:43 +00:00
bpl yloop ;
2022-09-26 03:16:32 +00:00
2022-09-26 03:24:43 +00:00
bmi parallax_forever ; bra
2022-09-26 03:16:32 +00:00
; for bot
2022-09-26 03:24:43 +00:00
; $3F5 - 125 + 3 = $37B
2022-09-26 03:16:32 +00:00
jmp parallax