diff --git a/chiptune_player/README.chiptune b/chiptune_player/README.chiptune index 3fc624bc..1cc76fdf 100644 --- a/chiptune_player/README.chiptune +++ b/chiptune_player/README.chiptune @@ -330,8 +330,9 @@ Thought it only took 1s max? Not in face of interrupts. Every 20,000 an interrupt 1,500 for music 7,500 for volume bars - 1,794 for raster bars + 16,200 (!)for raster bars 2,000 for misc rest + Roughly 13,000 cycles, leaving only 7000 to userspace If takes 700,000 cycles to decode a block, will take 100 diff --git a/chiptune_player/chiptune_player.s b/chiptune_player/chiptune_player.s index 3ab749bf..9bb0a456 100644 --- a/chiptune_player/chiptune_player.s +++ b/chiptune_player/chiptune_player.s @@ -7,6 +7,8 @@ UNPACK_BUFFER EQU $5E00 ; $5E00 - $9600, 14k, $3800 ; trying not to hit DOS at $9600 ; Reserve 3 chunks plus spare (14k) +NUM_FILES EQU 15 + ;============================= ; Setup ;============================= @@ -24,6 +26,9 @@ UNPACK_BUFFER EQU $5E00 ; $5E00 - $9600, 14k, $3800 sta MB_CHUNK_OFFSET sta DECODE_ERROR + lda #1 + sta WHICH_FILE + ; print detection message lda #done_message +; sta OUTH - lda #21 - sta CV - lda #done_message - sta OUTH +; jsr print_both_pages - jsr print_both_pages + jsr increment_file + jsr new_song + + jmp main_loop forever_loop: jmp forever_loop - ;================= ; load a new song ;================= @@ -271,10 +282,23 @@ new_song: ; Load in KRW file ;=========================== - lda #krw_file - sta INH + jsr get_filename + + lda #8 + sta CH + lda #21 + sta CV + + lda INL + sta OUTL + lda INH + sta OUTH + jsr print_both_pages + +; lda #krw_file +; sta INH disk_buff EQU LZ4_BUFFER read_size EQU $4000 @@ -337,7 +361,7 @@ read_size EQU $4000 jsr setup_next_subsong - + cli ; start playing rts @@ -437,11 +461,79 @@ page_copy_loop: ;====================== ; 2+14*256+6+29= 3621 + + ;================== + ; Get filename + ;================== + ; WHICH_FILE holds number + ; MAX_FILES has max + ; Scroll through until find + ; point INH:INL to it +get_filename: + + ldy #0 + ldx WHICH_FILE + + lda #krw_file + sta INH + +get_filename_loop: + cpx #0 + beq filename_found + +inner_loop: + iny + lda (INL),Y + bne inner_loop + + iny + + dex + jmp get_filename_loop + +filename_found: + tya + clc + adc INL + sta INL + lda INH + adc #0 + sta INH + + rts + + ;=============================== + ; Increment file we want to load + ;=============================== +increment_file: + inc WHICH_FILE + lda WHICH_FILE + cmp NUM_FILES + bne done_increment + lda #0 + sta WHICH_FILE +done_increment: + rts + + ;=============================== + ; Decrement file we want to load + ;=============================== +decrement_file: + dec WHICH_FILE + bpl done_decrement + lda #(NUM_FILES-1) + sta WHICH_FILE +done_decrement: + rts + ;========== ; filenames ;========== krw_file: -.asciiz "INTRO2.KRW" + .asciiz "INTRO2.KRW" + .asciiz "KORO.KRW" .asciiz "DEATH2.KRW" .asciiz "DEMO4.KRW" .asciiz "WAVE.KRW" @@ -482,7 +574,7 @@ mocking_message: .asciiz "LOOKING FOR MOCKINGBOARD IN SLOT #4" not_message: .byte "NOT " found_message: .asciiz "FOUND" done_message: .asciiz "DONE PLAYING" -loading_message: .asciiz "LOADING..." +loading_message: .asciiz "LOADING" ;============ ; graphics diff --git a/chiptune_player/rasterbars.s b/chiptune_player/rasterbars.s index 3109d7f4..6608bc99 100644 --- a/chiptune_player/rasterbars.s +++ b/chiptune_player/rasterbars.s @@ -22,11 +22,13 @@ draw_rasters: ldy #(NUM_ROWS-1) ; 2 lda #0 ; 2 - init_rows: sta row_color,Y ; 5 dey ; 2 bpl init_rows ; 2nt/3 + ;============== + ; 4+20*10 = 204 + ;================ ; set colors @@ -55,6 +57,9 @@ init_rows: lda #COLOR_BOTH_RED ; red ; 2 jsr set_row_color ; 6+136 + ;============== + ; 8 * 144 + ; 1152 ;================= ; draw rows @@ -80,7 +85,9 @@ draw_rows_loop: draw_rows_skip: dey ; 2 bpl draw_rows_loop ; 3/2nt - + ;============= + ; 20 * 741 + ; 14,820 ;================== ; update y pointer ;================== @@ -93,8 +100,13 @@ not_there: sty SCREEN_Y ; 3 rts ; 6 + ;=========== - ; 1794 + ; 24 + + ;============================= + ; total= 16,200 + ;=================== ;=================== ; set_row_color diff --git a/chiptune_player/zp.inc b/chiptune_player/zp.inc index 88c5e106..ac577981 100644 --- a/chiptune_player/zp.inc +++ b/chiptune_player/zp.inc @@ -35,7 +35,9 @@ FILEML EQU $64 FILEMH EQU $65 ;TURNING EQU $60 ;SCREEN_X EQU $61 ; not used? -SCREEN_Y EQU $62 +SCREEN_Y EQU $67 +WHICH_FILE EQU $68 + ;ANGLE EQU $63 ;HORIZ_SCALE_I EQU $64 ;HORIZ_SCALE_F EQU $65