chiptune: big break before trying to add copy code

This commit is contained in:
Vince Weaver 2018-02-24 16:57:20 -05:00
parent 5f14b954f4
commit f0c93935e2
6 changed files with 166 additions and 146 deletions

View File

@ -36,7 +36,7 @@
;COUNT EQU $06 ;COUNT EQU $06
;DELTA EQU $08 ;DELTA EQU $08
orgoff EQU $5C00 ; offset of first unpacked byte orgoff EQU $5E00 ; offset of first unpacked byte
;====================== ;======================
; LZ4 decode ; LZ4 decode

View File

@ -1,5 +1,4 @@
+ Print time
+ LZ4 decompression
+ Loop support + Loop support
+ Right/Left arrows on screen + Right/Left arrows on screen
+ Keyboard, Right/Left/Pause
+ Calculate maximum decode time for songs

Binary file not shown.

View File

@ -1,11 +1,10 @@
; VMW Chiptune Player ; VMW Chiptune Player
.include "zp.inc" .include "zp.inc"
; program is 4k, so from 0xc00 to 0x1C00 ; program is ~4k, so from 0xc00 to 0x1C00
LZ4_BUFFER EQU $1C00 ; $1C00 - $5C00, 16k for now
LZ4_BUFFER EQU $1C00 ; 16k for now, FIXME: expand CHUNK_BUFFER EQU $5E00 ; $5E00 - $9600, 14k, $3800
CHUNK_BUFFER EQU $5C00 ; $5C00 - $9600, 14k, $3A00 ; trying not to hit DOS at $9600
; trying not to hit DOS at 9600
; Reserve 3 chunks plus spare (14k) ; Reserve 3 chunks plus spare (14k)
CHUNKSIZE EQU $3 CHUNKSIZE EQU $3
@ -375,6 +374,8 @@ new_song:
sta A_VOLUME sta A_VOLUME
sta B_VOLUME sta B_VOLUME
sta C_VOLUME sta C_VOLUME
sta COPY_OFFSET
sta DECODER_STATE
;=========================== ;===========================
; Print loading message ; Print loading message
@ -516,10 +517,24 @@ bloop22:
; PLAY B (copying C) ; PLAY B (copying C)
; PLAY D (decompressing A/B/C) ; PLAY D (decompressing A/B/C)
;======================== ;========================
; page copy ; page copy
;======================== ;========================
; want to copy:
; SRC: chunk_buffer+(2*256)+(COPY_OFFSET*3*256)
; DST: chunk_buffer+$2A00+(COPY_OFFSET*256)
page_copy: page_copy:
clc ; 2
lda #>(CHUNK_BUFFER+512) ; 3
adc COPY_OFFSET ; 3
adc COPY_OFFSET ; 3
adc COPY_OFFSET ; 3
sta page_copy_loop+2 ; self modify ; 5
lda #>(CHUNK_BUFFER+$2A00) ; 2
adc COPY_OFFSET ; 3
sta page_copy_loop+5 ; self modify ; 5
ldx #$00 ; 2 ldx #$00 ; 2
page_copy_loop: page_copy_loop:
@ -529,7 +544,7 @@ page_copy_loop:
bne page_copy_loop ; 2nt/3 bne page_copy_loop ; 2nt/3
rts ; 6 rts ; 6
;====================== ;======================
; 2+14*256+6= 3592 ; 2+14*256+6+29= 3621
;========== ;==========
; filenames ; filenames

View File

@ -5,49 +5,48 @@
;============================== ;==============================
volume_bars: volume_bars:
; hline Y,V2 at A ; hline Y,V2 at A
; top line ; top line
lda #COLOR_BOTH_GREY lda #COLOR_BOTH_GREY ; 2
sta COLOR ; remove for crazy effect sta COLOR ; remove for crazy effect ; 3
ldy #12 ldy #12 ; 2
lda #26 lda #26 ; 2
sta V2 sta V2 ; 3
lda #6 lda #6 ; 2
jsr hlin_double jsr hlin_double ; 6
; 63+14*16=287
;=====================
; 307
; middle ; middle
lda #8 lda #8 ; 2
middle_loop: middle_loop:
pha pha ; 3
cmp #8 cmp #8 ; 2
beq middle_black beq middle_black ; 2nt/3
cmp #26 cmp #26 ; 2
beq middle_black beq middle_black ; 2nt/3
cmp #10 cmp #10 ; 2
bne not_top bne not_top ; 2nt/3
ldx #$3B ; pink/purple ldx #$3B ; pink/purple ; 2
stx A_COLOR stx A_COLOR ; 3
ldx #$7E ; light-blue/aqua ldx #$7E ; light-blue/aqua ; 2
stx B_COLOR stx B_COLOR ; 3
ldx #$CD ; light-green/yellow ldx #$CD ; light-green/yellow ; 2
stx C_COLOR stx C_COLOR ; 3
jmp calc_volume jmp calc_volume ; 3
not_top: not_top:
ldx #COLOR_BOTH_RED ldx #COLOR_BOTH_RED ; 2
stx A_COLOR stx A_COLOR ; 3
ldx #COLOR_BOTH_DARKBLUE ldx #COLOR_BOTH_DARKBLUE ; 2
stx B_COLOR stx B_COLOR ; 3
ldx #COLOR_BOTH_DARKGREEN ldx #COLOR_BOTH_DARKGREEN ; 2
stx C_COLOR stx C_COLOR ; 3
calc_volume: calc_volume:
@ -63,159 +62,165 @@ calc_volume:
; FIXME: there must be a way to make this faster ; FIXME: there must be a way to make this faster
mod_a: mod_a:
pha pha ; 3
sec sec ; 2
eor #$ff ; negate eor #$ff ; negate ; 2
adc #24 ; 24-A adc #24 ; 24-A ; 2
sec sec ; 2
sbc A_VOLUME sbc A_VOLUME ; 2
bmi mod_b bmi mod_b ; 2nt/3
beq mod_a_bottom beq mod_a_bottom ; 2nt/3
mod_a_zero: mod_a_zero:
lda #0 lda #0 ; 2
beq done_a beq done_a ; 2nt/3
mod_a_bottom: mod_a_bottom:
lda A_COLOR lda A_COLOR ; 2
and #$f0 and #$f0 ; 2
done_a: done_a:
sta A_COLOR sta A_COLOR ; 2
mod_b: mod_b:
pla pla ; 4
pha pha ; 3
sec sec ; 2
eor #$ff ; negate eor #$ff ; negate ; 2
adc #24 ; 24-A adc #24 ; 24-A ; 2
sec sec ; 2
sbc B_VOLUME sbc B_VOLUME ; 2
bmi mod_c bmi mod_c ; 2nt/3
beq mod_b_bottom beq mod_b_bottom ; 2nt/3
mod_b_zero: mod_b_zero:
lda #0 lda #0 ; 2
beq done_b beq done_b ; 2nt/3
mod_b_bottom: mod_b_bottom:
lda B_COLOR lda B_COLOR ; 3
and #$f0 and #$f0 ; 2
done_b: done_b:
sta B_COLOR sta B_COLOR ; 3
mod_c: mod_c:
pla pla ; 4
pha pha ; 3
sec sec ; 2
eor #$ff ; negate eor #$ff ; negate ; 2
adc #24 ; 24-A adc #24 ; 24-A ; 2
sec sec ; 2
sbc C_VOLUME sbc C_VOLUME ; 2
bmi mod_d bmi mod_d ; 2nt/3
beq mod_c_bottom beq mod_c_bottom ; 2nt/3
mod_c_zero: mod_c_zero:
lda #0 lda #0 ; 2
beq done_c beq done_c ; 2nt/3
mod_c_bottom: mod_c_bottom:
lda C_COLOR lda C_COLOR ; 3
and #$f0 and #$f0 ; 2
done_c: done_c:
sta C_COLOR sta C_COLOR ; 3
mod_d: mod_d:
pla pla ; 4
jmp middle_color_done jmp middle_color_done ; 3
middle_black: middle_black:
ldx #COLOR_BOTH_BLACK ldx #COLOR_BOTH_BLACK ; 2
stx A_COLOR stx A_COLOR ; 3
stx B_COLOR stx B_COLOR ; 3
stx C_COLOR stx C_COLOR ; 3
middle_color_done: middle_color_done:
; left border ; left border
ldy #COLOR_BOTH_GREY ldy #COLOR_BOTH_GREY ; 2
sty COLOR sty COLOR ; 3
ldy #12 ldy #12 ; 2
sty V2 sty V2 ; 3
ldy #12 ldy #12 ; 2
jsr hlin_double
jsr hlin_double ; 6
; 63+1*16=79
; border space ; border space
lda #COLOR_BOTH_BLACK lda #COLOR_BOTH_BLACK ; 2
sta COLOR sta COLOR ; 3
ldx #1 ldx #1 ; 2
jsr hlin_double_continue jsr hlin_double_continue ; 10+1*16=27
; A volume ; A volume
lda A_COLOR lda A_COLOR ; 3
sta COLOR sta COLOR ; 3
ldx #3 ldx #3 ; 2
jsr hlin_double_continue jsr hlin_double_continue ; 10+3*16=58
; A space ; A space
lda #COLOR_BOTH_BLACK lda #COLOR_BOTH_BLACK ; 2
sta COLOR sta COLOR ; 3
ldx #1
jsr hlin_double_continue
ldx #1 ; 2
jsr hlin_double_continue ; 6
; 10+1*16=27
; B volume ; B volume
lda B_COLOR lda B_COLOR ; 3
sta COLOR sta COLOR ; 3
ldx #3
jsr hlin_double_continue
ldx #3 ; 2
jsr hlin_double_continue ; 6
; 10+3*16=58
; B space ; B space
lda #COLOR_BOTH_BLACK lda #COLOR_BOTH_BLACK ; 2
sta COLOR sta COLOR ; 3
ldx #1 ldx #1 ; 2
jsr hlin_double_continue jsr hlin_double_continue ; 6
; 10+1*16=27
; C volume ; C volume
lda C_COLOR lda C_COLOR ; 3
sta COLOR sta COLOR ; 3
ldx #3 ldx #3 ; 2
jsr hlin_double_continue jsr hlin_double_continue ; 6
; 10+3*16=58
; C space ; C space
lda #COLOR_BOTH_BLACK lda #COLOR_BOTH_BLACK ; 2
sta COLOR sta COLOR ; 3
ldx #1
jsr hlin_double_continue
ldx #1 ; 2
jsr hlin_double_continue ; 6
; 10+1*16=27
; Right border ; Right border
lda #COLOR_BOTH_GREY lda #COLOR_BOTH_GREY ; 2
sta COLOR sta COLOR ; 3
ldx #1 ldx #1 ; 2
jsr hlin_double_continue jsr hlin_double_continue ; 6
; 10+1*16=27
pla pla ; 4
clc clc ; 2
adc #2 adc #2 ; 2
cmp #28 cmp #28 ; 2
beq bottom_line beq bottom_line ; 2nt/3
jmp middle_loop jmp middle_loop ; 3
bottom_line: bottom_line:
; bottom line ; bottom line
lda #COLOR_BOTH_GREY lda #COLOR_BOTH_GREY ; 2
sta COLOR sta COLOR ; 3
ldy #12 ldy #12 ; 2
lda #26 lda #26 ; 2
sta V2 sta V2 ; 3
lda #28 lda #28 ; 2
jsr hlin_double jsr hlin_double ; 6
; 63+14*16=287
rts rts ; 6
; 309+ 684*10 + 313 = roughly worst case 7462

View File

@ -66,7 +66,8 @@ C_VOLUME EQU $7A
ENVELOPE_FINE EQU $7B ENVELOPE_FINE EQU $7B
ENVELOPE_COARSE EQU $7C ENVELOPE_COARSE EQU $7C
ENVELOPE_SHAPE EQU $7D ENVELOPE_SHAPE EQU $7D
COPY_OFFSET EQU $7E
DECODER_STATE EQU $7F
;SPACEY_I EQU $70 ;SPACEY_I EQU $70
;SPACEY_F EQU $71 ;SPACEY_F EQU $71
;CY_I EQU $72 ;CY_I EQU $72