.include "zp.inc" ;================================ ; Clear screen and setup graphics ;================================ jsr set_gr_page0 bit FULLGR jsr clear_screens_notext ; clear top/bottom of page 0/1 lda #$4 sta DRAW_PAGE lda #demo_rle sta GBASH ; Load offscreen lda #<$c00 sta BASL lda #>$c00 sta BASH jsr load_rle_gr demo_loop: ;========== ; Fade in ;========== jsr fade_in ;========================================== ; Make sure page0 and page1 show same image ;========================================== jsr gr_copy_to_current ;=================== ; Scroll the message ;=================== ; lda #255 ; jsr WAIT lda #>deater_scroll sta INH lda #scroll_row1 sta OUTH decompress_scroll_loop: jsr scroll_load_and_increment ; load compressed value cmp #$A1 ; EOF marker beq done_decompress_scroll ; if EOF, exit pha ; save and #$f0 ; mask cmp #$a0 ; see if special AX beq decompress_scroll_special pla ; note, PLA sets flags! ldx #$1 ; only want to print 1 bne decompress_scroll_run decompress_scroll_special: pla and #$0f ; check if was A0 bne decompress_scroll_color ; if A0 need to read run, color decompress_scroll_large: jsr scroll_load_and_increment ; get run length decompress_scroll_color: tax ; put runlen into X jsr scroll_load_and_increment ; get color decompress_scroll_run: sta (OUTL),Y pha clc ; increment 16-bit pointer lda OUTL adc #$1 sta OUTL lda OUTH adc #$0 sta OUTH pla dex ; repeat for X times bne decompress_scroll_run beq decompress_scroll_loop ; get next run done_decompress_scroll: rts scroll_load_and_increment: lda (INL),Y ; load and increment 16-bit pointer pha clc lda INL adc #$1 sta INL lda INH adc #$0 sta INH pla rts ;=============================================== ; Variables ;=============================================== .include "deater_scroll.inc"