chiptune_player: move volume bars to own file

This commit is contained in:
Vince Weaver 2018-02-19 23:05:02 -05:00
parent 1c0b3a7475
commit 345efc18bb
3 changed files with 225 additions and 224 deletions

View File

@ -8,6 +8,7 @@ all: chiptune_player.dsk
chiptune_player.dsk: CHIPTUNE_PLAYER OUT.0
$(DOS33) -y chiptune_player.dsk BSAVE -a 0x1000 CHIPTUNE_PLAYER
$(DOS33) -y chiptune_player.dsk SAVE B OUT.0
$(DOS33) -y chiptune_player.dsk SAVE B OUT.LZ4
# $(DOS33) -y chiptune_player.dsk BSAVE -a 0x6000 OUT.0
@ -18,7 +19,7 @@ chiptune_player.o: chiptune_player.s \
../asm_routines/mockingboard.s \
../asm_routines/dos33_routines.s \
../asm_routines/lz4_decode.s \
rasterbars.s \
rasterbars.s volume_bars.s \
chip_title.inc zp.inc
ca65 -o chiptune_player.o chiptune_player.s -l chiptune_player.lst

View File

@ -2,6 +2,7 @@
.include "zp.inc"
LZ4_BUFFER EQU $4000
CHUNK_BUFFER EQU $6000
CHUNKSIZE EQU $3
@ -300,228 +301,6 @@ done_interrupt:
rti
;==============================
;==============================
; Draw volume bars
;==============================
;==============================
volume_bars:
; hline Y,V2 at A
; top line
lda #COLOR_BOTH_GREY
sta COLOR ; remove for crazy effect
ldy #12
lda #26
sta V2
lda #6
jsr hlin_double
; middle
lda #8
middle_loop:
pha
cmp #8
beq middle_black
cmp #26
beq middle_black
cmp #10
bne not_top
ldx #$3B ; pink/purple
stx A_COLOR
ldx #$7E ; light-blue/aqua
stx B_COLOR
ldx #$CD ; light-green/yellow
stx C_COLOR
jmp calc_volume
not_top:
ldx #COLOR_BOTH_RED
stx A_COLOR
ldx #COLOR_BOTH_DARKBLUE
stx B_COLOR
ldx #COLOR_BOTH_DARKGREEN
stx C_COLOR
calc_volume:
; 10 14/15 24-x = 14 PLUS=none, zero=bottom, neg=all
; 12 12/13 12
; 14 10/11 10
; 16 8/9 8
; 18 6/7 6
; 20 4/5 4
; 22 2/3 2
; 24 0/1 0
; FIXME: there must be a way to make this faster
mod_a:
pha
sec
eor #$ff ; negate
adc #24 ; 24-A
sec
sbc A_VOLUME
bmi mod_b
beq mod_a_bottom
mod_a_zero:
lda #0
beq done_a
mod_a_bottom:
lda A_COLOR
and #$f0
done_a:
sta A_COLOR
mod_b:
pla
pha
sec
eor #$ff ; negate
adc #24 ; 24-A
sec
sbc B_VOLUME
bmi mod_c
beq mod_b_bottom
mod_b_zero:
lda #0
beq done_b
mod_b_bottom:
lda B_COLOR
and #$f0
done_b:
sta B_COLOR
mod_c:
pla
pha
sec
eor #$ff ; negate
adc #24 ; 24-A
sec
sbc C_VOLUME
bmi mod_d
beq mod_c_bottom
mod_c_zero:
lda #0
beq done_c
mod_c_bottom:
lda C_COLOR
and #$f0
done_c:
sta C_COLOR
mod_d:
pla
jmp middle_color_done
middle_black:
ldx #COLOR_BOTH_BLACK
stx A_COLOR
stx B_COLOR
stx C_COLOR
middle_color_done:
; left border
ldy #COLOR_BOTH_GREY
sty COLOR
ldy #12
sty V2
ldy #12
jsr hlin_double
; border space
lda #COLOR_BOTH_BLACK
sta COLOR
ldx #1
jsr hlin_double_continue
; A volume
lda A_COLOR
sta COLOR
ldx #3
jsr hlin_double_continue
; A space
lda #COLOR_BOTH_BLACK
sta COLOR
ldx #1
jsr hlin_double_continue
; B volume
lda B_COLOR
sta COLOR
ldx #3
jsr hlin_double_continue
; B space
lda #COLOR_BOTH_BLACK
sta COLOR
ldx #1
jsr hlin_double_continue
; C volume
lda C_COLOR
sta COLOR
ldx #3
jsr hlin_double_continue
; C space
lda #COLOR_BOTH_BLACK
sta COLOR
ldx #1
jsr hlin_double_continue
; Right border
lda #COLOR_BOTH_GREY
sta COLOR
ldx #1
jsr hlin_double_continue
pla
clc
adc #2
cmp #28
beq bottom_line
jmp middle_loop
bottom_line:
; bottom line
lda #COLOR_BOTH_GREY
sta COLOR
ldy #12
lda #26
sta V2
lda #28
jsr hlin_double
rts
;=================
; load a new song
;=================
@ -635,7 +414,7 @@ bloop3:
.include "../asm_routines/gr_hlin.s"
.include "../asm_routines/lz4_decode.s"
.include "rasterbars.s"
.include "volume_bars.s"
;===========
; File info

View File

@ -0,0 +1,221 @@
;==============================
;==============================
; Draw volume bars
;==============================
;==============================
volume_bars:
; hline Y,V2 at A
; top line
lda #COLOR_BOTH_GREY
sta COLOR ; remove for crazy effect
ldy #12
lda #26
sta V2
lda #6
jsr hlin_double
; middle
lda #8
middle_loop:
pha
cmp #8
beq middle_black
cmp #26
beq middle_black
cmp #10
bne not_top
ldx #$3B ; pink/purple
stx A_COLOR
ldx #$7E ; light-blue/aqua
stx B_COLOR
ldx #$CD ; light-green/yellow
stx C_COLOR
jmp calc_volume
not_top:
ldx #COLOR_BOTH_RED
stx A_COLOR
ldx #COLOR_BOTH_DARKBLUE
stx B_COLOR
ldx #COLOR_BOTH_DARKGREEN
stx C_COLOR
calc_volume:
; 10 14/15 24-x = 14 PLUS=none, zero=bottom, neg=all
; 12 12/13 12
; 14 10/11 10
; 16 8/9 8
; 18 6/7 6
; 20 4/5 4
; 22 2/3 2
; 24 0/1 0
; FIXME: there must be a way to make this faster
mod_a:
pha
sec
eor #$ff ; negate
adc #24 ; 24-A
sec
sbc A_VOLUME
bmi mod_b
beq mod_a_bottom
mod_a_zero:
lda #0
beq done_a
mod_a_bottom:
lda A_COLOR
and #$f0
done_a:
sta A_COLOR
mod_b:
pla
pha
sec
eor #$ff ; negate
adc #24 ; 24-A
sec
sbc B_VOLUME
bmi mod_c
beq mod_b_bottom
mod_b_zero:
lda #0
beq done_b
mod_b_bottom:
lda B_COLOR
and #$f0
done_b:
sta B_COLOR
mod_c:
pla
pha
sec
eor #$ff ; negate
adc #24 ; 24-A
sec
sbc C_VOLUME
bmi mod_d
beq mod_c_bottom
mod_c_zero:
lda #0
beq done_c
mod_c_bottom:
lda C_COLOR
and #$f0
done_c:
sta C_COLOR
mod_d:
pla
jmp middle_color_done
middle_black:
ldx #COLOR_BOTH_BLACK
stx A_COLOR
stx B_COLOR
stx C_COLOR
middle_color_done:
; left border
ldy #COLOR_BOTH_GREY
sty COLOR
ldy #12
sty V2
ldy #12
jsr hlin_double
; border space
lda #COLOR_BOTH_BLACK
sta COLOR
ldx #1
jsr hlin_double_continue
; A volume
lda A_COLOR
sta COLOR
ldx #3
jsr hlin_double_continue
; A space
lda #COLOR_BOTH_BLACK
sta COLOR
ldx #1
jsr hlin_double_continue
; B volume
lda B_COLOR
sta COLOR
ldx #3
jsr hlin_double_continue
; B space
lda #COLOR_BOTH_BLACK
sta COLOR
ldx #1
jsr hlin_double_continue
; C volume
lda C_COLOR
sta COLOR
ldx #3
jsr hlin_double_continue
; C space
lda #COLOR_BOTH_BLACK
sta COLOR
ldx #1
jsr hlin_double_continue
; Right border
lda #COLOR_BOTH_GREY
sta COLOR
ldx #1
jsr hlin_double_continue
pla
clc
adc #2
cmp #28
beq bottom_line
jmp middle_loop
bottom_line:
; bottom line
lda #COLOR_BOTH_GREY
sta COLOR
ldy #12
lda #26
sta V2
lda #28
jsr hlin_double
rts