; ; progressBar ; A simple GUI element to show progress ; ; Created by Quinn Dunki on 7/17/23 ; BORDER = $FF FILL = $99 EMPTY = $ee ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; createProgressBar ; ; ; createProgressBar: lda #1 sta currentProgressBar+CBR_ACTIVE rts ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; advanceProgressBar ; ; A = Bytes to advance ; ; Trashes SCRATCHL ; advanceProgressBar: sta SCRATCHL lda currentProgressBar+CBR_CURRENT clc adc SCRATCHL cmp currentProgressBar+CBR_FINAL beq advanceProgressBarDone bcs advanceProgressBarClamp advanceProgressBarDone: sta currentProgressBar+CBR_CURRENT rts advanceProgressBarClamp: lda currentProgressBar+CBR_FINAL bra advanceProgressBarDone ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; setProgressBar ; ; A = New byte value ; setProgressBar: sta currentProgressBar+CBR_CURRENT rts ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; renderProgressBar ; ; Not very fast ; renderProgressBar: SAVE_AXY ldy #0 ldx currentProgressBar+CBR_VRAM BITS8A lda #BORDER ; Left border sta SHADOWVRAMBANK,x sta SHADOWVRAMBANK+160,x sta SHADOWVRAMBANK+160*2,x sta SHADOWVRAMBANK+160*3,x sta SHADOWVRAMBANK+160*4,x sta SHADOWVRAMBANK+160*5,x sta SHADOWVRAMBANK+160*6,x sta SHADOWVRAMBANK+160*7,x inx renderProgressBarLoop: lda #BORDER sta SHADOWVRAMBANK,x ; Top border sta SHADOWVRAMBANK+160*7,x ; Bottom border cpy currentProgressBar+CBR_CURRENT bcs renderProgressBarEmpty lda #FILL renderProgressBarFill: sta SHADOWVRAMBANK+160*1,x ; Bar sta SHADOWVRAMBANK+160*2,x sta SHADOWVRAMBANK+160*3,x sta SHADOWVRAMBANK+160*4,x sta SHADOWVRAMBANK+160*5,x sta SHADOWVRAMBANK+160*6,x inx iny cpy currentProgressBar+CBR_FINAL bne renderProgressBarLoop lda #BORDER ; Right border sta SHADOWVRAMBANK,x sta SHADOWVRAMBANK+160,x sta SHADOWVRAMBANK+160*2,x sta SHADOWVRAMBANK+160*3,x sta SHADOWVRAMBANK+160*4,x sta SHADOWVRAMBANK+160*5,x sta SHADOWVRAMBANK+160*6,x sta SHADOWVRAMBANK+160*7,x BITS16 RESTORE_AXY rts renderProgressBarEmpty: .a8 lda #EMPTY bra renderProgressBarFill CBR_ACTIVE = 0 CBR_CURRENT = 2 CBR_FINAL = 4 CBR_VRAM = 6 currentProgressBar: .word 0 ; Active .word 1 ; Current progress in bytes .word 25 ; Final progress in bytes .word $2117 ; VRAM position (top left)