From d58d2738c80a71bd2cb9af81e1c14ffe7eda51a2 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Fri, 15 Dec 2017 16:19:01 -0500 Subject: [PATCH] mode7: have assembly working with new compressed rle --- gr-utils/png2rle.c | 2 +- mode7_demo/Makefile | 33 + mode7_demo/apple2_1000.inc | 12 + mode7_demo/mode7_demo.dsk | Bin 0 -> 143360 bytes mode7_demo/mode7_demo.s | 32 + mode7_demo/mode7_demo_backgrounds.inc | 53 ++ mode7_demo/utils.s | 776 ++++++++++++++++++++++++ mode7_demo/zp.inc | 179 ++++++ tfv/tfv.s | 8 - tfv/tfv_backgrounds.inc | 832 +++++++++++++------------- tfv/tfv_flying.s | 2 +- tfv/tfv_old.s | 98 +++ tfv/tfv_utils.s | 97 +-- 13 files changed, 1661 insertions(+), 463 deletions(-) create mode 100644 mode7_demo/Makefile create mode 100644 mode7_demo/apple2_1000.inc create mode 100644 mode7_demo/mode7_demo.dsk create mode 100644 mode7_demo/mode7_demo.s create mode 100644 mode7_demo/mode7_demo_backgrounds.inc create mode 100644 mode7_demo/utils.s create mode 100644 mode7_demo/zp.inc create mode 100644 tfv/tfv_old.s diff --git a/gr-utils/png2rle.c b/gr-utils/png2rle.c index 26e3f980..9d60c87e 100644 --- a/gr-utils/png2rle.c +++ b/gr-utils/png2rle.c @@ -268,7 +268,7 @@ int rle_smaller(int out_type, char *varname, fprintf(stdout,"0xA1,"); fprintf(stdout,"\t};\n"); } else { - fprintf(stdout,"\t.byte $A1\n"); + fprintf(stdout,"\n\t.byte $A1\n"); } size+=1; diff --git a/mode7_demo/Makefile b/mode7_demo/Makefile new file mode 100644 index 00000000..8f6c2557 --- /dev/null +++ b/mode7_demo/Makefile @@ -0,0 +1,33 @@ +include ../Makefile.inc + +DOS33 = ../dos33fs-utils/dos33 +PNG2GR = ../gr-utils/png2gr +PNG2RLE = ../gr-utils/png2rle + +all: mode7_demo.dsk + +$(DOS33): + cd ../dos33fs-utils && make + +mode7_demo.dsk: $(DOS33) MODE7_DEMO + $(DOS33) -y mode7_demo.dsk BSAVE -a 0x1000 MODE7_DEMO + + + +### + +MODE7_DEMO: mode7_demo.o + ld65 -o MODE7_DEMO mode7_demo.o -C ./apple2_1000.inc + +mode7_demo.o: mode7_demo.s mode7_demo_backgrounds.inc utils.s + ca65 -o mode7_demo.o mode7_demo.s -l mode7_demo.lst + + +mode7_demo_backgrounds.inc: $(PNG2RLE) \ + ../tfv/demo.png + $(PNG2RLE) asm ../tfv/demo.png demo_rle > mode7_demo_backgrounds.inc + + +clean: + rm -f *~ *.o MODE7_DEMO *.lst + diff --git a/mode7_demo/apple2_1000.inc b/mode7_demo/apple2_1000.inc new file mode 100644 index 00000000..e22976de --- /dev/null +++ b/mode7_demo/apple2_1000.inc @@ -0,0 +1,12 @@ +MEMORY { + ZP: start = $00, size = $1A, type = rw; + RAM: start = $1000, size = $8E00, file = %O; +} + +SEGMENTS { +CODE: load = RAM, type = ro; +RODATA: load = RAM, type = ro; +DATA: load = RAM, type = rw; +BSS: load = RAM, type = bss, define = yes; +ZEROPAGE: load = ZP, type = zp; +} diff --git a/mode7_demo/mode7_demo.dsk b/mode7_demo/mode7_demo.dsk new file mode 100644 index 0000000000000000000000000000000000000000..39d02c791d8d81ef9ee6ed3bf0f86754419997d7 GIT binary patch literal 143360 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 literal 0 HcmV?d00001 diff --git a/mode7_demo/mode7_demo.s b/mode7_demo/mode7_demo.s new file mode 100644 index 00000000..2991e8eb --- /dev/null +++ b/mode7_demo/mode7_demo.s @@ -0,0 +1,32 @@ +.include "zp.inc" + + ;================================ + ; Clear screen and setup graphics + ;================================ + + jsr clear_screens ; clear top/bottom of page 0/1 + jsr set_gr_page0 + + lda #demo_rle + sta GBASH + + lda #<$400 + sta BASL + lda #>$400 + sta BASH + + jsr load_rle_gr + +loop_forever: + jmp loop_forever + + +;=============================================== +; External modules +;=============================================== + +.include "utils.s" + +.include "mode7_demo_backgrounds.inc" diff --git a/mode7_demo/mode7_demo_backgrounds.inc b/mode7_demo/mode7_demo_backgrounds.inc new file mode 100644 index 00000000..76eccb4b --- /dev/null +++ b/mode7_demo/mode7_demo_backgrounds.inc @@ -0,0 +1,53 @@ +demo_rle: .byte $28 ; ysize=40 + .byte $AF,$00, $A7,$CC, $40, $A0,$21,$00, $A4,$04, $CC,$CC, $44 + .byte $A0,$11,$00, $FF, $6F, $A3,$FF, $6F, $FF, $2F + .byte $FF, $6F,$6F, $FF, $2F,$2F, $FF, $50, $A3,$00 + .byte $C0, $CC, $4C, $44, $00, $FF, $6F,$6F + .byte $FF, $2F,$2F, $6F, $A3,$FF, $6F, $FF, $2F + .byte $FF,$FF, $50, $FF, $66, $F6, $6F, $F6 + .byte $66, $22, $FF, $22, $66, $FF, $66 + .byte $22, $2F, $FF, $55, $00,$00, $C0, $CC + .byte $4C, $44, $00,$00, $FF, $66, $FF, $66 + .byte $22, $2F, $66, $F6, $6F, $F6, $66 + .byte $22, $FF, $22, $FF, $55, $FF, $66 + .byte $A3,$FF, $66, $22, $FF, $22, $66, $FF + .byte $66, $22, $FF,$FF, $55, $00, $C0, $CC + .byte $4C, $44, $A3,$00, $FF, $66, $FF, $66 + .byte $22, $F2, $66, $A3,$FF, $66, $22, $FF + .byte $22, $FF, $55, $FF, $F6, $A3,$FF, $F6 + .byte $FF, $F2, $FF, $F6,$F6, $FF, $F2,$F2, $FF + .byte $55, $00, $CC,$CC, $44, $A4,$00, $FF, $F6,$F6 + .byte $FF, $F2,$F2, $F6, $A3,$FF, $F6, $FF, $F2 + .byte $FF,$FF, $55, $00, $AF,$05, $00, $CC,$CC, $44 + .byte $A5,$00, $AF,$05, $A3,$00, $A8,$80, $A6,$00, $CC,$CC, $44 + .byte $A0,$17,$00, $88,$88, $A4,$28, $B8, $28, $A3,$20, $A4,$00 + .byte $04,$04, $A0,$18,$00, $88, $22, $FB, $0B, $22 + .byte $B2, $22, $FB, $0B, $22, $00,$00, $60 + .byte $76, $A0,$14,$00, $10, $A5,$00, $88, $A4,$B2, $3B + .byte $32, $B2, $02,$02, $00, $60, $76, $07 + .byte $A0,$11,$00, $10, $00, $10, $11, $01, $A4,$00 + .byte $88, $55, $A5,$BB, $A3,$00, $60, $76, $07 + .byte $A6,$00, $D0, $0D, $00, $D0, $0D, $00 + .byte $D0, $A5,$00, $11, $A8,$00, $88, $85, $A3,$BB + .byte $B1, $0B, $00, $0D, $D0, $76, $07 + .byte $A5,$00, $D0, $DD, $D0,$D0, $DD, $D0,$D0, $DD + .byte $D0, $A3,$00, $01,$01, $11, $01,$01, $A5,$00, $80 + .byte $88, $98, $B8, $B3,$B3, $B0, $30, $33 + .byte $F3, $FF, $FD, $A3,$F0, $A3,$00, $DD, $A7,$BB + .byte $DD, $A4,$00, $10, $11, $10, $A6,$00, $88 + .byte $A3,$99, $9B, $BB,$BB, $9B, $93, $00, $FF,$FF + .byte $F7, $F0, $FF,$FF, $70, $00, $DD, $BB + .byte $BF, $B0, $BB, $BF, $B0, $BB, $DD + .byte $A3,$00, $10, $A3,$11, $10, $A5,$00, $08, $99 + .byte $B9, $A6,$99, $80, $A3,$8F, $FF,$FF, $0F, $07 + .byte $00, $DD, $DB, $BB, $3B, $33, $BB,$BB + .byte $DB, $DD, $A3,$00, $01,$01, $11, $01,$01, $A6,$00 + .byte $99, $BB, $A4,$99, $09, $80, $A4,$FF, $F7 + .byte $0F, $A3,$00, $DD,$DD, $A5,$BB, $DD,$DD, $A5,$00, $11 + .byte $A8,$00, $99, $BB, $A3,$B9, $99, $88, $A5,$FF + .byte $A5,$00, $0D, $00, $BB, $A3,$B1, $BB, $00 + .byte $0D, $A4,$00, $BB,$BB, $A7,$00, $99,$99, $A4,$9B, $FB + .byte $A6,$FF, $A8,$00, $BB,$BB, $A6,$00, $20, $22, $2B + .byte $0B, $A6,$00, $90, $A5,$99, $F9, $A7,$FF, $A5,$00 + .byte $20, $A6,$22, $A3,$20, $22,$22, $02, $A6,$00 + .byte $A1 diff --git a/mode7_demo/utils.s b/mode7_demo/utils.s new file mode 100644 index 00000000..005dbff8 --- /dev/null +++ b/mode7_demo/utils.s @@ -0,0 +1,776 @@ +;===================================================================== +;= ROUTINES +;===================================================================== + + +clear_screens: + ;=================================== + ; Clear top/bottom of page 0 + ;=================================== + + lda #$0 + sta DRAW_PAGE + jsr clear_top + jsr clear_bottom + + ;=================================== + ; Clear top/bottom of page 1 + ;=================================== + + lda #$4 + sta DRAW_PAGE + jsr clear_top + jsr clear_bottom + + rts + + ;========== + ; page_flip + ;========== + +page_flip: + lda DISP_PAGE ; 3 + beq page_flip_show_1 ; 2nt/3 +page_flip_show_0: + bit PAGE0 ; 4 + lda #4 ; 2 + sta DRAW_PAGE ; DRAW_PAGE=1 ; 3 + lda #0 ; 2 + sta DISP_PAGE ; DISP_PAGE=0 ; 3 + rts ; 6 +page_flip_show_1: + bit PAGE1 ; 4 + sta DRAW_PAGE ; DRAW_PAGE=0 ; 3 + lda #1 ; 2 + sta DISP_PAGE ; DISP_PAGE=1 ; 3 + rts ; 6 + ;==================== + ; DISP_PAGE=0 26 + ; DISP_PAGE=1 24 + + ;====================== + ; memset + ;====================== + ; a=value + ; x=length + ; MEMPTRL/MEMPTRH is address +memset: + ldy #0 +memset_loop: + sta MEMPTRL,Y + iny + dex + bne memset_loop + rts + + + ;================= + ; load RLE image + ;================= + ; Output is BASH/BASL + ; Input is in GBASH/GBASL +load_rle_gr: + lda #$0 + tay ; init Y to 0 + sta TEMP ; stores the xcoord + + sta CV ; ycoord=0 + + jsr load_and_increment ; load xsize + sta CH + +rle_loop: + jsr load_and_increment + + cmp #$A1 ; if 0xa1 + beq rle_done ; we are done + + pha + + and #$f0 ; mask + cmp #$a0 ; see if special AX + beq decompress_special + + pla ; note, PLA sets flags! + + ldx #$1 ; only want to print 1 + bne decompress_run + +decompress_special: + pla + + and #$0f ; check if was A0 + + bne decompress_color ; if A0 need to read run, color + +decompress_large: + jsr load_and_increment ; get run length + +decompress_color: + tax ; put runlen into X + jsr load_and_increment ; get color + +decompress_run: +rle_run_loop: + sta (BASL),y ; write out the value + inc BASL ; increment the pointer + bne rle_skip3 ; if wrapped + inc BASH ; then increment the high value + +rle_skip3: + pha ; store colore for later + + inc TEMP ; increment the X value + lda TEMP + cmp CH ; compare against the image width + bcc rle_not_eol ; if less then keep going + + lda BASL ; cheat to avoid a 16-bit add + cmp #$a7 ; we are adding 0x58 to get + bcc rle_add_skip ; to the next line + inc BASH +rle_add_skip: + clc + adc #$58 ; actually do the 0x58 add + sta BASL ; and store it back + + inc CV ; add 2 to ypos + inc CV ; each "line" is two high + + lda CV ; load value + cmp #15 ; if it's greater than 14 it wraps + bcc rle_no_wrap ; Thanks Woz + + lda #$0 ; we wrapped, so set to zero + sta CV + + ; when wrapping have to sub 0x3d8 + sec ; this is a 16-bit subtract routine + lda BASL + sbc #$d8 ; LSB + sta BASL + lda BASH ; MSB + sbc #$3 ; + sta BASH + +rle_no_wrap: + lda #$0 ; set X value back to zero + sta TEMP + +rle_not_eol: + pla ; restore color + dex + bne rle_run_loop ; if not zero, keep looping + beq rle_loop ; and branch always + +rle_done: + lda #$15 ; move the cursor somewhere sane + sta CV + rts + + +load_and_increment: + lda (GBASL),y ; load value ; 5? + inc GBASL ; 5? + bne lskip2 ; 2nt/3 + inc GBASH ; 5? +lskip2: + rts ; 6 + + + ;========================================================== + ; set_text_page0 + ;========================================================== + ; +set_text_page0: + bit PAGE0 ; set page0 + bit TEXT ; set text mode + rts + + ;========================================================== + ; set_gr_page0 + ;========================================================== + ; +set_gr_page0: + ;lda #4 + ;sta GR_PAGE + bit PAGE0 ; set page 0 + bit LORES ; Lo-res graphics + bit TEXTGR ; mixed gr/text mode + bit SET_GR ; set graphics + rts + + ;========================================================= + ; gr_copy_to_current + ;========================================================= + ; copy 0xc00 to DRAW_PAGE + ; 2 + 8*38 + 4*80*23 + 4*120*26 + 13 = 20,159 = 20ms = 50Hz + ; +gr_copy_to_current: + ldx #0 ; set y to zero ; 2 + +gr_copy_loop: + stx TEMP ; save y ; 3 + txa ; move to A ; 2 + asl ; mult by 2 ; 2 + tay ; put into Y ; 2 + lda gr_offsets,Y ; lookup low byte for line addr ; 5 + sta OUTL ; out and in are the same ; 3 + sta INL ; 3 + lda gr_offsets+1,Y ; lookup high byte for line addr ; 5 + adc DRAW_PAGE + sta OUTH ; 3 + lda gr_offsets+1,Y ; lookup high byte for line addr ; 5 + adc #$8 ; for now, fixed 0xc ; 2 + sta INH ; 3 + ldx TEMP ; restore y ; 3 + + ldy #0 ; set X counter to 0 ; 2 +gr_copy_line: + lda (INL),Y ; load a byte ; 5 + sta (OUTL),Y ; store a byte ; 6 + iny ; increment pointer ; 2 + + cpx #$4 ; don't want to copy bottom 4*40 ; 2 + bcs gr_copy_above4 ; 3 + +gr_copy_below4: + cpy #120 ; for early ones, copy 120 bytes ; 2 + bne gr_copy_line ; 3 + beq gr_copy_line_done ; 3 + +gr_copy_above4: ; for last four, just copy 80 bytes + cpy #80 ; 2 + bne gr_copy_line ; 3 + +gr_copy_line_done: + inx ; increment y value ; 2 + cpx #8 ; there are 8 of them ; 2 + bne gr_copy_loop ; if not, loop ; 3 + rts ; 6 + + ;========================================================== + ; Wait until keypressed + ;========================================================== + ; + +wait_until_keypressed: + lda KEYPRESS ; check if keypressed + bpl wait_until_keypressed ; if not, loop + jmp figure_out_key + + + ;========================================================== + ; Get Key + ;========================================================== + ; + +get_key: + +check_paddle_button: + + ; check for paddle button + + bit PADDLE_BUTTON0 ; 4 + bpl no_button ; 2nt/3 + lda #' '+128 ; 2 + jmp save_key ; 3 + +no_button: + lda KEYPRESS ; 3 + bpl no_key ; 2nt/3 + +figure_out_key: + cmp #' '+128 ; the mask destroys space ; 2 + beq save_key ; so handle it specially ; 2nt/3 + + and #$5f ; mask, to make upper-case ; 2 +check_right_arrow: + cmp #$15 ; 2 + bne check_left_arrow ; 2nt/3 + lda #'D' ; 2 +check_left_arrow: + cmp #$08 ; 2 + bne check_up_arrow ; 2nt/3 + lda #'A' ; 2 +check_up_arrow: + cmp #$0B ; 2 + bne check_down_arrow ; 2nt/3 + lda #'W' ; 2 +check_down_arrow: + cmp #$0A ; 2 + bne check_escape ; 2nt/3 + lda #'S' ; 2 +check_escape: + cmp #$1B ; 2 + bne save_key ; 2nt/3 + lda #'Q' ; 2 + jmp save_key ; 3 + +no_key: + bit PADDLE_STATUS ; 3 + bpl no_key_store ; 2nt/3 + + ; check for paddle action + ; code from http://web.pdx.edu/~heiss/technotes/aiie/tn.aiie.06.html + + inc PADDLE_STATUS ; 5 + lda PADDLE_STATUS ; 3 + and #$03 ; 2 + beq check_paddles ; 2nt/3 + jmp no_key_store ; 3 + +check_paddles: + lda PADDLE_STATUS ; 3 + and #$80 ; 2 + sta PADDLE_STATUS ; 3 + + ldx #$0 ; 2 + LDA PTRIG ;TRIGGER PADDLES ; 4 + LDY #0 ;INIT COUNTER ; 2 + NOP ;COMPENSATE FOR 1ST COUNT ; 2 + NOP ; 2 +PREAD2: LDA PADDL0,X ;COUNT EVERY 11 uSEC. ; 4 + BPL RTS2D ;BRANCH WHEN TIMED OUT ; 2nt/3 + INY ;INCREMENT COUNTER ; 2 + BNE PREAD2 ;CONTINUE COUNTING ; 2nt/3 + DEY ;COUNTER OVERFLOWED ; 2 +RTS2D: ;RETURN W/VALUE 0-255 + + cpy #96 ; 2 + bmi paddle_left ; 2nt/3 + cpy #160 ; 2 + bmi no_key_store ; 2nt/3 + lda #'D' ; 2 + jmp save_key ; 3 +paddle_left: + lda #'A' ; 2 + jmp save_key ; 3 + +no_key_store: + lda #0 ; no key, so save a zero ; 2 + +save_key: + sta LASTKEY ; save the key to our buffer ; 2 + bit KEYRESET ; clear the keyboard buffer ; 4 + rts ; 6 + ;============ + ; 33=nokey + ; 48=worstkey + + + ;============================================= + ; put_sprite + ;============================================= + ; Sprite to display in INH,INL + ; Location is XPOS,YPOS + ; Note, only works if YPOS is multiple of two? + +put_sprite: + + ldy #0 ; byte 0 is xsize ; 2 + lda (INL),Y ; 5 + sta CH ; xsize is in CH ; 3 + iny ; 2 + + lda (INL),Y ; byte 1 is ysize ; 5 + sta CV ; ysize is in CV ; 3 + iny ; 2 + + lda YPOS ; make a copy of ypos ; 3 + sta TEMPY ; as we modify it ; 3 + ;=========== + ; 28 +put_sprite_loop: + sty TEMP ; save sprite pointer ; 3 + + ldy TEMPY ; 3 + lda gr_offsets,Y ; lookup low-res memory address ; 5 + clc ; 2 + adc XPOS ; add in xpos ; 3 + sta OUTL ; store out low byte of addy ; 3 + lda gr_offsets+1,Y ; look up high byte ; 5 + adc DRAW_PAGE ; ; 3 + sta OUTH ; and store it out ; 3 + ldy TEMP ; restore sprite pointer ; 3 + + ; OUTH:OUTL now points at right place + + ldx CH ; load xsize into x ; 3 + ;=========== + ; 36 +put_sprite_pixel: + lda (INL),Y ; get sprite colors ; 5 + iny ; increment sprite pointer ; 2 + + sty TEMP ; save sprite pointer ; 3 + ldy #$0 ; 2 + + ; check if completely transparent + ; if so, skip + + cmp #$0 ; if all zero, transparent ; 2 + beq put_sprite_done_draw ; don't draw it ; 2nt/3 + ; FIXME: use BIT? ;============== + ; 17 + + sta COLOR ; save color for later ; 3 + + ; check if top pixel transparent + + and #$f0 ; check if top nibble zero ; 2 + bne put_sprite_bottom ; if not skip ahead ; 2nt/3 + + lda #$f0 ; setup mask ; 2 + sta MASK ; 3 + bmi put_sprite_mask ; 2nt/3 + +put_sprite_bottom: + lda COLOR ; re-load color ; 3 + and #$0f ; check if bottom nibble zero ; 2 + bne put_sprite_all ; if not, skip ahead ; 2nt/3 + lda #$0f ; 2 + sta MASK ; setup mask ; 3 + +put_sprite_mask: + lda (OUTL),Y ; get color at output ; 5 + and MASK ; mask off unneeded part ; 3 + ora COLOR ; or the color in ; 3 + sta (OUTL),Y ; store it back ; 5 + + jmp put_sprite_done_draw ; we are done ; 3 + +put_sprite_all: + lda COLOR ; load color ; 3 + sta (OUTL),Y ; and write it out ; 5 + + +put_sprite_done_draw: + + ldy TEMP ; restore sprite pointer ; 3 + + inc OUTL ; increment output pointer ; 5 + dex ; decrement x counter ; 2 + bne put_sprite_pixel ; if not done, keep looping ; 2nt/3 + + inc TEMPY ; each line has two y vars ; 5 + inc TEMPY ; 5 + dec CV ; decemenet total y count ; 5 + bne put_sprite_loop ; loop if not done ; 2nt/3 + + rts ; return ; 6 + + + ;================================ + ; htab_vtab + ;================================ + ; move to CH/CV +htab_vtab: + lda CV + asl + tay + lda gr_offsets,Y ; lookup low-res memory address + clc + adc CH ; add in xpos + sta BASL ; store out low byte of addy + + lda gr_offsets+1,Y ; look up high byte + adc DRAW_PAGE ; + sta BASH ; and store it out + ; BASH:BASL now points at right place + + rts + + ;================================ + ; move_and_print + ;================================ + ; move to CH/CV +move_and_print: + jsr htab_vtab + + ;================================ + ; print_string + ;================================ + +print_string: + ldy #0 +print_string_loop: + lda (OUTL),Y + beq done_print_string + ora #$80 + sta (BASL),Y + iny + bne print_string_loop +done_print_string: + rts + + ;==================== + ; point_to_end_string + ;==================== +point_to_end_string: + iny + tya + clc + adc OUTL + sta OUTL + lda #0 + adc OUTH + sta OUTH + + rts + + + ;================================ + ; print_both_pages + ;================================ +print_both_pages: + lda DRAW_PAGE + pha + + lda #0 + sta DRAW_PAGE + jsr move_and_print + + lda #4 + sta DRAW_PAGE + jsr move_and_print + + pla + sta DRAW_PAGE + + rts ; oops forgot this initially + ; explains the weird vertical stripes on the screen + + ;========================================= + ; vlin + ;========================================= + ; X, V2 at Y +vlin: + + sty TEMPY ; save Y (x location) +vlin_loop: + + txa ; a=x (get first y) + and #$fe ; Clear bottom bit + tay ; + lda gr_offsets,Y ; lookup low-res memory address low + sta GBASL ; put it into our indirect pointer + iny + lda gr_offsets,Y ; lookup low-res memory address high + clc + adc DRAW_PAGE ; add in draw page offset + sta GBASH ; put into top of indirect + + ldy TEMPY ; load back in y (x offset) + + txa ; load back in x (current y) + lsr ; check the low bit + bcc vlin_low ; if not set, skip to low + +vlin_high: + lda #$F0 ; setup masks + sta MASK + lda #$0f + bcs vlin_too_slow + +vlin_low: ; setup masks + lda #$0f + sta MASK + lda #$f0 +vlin_too_slow: + + and (GBASL),Y ; mask current byte + sta (GBASL),Y ; and store back + + lda MASK ; mask the color + and COLOR + ora (GBASL),Y ; or into the right place + sta (GBASL),Y ; store it + + inx ; increment X (current y) + cpx V2 ; compare to the limit + bcc vlin_loop ; if <= then loop + + rts ; return + + + ;================================ + ; hlin_setup + ;================================ + ; put address in GBASL/GBASH + ; Ycoord in A, Xcoord in Y +hlin_setup: + sty TEMPY ; 3 + tay ; y=A ; 2 + lda gr_offsets,Y ; lookup low-res memory address ; 4 + clc ; 2 + adc TEMPY ; 3 + sta GBASL ; 3 + iny ; 2 + + lda gr_offsets,Y ; 4 + adc DRAW_PAGE ; add in draw page offset ; 3 + sta GBASH ; 3 + rts ; 6 + ;=========== + ; 35 + ;================================ + ; hlin_double: + ;================================ + ; HLIN Y, V2 AT A + ; Y, X, A trashed + ; start at Y, draw up to and including X +hlin_double: +;int hlin_double(int page, int x1, int x2, int at) { + + jsr hlin_setup ; 41 + + sec ; 2 + lda V2 ; 3 + sbc TEMPY ; 3 + + tax ; 2 + inx ; 2 + ;=========== + ; 53 + ; fallthrough + + ;================================= + ; hlin_double_continue: width + ;================================= + ; width in X + +hlin_double_continue: + + ldy #0 ; 2 + lda COLOR ; 3 +hlin_double_loop: + sta (GBASL),Y ; 6 + inc GBASL ; 5 + dex ; 2 + bne hlin_double_loop ; 2nt/3 + + rts ; 6 + ;============= + ; 53+5+X*16+5 + + ;================================ + ; hlin_single: + ;================================ + ; HLIN Y, V2 AT A + ; Y, X, A trashed +hlin_single: + + jsr hlin_setup + + sec + lda V2 + sbc TEMPY + + tax + + ; fallthrough + + ;================================= + ; hlin_single_continue: width + ;================================= + ; width in X + +hlin_single_continue: + +hlin_single_top: + lda COLOR + and #$f0 + sta COLOR + +hlin_single_top_loop: + ldy #0 + lda (GBASL),Y + and #$0f + ora COLOR + sta (GBASL),Y + inc GBASL + dex + bne hlin_single_top_loop + + rts + +hlin_single_bottom: + + lda COLOR + and #$0f + sta COLOR + +hlin_single_bottom_loop: + ldy #0 + lda (GBASL),Y + and #$f0 + sta (GBASL),Y + inc GBASL + dex + bne hlin_single_bottom_loop + + rts + + + ;============================= + ; clear_top + ;============================= +clear_top: + lda #$00 + + ;============================= + ; clear_top_a + ;============================= +clear_top_a: + + sta COLOR + + ; VLIN Y, V2 AT A + + lda #40 + sta V2 + + lda #0 + +clear_top_loop: + ldy #0 + pha + + jsr hlin_double + + pla + clc + adc #$2 + cmp #40 + bne clear_top_loop + + rts + +clear_bottom: + lda #$a0 ; NORMAL space + sta COLOR + + lda #40 + sta V2 + +clear_bottom_loop: + ldy #0 + pha + + jsr hlin_double + + pla + clc + adc #$2 + cmp #48 + bne clear_bottom_loop + + rts + + ; move these to zero page for slight speed increase? +gr_offsets: + .word $400,$480,$500,$580,$600,$680,$700,$780 + .word $428,$4a8,$528,$5a8,$628,$6a8,$728,$7a8 + .word $450,$4d0,$550,$5d0,$650,$6d0,$750,$7d0 + diff --git a/mode7_demo/zp.inc b/mode7_demo/zp.inc new file mode 100644 index 00000000..095b624c --- /dev/null +++ b/mode7_demo/zp.inc @@ -0,0 +1,179 @@ +.define EQU = + +;; Zero page monitor routines addresses + +WNDLFT EQU $20 +WNDWDTH EQU $21 +WNDTOP EQU $22 +WNDBTM EQU $23 +CH EQU $24 +CV EQU $25 +GBASL EQU $26 +GBASH EQU $27 +BASL EQU $28 +BASH EQU $29 +H2 EQU $2C +V2 EQU $2D +MASK EQU $2E +COLOR EQU $30 +INVFLG EQU $32 + +; More zero-page addresses +; we try not to conflict with anything DOS, MONITOR or BASIC related + +COLOR1 EQU $E0 +COLOR2 EQU $E1 +MATCH EQU $E2 +XX EQU $E3 +YY EQU $E4 +YADD EQU $E5 +LOOP EQU $E6 +MEMPTRL EQU $E7 +MEMPTRH EQU $E8 +NAMEL EQU $E9 +NAMEH EQU $EA +NAMEX EQU $EB +CHAR EQU $EC +DISP_PAGE EQU $ED +DRAW_PAGE EQU $EE + +FIRST EQU $F0 +LASTKEY EQU $F1 +PADDLE_STATUS EQU $F2 +XPOS EQU $F3 +YPOS EQU $F4 +TEMP EQU $FA +RUN EQU $FA +TEMP2 EQU $FB +TEMPY EQU $FB +INL EQU $FC +INH EQU $FD +OUTL EQU $FE +OUTH EQU $FF + + +;; Flying Routine Only + +TURNING EQU $60 +;SCREEN_X EQU $61 ; not used? +SCREEN_Y EQU $62 +ANGLE EQU $63 +HORIZ_SCALE_I EQU $64 +HORIZ_SCALE_F EQU $65 +FACTOR_I EQU $66 +FACTOR_F EQU $67 +DX_I EQU $68 +DX_F EQU $69 +SPACEX_I EQU $6A +SPACEX_F EQU $6B +CX_I EQU $6C +CX_F EQU $6D +DY_I EQU $6E +DY_F EQU $6F +SPACEY_I EQU $70 +SPACEY_F EQU $71 +CY_I EQU $72 +CY_F EQU $73 +TEMP_I EQU $74 +TEMP_F EQU $75 +DISTANCE_I EQU $76 +DISTANCE_F EQU $77 +SPACEZ_I EQU $78 +SPACEZ_F EQU $79 +DRAW_SPLASH EQU $7A +SPEED EQU $7B +SPLASH_COUNT EQU $7C +OVER_LAND EQU $7D +NUM1L EQU $7E +NUM1H EQU $7F +NUM2L EQU $80 +NUM2H EQU $81 +RESULT EQU $82 ; 83,84,85 +NEGATE EQU $86 ; UNUSED? +LAST_SPACEX_I EQU $87 +LAST_SPACEY_I EQU $88 +LAST_MAP_COLOR EQU $89 +DRAW_SKY EQU $8A +COLOR_MASK EQU $8B + +SHIPY EQU $E4 + +KEYPRESS EQU $C000 +KEYRESET EQU $C010 + +;; SOFT SWITCHES +CLR80COL EQU $C000 ; PAGE0/PAGE1 normal +SET80COL EQU $C001 ; PAGE0/PAGE1 switches PAGE0 in Aux instead +EIGHTYCOL EQU $C00D +SET_GR EQU $C050 +SET_TEXT EQU $C051 +FULLGR EQU $C052 +TEXTGR EQU $C053 +PAGE0 EQU $C054 +PAGE1 EQU $C055 +LORES EQU $C056 ; Enable LORES graphics +HIRES EQU $C057 ; Enable HIRES graphics +AN3 EQU $C05E ; Annunciator 3 + +PADDLE_BUTTON0 EQU $C061 +PADDL0 EQU $C064 +PTRIG EQU $C070 + +;; BASIC ROUTINES + +NORMAL EQU $F273 + +;; MONITOR ROUTINES + +HLINE EQU $F819 ;; HLINE Y,$2C at A +VLINE EQU $F828 ;; VLINE A,$2D at Y +CLRSCR EQU $F832 ;; Clear low-res screen +CLRTOP EQU $F836 ;; clear only top of low-res screen +SETCOL EQU $F864 ;; COLOR=A +TEXT EQU $FB36 +TABV EQU $FB5B ;; VTAB to A +BASCALC EQU $FBC1 ;; +VTAB EQU $FC22 ;; VTAB to CV +HOME EQU $FC58 ;; Clear the text screen +WAIT EQU $FCA8 ;; delay 1/2(26+27A+5A^2) us +SETINV EQU $FE80 ;; INVERSE +SETNORM EQU $FE84 ;; NORMAL +COUT EQU $FDED ;; output A to screen +COUT1 EQU $FDF0 ;; output A to screen + + + + + + +COLOR_BLACK EQU 0 +COLOR_RED EQU 1 +COLOR_DARKBLUE EQU 2 +COLOR_PURPLE EQU 3 +COLOR_DARKGREEN EQU 4 +COLOR_GREY EQU 5 +COLOR_MEDIUMBLUE EQU 6 +COLOR_LIGHTBLUE EQU 7 +COLOR_BROWN EQU 8 +COLOR_ORANGE EQU 9 +COLOR_GREY2 EQU 10 +COLOR_PINK EQU 11 +COLOR_LIGHTGREEN EQU 12 +COLOR_YELLOW EQU 13 +COLOR_AQUA EQU 14 +COLOR_WHITE EQU 15 + +COLOR_BOTH_RED EQU $11 +COLOR_BOTH_DARKBLUE EQU $22 +COLOR_BOTH_DARKGREEN EQU $44 +COLOR_BOTH_GREY EQU $55 +COLOR_BOTH_MEDIUMBLUE EQU $66 +COLOR_BOTH_LIGHTBLUE EQU $77 +COLOR_BOTH_BROWN EQU $88 +COLOR_BOTH_ORANGE EQU $99 +COLOR_BOTH_LIGHTGREEN EQU $CC +COLOR_BOTH_YELLOW EQU $DD +COLOR_BOTH_WHITE EQU $FF + +AUX_BOTH_MEDIUMBLUE EQU $33 ; 0011 0011 +AUX_BOTH_GREY EQU $AA ; 1010 1010 diff --git a/tfv/tfv.s b/tfv/tfv.s index 2e9187fb..a3a2f510 100644 --- a/tfv/tfv.s +++ b/tfv/tfv.s @@ -102,13 +102,5 @@ name: .byte $0,$0,$0,$0,$0,$0,$0,$0 - ; waste memory with a lookup table - ; maybe faster than using GBASCALC? - -gr_offsets: - .word $400,$480,$500,$580,$600,$680,$700,$780 - .word $428,$4a8,$528,$5a8,$628,$6a8,$728,$7a8 - .word $450,$4d0,$550,$5d0,$650,$6d0,$750,$7d0 - .include "tfv_sprites.inc" .include "tfv_backgrounds.inc" diff --git a/tfv/tfv_backgrounds.inc b/tfv/tfv_backgrounds.inc index 4a57c984..989a90fc 100644 --- a/tfv/tfv_backgrounds.inc +++ b/tfv/tfv_backgrounds.inc @@ -1,416 +1,416 @@ -title_rle: .byte $28,$28 - .byte $01,$00, $19,$20, $0F,$00, $01,$22, $03,$66, $01,$22, $01,$62 - .byte $01,$66, $01,$62, $01,$22, $01,$66, $03,$22, $01,$66, $01,$26 - .byte $01,$62, $01,$22, $01,$62, $01,$26, $01,$62, $01,$22, $03,$66 - .byte $01,$22, $01,$55, $01,$00, $03,$11, $01,$44, $03,$22, $01,$44 - .byte $03,$22, $02,$00, $02,$22, $01,$66, $02,$22, $01,$66, $01,$62 - .byte $01,$66, $01,$22, $01,$66, $03,$22, $01,$66, $01,$26, $01,$62 - .byte $01,$22, $01,$66, $01,$22, $01,$66, $02,$22, $01,$66, $02,$22 - .byte $01,$55, $01,$00, $01,$01, $01,$11, $01,$41, $01,$44, $01,$42 - .byte $01,$22, $01,$42, $01,$44, $01,$42, $01,$22, $01,$02, $02,$00 - .byte $02,$22, $01,$66, $02,$22, $01,$66, $01,$22, $01,$66, $01,$22 - .byte $03,$66, $01,$22, $01,$66, $01,$62, $01,$26, $01,$22, $01,$26 - .byte $01,$62, $01,$26, $02,$22, $01,$66, $02,$22, $01,$55, $02,$00 - .byte $01,$11, $03,$44, $01,$22, $03,$44, $01,$22, $03,$00, $01,$02 - .byte $18,$52, $01,$55, $0E,$00, $1E,$60, $0A,$00, $01,$66, $03,$22 - .byte $01,$66, $01,$26, $01,$22, $01,$26, $01,$66, $01,$22, $01,$26 - .byte $01,$66, $01,$22, $01,$66, $03,$22, $01,$66, $01,$26, $01,$22 - .byte $01,$26, $01,$66, $01,$26, $02,$62, $01,$66, $01,$22, $01,$66 - .byte $01,$22, $01,$66, $01,$55, $09,$00, $01,$66, $01,$22, $01,$26 - .byte $02,$66, $01,$22, $01,$26, $01,$22, $01,$66, $01,$22, $01,$62 - .byte $01,$26, $01,$22, $02,$66, $01,$22, $02,$66, $01,$22, $01,$26 - .byte $01,$22, $01,$66, $01,$22, $02,$26, $01,$66, $01,$62, $01,$26 - .byte $01,$62, $01,$66, $01,$55, $09,$00, $01,$66, $01,$22, $03,$66 - .byte $01,$22, $01,$66, $01,$22, $01,$66, $01,$22, $01,$66, $01,$62 - .byte $01,$22, $02,$66, $01,$22, $02,$66, $01,$22, $01,$66, $01,$22 - .byte $01,$66, $02,$26, $01,$22, $02,$66, $01,$22, $02,$66, $01,$55 - .byte $09,$00, $01,$06, $1D,$56, $01,$55, $03,$00, $01,$10, $24,$00 - .byte $01,$10, $01,$00, $01,$10, $01,$11, $01,$01, $05,$00, $08,$CC - .byte $01,$40, $09,$00, $01,$D0, $01,$0D, $01,$00, $01,$D0, $01,$0D - .byte $01,$00, $01,$D0, $05,$00, $01,$11, $0A,$00, $01,$04, $04,$54 - .byte $02,$CC, $01,$44, $01,$55, $06,$00, $01,$D0, $01,$DD, $02,$D0 - .byte $01,$DD, $02,$D0, $01,$DD, $01,$D0, $03,$00, $02,$01, $01,$11 - .byte $02,$01, $0C,$00, $02,$CC, $01,$44, $01,$54, $01,$55, $06,$00 - .byte $01,$DD, $07,$BB, $01,$DD, $04,$00, $01,$10, $01,$11, $01,$10 - .byte $0C,$00, $02,$CC, $01,$44, $01,$54, $01,$55, $07,$00, $01,$DD - .byte $01,$BB, $01,$BF, $01,$B0, $01,$BB, $01,$BF, $01,$B0, $01,$BB - .byte $01,$DD, $03,$00, $01,$10, $03,$11, $01,$10, $0A,$00, $02,$CC - .byte $01,$44, $01,$54, $01,$55, $08,$00, $01,$DD, $01,$DB, $01,$BB - .byte $01,$3B, $01,$33, $02,$BB, $01,$DB, $01,$DD, $03,$00, $02,$01 - .byte $01,$11, $02,$01, $0A,$00, $02,$CC, $01,$44, $01,$55, $09,$00 - .byte $02,$DD, $05,$BB, $02,$DD, $05,$00, $01,$11, $0C,$00, $02,$CC - .byte $01,$44, $01,$55, $09,$00, $01,$0D, $01,$00, $01,$BB, $03,$B1 - .byte $01,$BB, $01,$00, $01,$0D, $04,$00, $02,$BB, $0C,$00, $01,$0C - .byte $01,$4C, $01,$44, $01,$55, $0C,$00, $02,$BB, $06,$00, $01,$20 - .byte $01,$22, $01,$2B, $01,$0B, $0E,$00, $02,$05, $09,$00, $01,$20 - .byte $06,$22, $03,$20, $02,$22, $01,$02, $09,$00 - .byte $FF,$FF -map_rle: .byte $28,$28 - .byte $23,$66, $01,$46, $01,$06, $05,$66, $01,$56, $0E,$66, $01,$E6 - .byte $04,$66, $01,$77, $01,$FF, $01,$F6, $08,$66, $01,$46, $03,$44 - .byte $03,$66, $01,$E6, $01,$56, $01,$55, $01,$56, $01,$E6, $0B,$66 - .byte $01,$6E, $01,$66, $01,$6E, $02,$66, $01,$67, $04,$6F, $07,$66 - .byte $01,$4F, $01,$47, $01,$4F, $01,$44, $0B,$66, $17,$D6, $03,$66 - .byte $01,$64, $03,$44, $01,$46, $08,$66, $01,$DD, $07,$FF, $01,$4F - .byte $05,$FF, $01,$8F, $01,$88, $01,$8F, $01,$FF, $01,$7F, $01,$77 - .byte $01,$07, $01,$77, $01,$07, $01,$77, $01,$DD, $03,$66, $01,$E6 - .byte $03,$E4, $01,$E6, $07,$66, $01,$DD, $06,$FF, $01,$F4, $01,$84 - .byte $01,$F4, $04,$FF, $01,$8F, $03,$FF, $01,$7F, $01,$77, $03,$75 - .byte $01,$77, $01,$DD, $0F,$66, $01,$DD, $0C,$CF, $03,$C8, $03,$CF - .byte $05,$C7, $01,$DD, $0A,$66, $01,$E6, $04,$66, $01,$DD, $02,$CC - .byte $01,$4C, $03,$CC, $01,$77, $06,$CC, $01,$8C, $01,$88, $01,$8C - .byte $01,$CC, $01,$4C, $05,$44, $01,$DD, $09,$66, $01,$6E, $01,$66 - .byte $01,$6E, $03,$66, $01,$DD, $01,$CC, $01,$4C, $01,$44, $01,$4C - .byte $01,$CC, $01,$22, $03,$FF, $01,$22, $03,$CC, $01,$8C, $03,$CC - .byte $01,$C4, $05,$44, $01,$DD, $0C,$66, $01,$E6, $02,$66, $01,$DD - .byte $02,$CC, $01,$C8, $02,$CC, $01,$C2, $02,$C7, $01,$CF, $02,$C2 - .byte $01,$CC, $03,$C8, $03,$CC, $01,$C8, $01,$CC, $01,$C8, $01,$CC - .byte $01,$C8, $01,$DD, $0B,$66, $01,$6E, $01,$66, $01,$6E, $01,$66 - .byte $01,$DD, $01,$4C, $01,$84, $01,$C4, $0A,$CC, $01,$8C, $01,$88 - .byte $01,$8C, $01,$CC, $01,$4C, $05,$44, $01,$DD, $0F,$66, $01,$DD - .byte $01,$C4, $01,$CC, $01,$88, $0A,$CC, $01,$8C, $03,$CC, $06,$44 - .byte $01,$DD, $02,$66, $01,$55, $01,$56, $02,$66, $01,$55, $08,$66 - .byte $01,$DD, $05,$CC, $05,$9C, $01,$CC, $01,$1C, $03,$C8, $01,$1C - .byte $02,$CC, $01,$84, $01,$C4, $01,$84, $01,$C4, $01,$84, $01,$DD - .byte $02,$66, $01,$55, $01,$66, $01,$65, $01,$56, $01,$55, $08,$66 - .byte $01,$DD, $03,$CC, $02,$4C, $01,$99, $01,$49, $01,$44, $02,$99 - .byte $01,$CC, $01,$11, $01,$C1, $01,$1C, $01,$C1, $01,$11, $07,$CC - .byte $01,$DD, $02,$66, $01,$65, $03,$66, $01,$65, $02,$66, $01,$6E - .byte $01,$E6, $01,$6E, $03,$66, $01,$DD, $02,$CC, $01,$44, $01,$C8 - .byte $01,$8C, $01,$99, $01,$94, $01,$44, $01,$94, $01,$99, $01,$CC - .byte $01,$C1, $03,$CC, $01,$C1, $07,$CC, $01,$DD, $03,$66, $01,$16 - .byte $01,$91, $01,$16, $04,$66, $01,$EE, $04,$66, $01,$6D, $04,$DC - .byte $01,$D8, $02,$D9, $01,$D4, $02,$D9, $02,$DC, $01,$8C, $01,$88 - .byte $01,$8E, $01,$EE, $07,$DC, $01,$6D, $03,$66, $01,$69, $01,$99 - .byte $01,$69, $03,$66, $01,$05, $01,$55, $01,$66, $01,$55, $01,$65 - .byte $1C,$66, $01,$86, $01,$96, $01,$99, $01,$96, $01,$86, $02,$66 - .byte $04,$65, $1F,$66, $01,$99, $1B,$66, $01,$E6, $01,$6E, $01,$E6 - .byte $09,$66, $01,$69, $2B,$66 - .byte $FF,$FF -landing_rle: .byte $28,$28 - .byte $03,$66, $01,$56, $27,$66, $01,$55, $01,$F5, $26,$66, $01,$55 - .byte $01,$FF, $01,$F5, $25,$66, $01,$55, $02,$FF, $01,$F5, $24,$66 - .byte $01,$55, $03,$FF, $01,$F5, $20,$66, $01,$CC, $01,$2C, $01,$CC - .byte $01,$55, $0F,$F5, $04,$22, $12,$CC, $01,$62, $01,$22, $01,$55 - .byte $01,$FF, $03,$11, $01,$44, $03,$22, $01,$44, $03,$22, $03,$FF - .byte $05,$22, $11,$CC, $01,$22, $01,$26, $01,$55, $02,$FF, $01,$11 - .byte $03,$44, $01,$22, $03,$44, $01,$22, $04,$FF, $06,$22, $10,$CC - .byte $02,$26, $01,$55, $02,$FF, $01,$F1, $03,$F4, $01,$F2, $03,$F4 - .byte $01,$F2, $01,$FF, $02,$8F, $01,$FF, $07,$22, $0F,$CC, $01,$62 - .byte $01,$26, $01,$55, $0A,$5F, $02,$FF, $02,$88, $01,$FF, $08,$22 - .byte $0E,$CC, $01,$22, $01,$C2, $01,$55, $09,$FF, $01,$55, $02,$FF - .byte $02,$88, $0A,$FF, $0F,$CC, $03,$C5, $01,$85, $09,$C5, $02,$85 - .byte $04,$C5, $01,$85, $05,$C5, $11,$CC, $01,$C8, $09,$CC, $04,$85 - .byte $04,$CC, $01,$C8, $1E,$CC, $06,$85, $FE,$CC, $06,$CC - .byte $FF,$FF -harfco_rle: .byte $28,$28 - .byte $05,$00, $1D,$AA, $01,$77, $09,$00, $01,$F0, $01,$00, $1B,$AA - .byte $01,$77, $03,$00, $01,$F0, $03,$00, $01,$F0, $17,$00, $01,$F0 - .byte $15,$00, $01,$0F, $19,$00, $01,$F0, $16,$00, $01,$0F, $17,$00 - .byte $28,$22, $1D,$77, $01,$72, $0A,$22, $1F,$77, $01,$72, $08,$22 - .byte $21,$77, $01,$72, $06,$22, $11,$77, $01,$07, $01,$77, $05,$07 - .byte $01,$77, $01,$00, $01,$77, $01,$07, $07,$77, $05,$22, $0C,$77 - .byte $01,$57, $01,$00, $01,$57, $01,$00, $01,$57, $01,$00, $01,$57 - .byte $05,$00, $01,$57, $01,$00, $01,$57, $01,$00, $01,$57, $07,$77 - .byte $04,$22, $0B,$77, $01,$75, $01,$55, $01,$50, $03,$55, $01,$50 - .byte $09,$55, $01,$50, $01,$55, $01,$75, $07,$77, $03,$22, $25,$77 - .byte $03,$22, $24,$77, $01,$27, $03,$22, $24,$77, $04,$22, $22,$77 - .byte $01,$27, $05,$22, $21,$77, $01,$27, $06,$22, $20,$77, $01,$27 - .byte $07,$22, $1F,$77, $01,$27, $08,$22, $1E,$77, $01,$27, $09,$22 - .byte $FF,$FF -belair_rle: .byte $28,$28 - .byte $0A,$00, $01,$05, $01,$57, $01,$75, $01,$57, $01,$75, $01,$57 - .byte $01,$75, $01,$57, $01,$75, $01,$57, $01,$75, $01,$57, $01,$75 - .byte $01,$57, $01,$75, $01,$57, $01,$75, $01,$57, $01,$75, $01,$57 - .byte $01,$05, $0B,$00, $01,$70, $09,$00, $01,$05, $0F,$57, $01,$05 - .byte $05,$00, $01,$0D, $01,$D0, $05,$00, $01,$07, $01,$7F, $01,$07 - .byte $05,$00, $01,$70, $01,$F7, $01,$70, $17,$00, $01,$DD, $0E,$00 - .byte $01,$07, $17,$00, $01,$0D, $0D,$00, $01,$70, $1C,$00, $01,$60 - .byte $01,$E6, $01,$60, $07,$00, $01,$07, $01,$7F, $01,$07, $06,$00 - .byte $01,$50, $06,$85, $01,$50, $0E,$00, $01,$06, $0C,$00, $05,$50 - .byte $08,$88, $10,$00, $02,$50, $01,$20, $03,$22, $01,$92, $01,$D9 - .byte $03,$50, $01,$88, $01,$98, $01,$88, $01,$98, $01,$55, $01,$88 - .byte $01,$89, $01,$88, $02,$08, $01,$88, $01,$89, $01,$88, $03,$50 - .byte $06,$40, $07,$50, $01,$20, $03,$22, $01,$92, $01,$D9, $01,$0D - .byte $01,$D9, $03,$00, $04,$88, $01,$55, $03,$88, $02,$00, $03,$88 - .byte $03,$00, $06,$74, $07,$00, $02,$22, $01,$92, $01,$D9, $01,$0D - .byte $01,$D9, $01,$9D, $01,$D9, $09,$00, $01,$08, $01,$88, $02,$00 - .byte $01,$88, $01,$08, $04,$00, $01,$77, $01,$07, $02,$E7, $01,$07 - .byte $01,$77, $07,$00, $01,$88, $01,$D9, $01,$0D, $01,$D9, $01,$9D - .byte $01,$D9, $01,$0D, $01,$D9, $13,$00, $01,$77, $01,$00, $02,$EE - .byte $01,$00, $01,$77, $07,$00, $01,$88, $01,$D9, $01,$9D, $01,$D9 - .byte $01,$0D, $01,$D9, $01,$9D, $01,$09, $13,$00, $02,$77, $02,$EE - .byte $02,$77, $04,$00, $01,$D0, $01,$10, $01,$00, $01,$88, $01,$D9 - .byte $01,$0D, $01,$D9, $01,$00, $01,$09, $1F,$00, $01,$DD, $01,$11 - .byte $01,$01, $01,$88, $01,$D9, $01,$9D, $01,$09, $21,$00, $01,$DD - .byte $02,$00, $01,$08, $01,$09, $20,$00, $01,$40, $01,$44, $01,$04 - .byte $01,$DD, $01,$04, $01,$44, $23,$00, $05,$04, $A0,$00 - .byte $FF,$FF -math_office_rle: .byte $28,$28 - .byte $19,$00, $0F,$44, $19,$00, $01,$44, $01,$FF, $01,$4F, $01,$F4 - .byte $02,$44, $01,$F4, $01,$FF, $01,$F4, $02,$44, $01,$FF, $01,$F4 - .byte $01,$44, $01,$FF, $19,$00, $01,$44, $01,$FF, $01,$4F, $01,$F4 - .byte $01,$44, $01,$4F, $01,$44, $01,$FF, $01,$44, $01,$4F, $01,$44 - .byte $01,$FF, $01,$44, $01,$4F, $01,$FF, $19,$00, $01,$44, $02,$4F - .byte $04,$44, $01,$4F, $03,$44, $01,$4F, $02,$44, $01,$4F, $19,$00 - .byte $0F,$44, $02,$00, $01,$88, $01,$B8, $07,$00, $02,$80, $07,$00 - .byte $01,$B8, $01,$88, $02,$00, $01,$0A, $0F,$07, $02,$00, $01,$88 - .byte $01,$BB, $01,$0B, $06,$00, $01,$88, $01,$BB, $01,$B0, $05,$00 - .byte $01,$0B, $01,$BB, $01,$88, $04,$00, $01,$B8, $01,$88, $0E,$00 - .byte $01,$88, $08,$00, $01,$88, $01,$FB, $07,$00, $01,$2B, $04,$00 - .byte $01,$0B, $01,$BB, $01,$88, $0E,$00, $01,$77, $01,$FF, $07,$00 - .byte $01,$F8, $01,$FF, $01,$F0, $05,$00, $01,$44, $01,$22, $05,$00 - .byte $01,$FF, $01,$08, $01,$80, $0D,$00, $02,$F7, $01,$0B, $06,$00 - .byte $01,$7F, $01,$11, $01,$7F, $04,$70, $01,$11, $01,$74, $01,$72 - .byte $03,$70, $01,$11, $02,$7F, $06,$70, $09,$00, $02,$4F, $05,$00 - .byte $01,$70, $02,$77, $01,$71, $05,$77, $01,$71, $05,$77, $01,$71 - .byte $06,$77, $01,$57, $01,$55, $09,$00, $02,$44, $04,$00, $16,$57 - .byte $01,$55, $01,$05, $01,$55, $08,$00, $02,$04, $01,$B4, $01,$04 - .byte $03,$00, $01,$55, $02,$05, $01,$55, $01,$05, $01,$B5, $04,$05 - .byte $01,$D5, $05,$05, $01,$B5, $04,$05, $01,$55, $02,$00, $01,$55 - .byte $0A,$00, $01,$BB, $04,$00, $01,$55, $02,$00, $01,$55, $01,$00 - .byte $02,$08, $02,$00, $02,$08, $04,$00, $02,$08, $04,$00, $01,$55 - .byte $02,$00, $01,$55, $0A,$00, $01,$8B, $01,$80, $03,$00, $01,$55 - .byte $02,$00, $01,$55, $11,$00, $01,$55, $02,$00, $01,$55, $0A,$00 - .byte $02,$08, $03,$00, $01,$55, $02,$00, $01,$05, $11,$00, $01,$55 - .byte $02,$00, $01,$05, $0F,$00, $01,$55, $14,$00, $01,$55, $82,$00 - .byte $FF,$FF -video_hr_rle: .byte $28,$28 - .byte $20,$00, $01,$77, $06,$57, $01,$77, $20,$00, $01,$77, $02,$55 - .byte $01,$15, $03,$55, $01,$77, $20,$00, $01,$77, $01,$55, $01,$51 - .byte $01,$11, $03,$55, $01,$77, $20,$00, $01,$77, $02,$55, $01,$11 - .byte $03,$55, $01,$77, $13,$00, $01,$50, $02,$55, $01,$50, $09,$00 - .byte $01,$77, $01,$55, $03,$51, $02,$55, $01,$77, $03,$00, $06,$70 - .byte $03,$00, $01,$DD, $01,$BD, $05,$00, $01,$B0, $01,$BB, $01,$88 - .byte $04,$00, $02,$80, $04,$00, $01,$77, $01,$7C, $06,$77, $02,$00 - .byte $01,$70, $04,$77, $01,$87, $01,$88, $03,$00, $01,$DD, $01,$BB - .byte $01,$0B, $05,$00, $01,$BB, $01,$08, $03,$00, $01,$B0, $01,$BB - .byte $01,$88, $09,$00, $01,$05, $01,$50, $02,$00, $01,$74, $01,$47 - .byte $01,$44, $02,$77, $01,$87, $01,$00, $01,$88, $03,$00, $01,$DD - .byte $01,$FF, $06,$00, $02,$22, $04,$00, $01,$BB, $01,$08, $0B,$00 - .byte $01,$05, $01,$77, $02,$99, $01,$74, $01,$77, $01,$87, $02,$00 - .byte $01,$88, $03,$00, $01,$DD, $01,$FF, $01,$0F, $01,$0B, $02,$00 - .byte $01,$B0, $01,$20, $02,$22, $04,$00, $01,$11, $0D,$00, $01,$77 - .byte $02,$79, $01,$77, $01,$87, $01,$00, $02,$E0, $01,$88, $03,$00 - .byte $01,$0D, $01,$8F, $06,$00, $02,$52, $02,$00, $01,$0B, $01,$01 - .byte $01,$11, $0D,$00, $03,$77, $01,$87, $01,$00, $01,$D0, $01,$DE - .byte $01,$EE, $01,$88, $04,$07, $01,$88, $06,$07, $02,$55, $04,$07 - .byte $01,$44, $0D,$07, $02,$77, $01,$87, $01,$00, $01,$30, $01,$3D - .byte $01,$DD, $01,$8E, $01,$08, $03,$00, $01,$08, $01,$B8, $01,$08 - .byte $05,$00, $02,$55, $04,$00, $01,$44, $0D,$00, $01,$77, $01,$08 - .byte $01,$00, $02,$22, $01,$33, $01,$8D, $01,$08, $05,$00, $01,$BB - .byte $06,$00, $02,$55, $04,$00, $01,$44, $0D,$00, $01,$08, $01,$00 - .byte $01,$10, $01,$12, $01,$22, $01,$83, $01,$08, $06,$00, $02,$08 - .byte $04,$00, $03,$08, $03,$00, $02,$08, $0E,$00, $01,$40, $01,$41 - .byte $01,$11, $01,$82, $01,$08, $22,$00, $01,$19, $01,$99, $01,$44 - .byte $01,$11, $01,$88, $23,$00, $01,$11, $01,$99, $01,$44, $01,$88 - .byte $24,$00, $01,$11, $01,$99, $01,$88, $25,$00, $01,$11, $01,$88 - .byte $26,$00, $01,$88, $27,$00 - .byte $FF,$FF -collegep_rle: .byte $28,$28 - .byte $21,$66, $02,$F6, $08,$66, $02,$F6, $03,$FF, $01,$F6, $15,$66 - .byte $01,$F6, $05,$FF, $01,$F6, $06,$66, $01,$6F, $01,$5F, $01,$FF - .byte $01,$F5, $03,$FF, $05,$66, $01,$76, $04,$A6, $01,$76, $04,$A6 - .byte $01,$76, $03,$66, $02,$5F, $03,$FF, $02,$5F, $01,$6F, $08,$66 - .byte $04,$65, $05,$66, $03,$17, $02,$1A, $01,$17, $01,$F7, $01,$17 - .byte $02,$1A, $03,$17, $03,$66, $02,$65, $02,$6F, $14,$66, $01,$1F - .byte $01,$FF, $01,$1F, $01,$4F, $01,$1F, $01,$FF, $01,$1F, $01,$FF - .byte $01,$1F, $01,$4F, $01,$1F, $01,$FF, $01,$1F, $0D,$66, $0E,$CC - .byte $01,$11, $01,$FF, $01,$11, $01,$84, $01,$11, $01,$FF, $01,$00 - .byte $01,$FF, $01,$11, $01,$84, $01,$11, $01,$FF, $01,$11, $1B,$CC - .byte $01,$C7, $01,$CF, $01,$C7, $01,$C8, $01,$C7, $01,$CF, $01,$C0 - .byte $01,$CF, $01,$C7, $01,$C8, $01,$C7, $01,$CF, $01,$C7, $1E,$CC - .byte $01,$5C, $02,$15, $01,$55, $02,$15, $01,$5C, $21,$CC, $01,$55 - .byte $01,$11, $01,$55, $01,$51, $01,$55, $01,$11, $01,$55, $21,$CC - .byte $01,$C5, $01,$51, $03,$55, $01,$51, $01,$C5, $05,$CC, $01,$5C - .byte $0A,$88, $0B,$CC, $01,$FC, $01,$FF, $01,$5C, $01,$CC, $01,$DC - .byte $08,$8C, $05,$CC, $01,$88, $01,$77, $01,$7E, $08,$EE, $0A,$CC - .byte $01,$8F, $02,$FF, $01,$85, $01,$ED, $09,$EE, $02,$E8, $01,$DC - .byte $02,$CC, $01,$88, $02,$77, $01,$85, $01,$58, $01,$98, $05,$88 - .byte $09,$CC, $01,$9C, $02,$88, $01,$48, $01,$58, $01,$88, $01,$8E - .byte $0A,$EE, $01,$ED, $01,$DC, $01,$CC, $01,$88, $02,$77, $01,$88 - .byte $01,$85, $03,$58, $01,$55, $02,$58, $08,$CC, $01,$8C, $01,$98 - .byte $03,$88, $01,$48, $01,$88, $01,$A8, $01,$8E, $0A,$EE, $01,$DD - .byte $01,$CC, $01,$C8, $02,$77, $02,$88, $01,$55, $02,$88, $01,$85 - .byte $02,$88, $07,$CC, $01,$8C, $01,$89, $02,$88, $01,$89, $04,$88 - .byte $01,$85, $01,$88, $0B,$EE, $03,$C7, $01,$C8, $01,$88, $01,$55 - .byte $03,$88, $02,$48, $06,$CC, $01,$8C, $01,$89, $01,$98, $01,$88 - .byte $01,$98, $01,$88, $01,$84, $03,$88, $01,$85, $01,$88, $01,$A8 - .byte $06,$EE, $01,$DE, $01,$CE, $07,$CC, $01,$55, $01,$48, $02,$44 - .byte $01,$49, $01,$44, $08,$CC, $05,$C8, $06,$88, $05,$EE, $01,$DD - .byte $01,$CD, $07,$CC, $01,$4C, $02,$44, $01,$49, $03,$44, $11,$DD - .byte $01,$ED, $05,$EE, $11,$DD, $10,$77, $01,$E7, $05,$EE, $12,$77 - .byte $28,$22 - .byte $FF,$FF -umcp_rle: .byte $28,$28 - .byte $1D,$66, $03,$F6, $01,$76, $03,$56, $10,$66, $02,$96, $0D,$66 - .byte $01,$F6, $01,$7F, $01,$FF, $01,$7F, $01,$57, $01,$75, $01,$57 - .byte $01,$77, $01,$55, $0F,$66, $01,$99, $02,$DD, $01,$99, $08,$66 - .byte $01,$F6, $01,$7F, $01,$F7, $01,$7F, $03,$77, $01,$75, $01,$57 - .byte $01,$75, $02,$55, $01,$65, $0B,$66, $01,$F6, $01,$76, $01,$56 - .byte $01,$66, $01,$99, $02,$DD, $01,$99, $08,$66, $01,$6F, $01,$F7 - .byte $03,$77, $01,$57, $02,$55, $03,$65, $0A,$66, $01,$FF, $01,$7F - .byte $01,$FF, $01,$77, $01,$55, $01,$65, $02,$66, $02,$69, $2B,$66 - .byte $07,$46, $1C,$66, $01,$44, $03,$66, $09,$D4, $12,$66, $01,$16 - .byte $01,$66, $01,$F6, $01,$66, $01,$16, $03,$66, $03,$44, $02,$66 - .byte $01,$DD, $01,$5D, $02,$DD, $01,$5D, $02,$DD, $01,$5D, $01,$DD - .byte $02,$66, $02,$86, $01,$46, $08,$66, $02,$D6, $03,$66, $01,$51 - .byte $01,$56, $01,$5F, $01,$56, $01,$51, $02,$66, $02,$64, $01,$84 - .byte $02,$64, $01,$66, $01,$DD, $01,$D5, $01,$DD, $01,$4D, $01,$44 - .byte $01,$4D, $01,$DD, $01,$D5, $01,$DD, $01,$66, $01,$86, $01,$88 - .byte $01,$84, $02,$44, $05,$66, $02,$6D, $02,$1D, $01,$CC, $01,$5C - .byte $07,$55, $01,$5C, $02,$CC, $01,$88, $03,$CC, $01,$DD, $01,$5D - .byte $02,$DD, $01,$8D, $02,$DD, $01,$5D, $01,$DD, $01,$CC, $01,$C8 - .byte $01,$88, $03,$44, $01,$C0, $01,$08, $01,$58, $01,$50, $01,$0C - .byte $02,$CC, $02,$11, $01,$CC, $01,$1F, $01,$FF, $05,$1F, $01,$FF - .byte $01,$1F, $02,$CC, $01,$88, $03,$CC, $01,$DD, $01,$D5, $02,$DD - .byte $01,$88, $02,$DD, $01,$D5, $01,$DD, $02,$CC, $02,$C8, $01,$C4 - .byte $02,$CC, $01,$C0, $01,$08, $01,$58, $01,$50, $01,$05, $01,$55 - .byte $01,$11, $01,$10, $01,$CC, $01,$11, $01,$FF, $01,$10, $01,$11 - .byte $01,$10, $01,$11, $01,$10, $01,$FF, $01,$11, $17,$CC, $01,$00 - .byte $01,$08, $01,$58, $01,$50, $01,$05, $01,$51, $01,$11, $01,$CC - .byte $01,$11, $01,$FF, $01,$10, $01,$11, $01,$88, $01,$11, $01,$10 - .byte $01,$FF, $01,$11, $18,$CC, $01,$00, $02,$58, $01,$50, $01,$00 - .byte $01,$51, $01,$CC, $01,$11, $01,$7F, $02,$71, $01,$78, $02,$71 - .byte $01,$7F, $01,$11, $19,$CC, $01,$00, $02,$88, $01,$00, $01,$05 - .byte $01,$CC, $09,$C7, $09,$CC, $03,$5C, $0D,$CC, $01,$C0, $01,$05 - .byte $02,$85, $01,$00, $11,$CC, $01,$5C, $01,$E5, $03,$EE, $01,$E5 - .byte $01,$5C, $0C,$CC, $01,$00, $02,$58, $01,$50, $11,$CC, $01,$FF - .byte $02,$75, $04,$55, $0C,$CC, $01,$C0, $01,$00, $02,$88, $10,$CC - .byte $02,$44, $02,$47, $03,$45, $02,$44, $0C,$CC, $01,$00, $01,$05 - .byte $01,$85, $10,$CC, $01,$44, $01,$D4, $01,$9D, $01,$D4, $01,$44 - .byte $01,$34, $01,$D3, $01,$34, $01,$44, $0D,$CC, $01,$00, $01,$08 - .byte $0F,$CC, $03,$44, $01,$CD, $03,$44, $01,$C3, $03,$44, $0C,$CC - .byte $01,$C0, $01,$00 - .byte $FF,$FF -dining_rle: .byte $28,$28 - .byte $01,$88, $03,$98, $02,$88, $01,$98, $02,$88, $02,$98, $02,$88 - .byte $03,$98, $01,$88, $02,$98, $01,$88, $03,$98, $04,$88, $01,$98 - .byte $01,$88, $01,$98, $01,$88, $03,$98, $01,$88, $01,$98, $01,$88 - .byte $01,$98, $01,$88, $01,$98, $02,$88, $01,$99, $02,$88, $01,$99 - .byte $01,$88, $01,$99, $01,$88, $01,$99, $01,$98, $01,$89, $01,$88 - .byte $01,$99, $01,$88, $01,$98, $01,$88, $01,$99, $01,$98, $02,$88 - .byte $01,$99, $05,$88, $01,$89, $01,$98, $01,$89, $01,$88, $01,$99 - .byte $01,$88, $01,$99, $01,$88, $01,$99, $01,$88, $01,$99, $01,$88 - .byte $01,$99, $02,$88, $01,$99, $02,$88, $01,$99, $01,$89, $01,$99 - .byte $01,$88, $01,$99, $01,$88, $01,$99, $01,$88, $01,$99, $01,$98 - .byte $01,$99, $01,$88, $01,$99, $01,$98, $02,$88, $01,$99, $06,$88 - .byte $01,$99, $02,$88, $01,$99, $01,$98, $01,$99, $01,$88, $01,$99 - .byte $01,$98, $01,$99, $01,$88, $01,$99, $05,$88, $01,$08, $01,$D8 - .byte $01,$08, $01,$D8, $01,$F8, $01,$18, $01,$F8, $01,$18, $07,$88 - .byte $03,$98, $01,$88, $03,$98, $01,$88, $03,$98, $01,$88, $01,$98 - .byte $02,$88, $01,$98, $01,$88, $03,$98, $05,$88, $01,$DD, $01,$00 - .byte $01,$DD, $01,$0D, $02,$F1, $02,$1F, $07,$88, $01,$99, $01,$98 - .byte $01,$99, $01,$88, $01,$99, $01,$88, $01,$99, $02,$88, $01,$99 - .byte $02,$88, $02,$99, $01,$98, $01,$99, $02,$88, $01,$99, $06,$88 - .byte $01,$00, $01,$DD, $01,$00, $01,$D0, $01,$11, $01,$FF, $01,$11 - .byte $01,$FF, $07,$88, $01,$99, $03,$88, $01,$99, $01,$98, $01,$99 - .byte $01,$88, $01,$98, $01,$99, $01,$98, $01,$88, $01,$99, $01,$88 - .byte $01,$89, $01,$99, $02,$88, $01,$99, $2C,$88, $02,$58, $08,$88 - .byte $01,$00, $01,$B0, $1B,$88, $01,$58, $01,$55, $01,$BB, $01,$B8 - .byte $07,$88, $01,$00, $01,$BB, $01,$8B, $01,$88, $01,$68, $03,$88 - .byte $01,$78, $03,$88, $02,$08, $04,$88, $02,$08, $09,$88, $02,$85 - .byte $01,$BB, $03,$88, $01,$66, $04,$88, $01,$00, $01,$22, $02,$88 - .byte $01,$FF, $03,$88, $01,$77, $02,$A7, $01,$B7, $01,$BB, $01,$00 - .byte $01,$57, $02,$A7, $01,$B7, $01,$BB, $01,$00, $07,$A7, $03,$08 - .byte $02,$11, $01,$08, $01,$77, $02,$66, $01,$77, $04,$08, $01,$22 - .byte $01,$02, $03,$05, $02,$08, $01,$77, $03,$AA, $01,$FB, $01,$F0 - .byte $01,$55, $03,$AA, $01,$2B, $01,$00, $07,$AA, $03,$00, $02,$11 - .byte $04,$77, $05,$00, $01,$A2, $07,$00, $02,$0A, $01,$7A, $02,$7F - .byte $01,$75, $01,$7A, $01,$6A, $02,$72, $01,$70, $03,$AA, $01,$B8 - .byte $01,$88, $02,$AA, $03,$00, $01,$81, $04,$77, $06,$00, $01,$AA - .byte $07,$00, $01,$70, $01,$87, $02,$88, $01,$78, $02,$77, $01,$99 - .byte $02,$77, $01,$66, $01,$77, $01,$70, $01,$0B, $01,$BB, $01,$88 - .byte $05,$00, $04,$57, $07,$00, $02,$08, $05,$00, $01,$07, $0A,$77 - .byte $01,$7F, $01,$77, $01,$7B, $01,$04, $01,$44, $01,$08, $01,$70 - .byte $04,$00, $01,$55, $01,$88, $12,$00, $01,$07, $01,$87, $07,$07 - .byte $01,$87, $01,$07, $01,$00, $01,$20, $01,$24, $01,$00, $01,$77 - .byte $04,$00, $01,$55, $02,$08, $12,$00, $01,$88, $07,$00, $01,$88 - .byte $02,$00, $01,$22, $01,$77, $01,$07, $01,$77, $04,$00, $01,$55 - .byte $14,$00, $01,$08, $07,$00, $01,$08, $01,$00, $02,$08, $01,$07 - .byte $01,$00, $01,$07, $79,$00 - .byte $FF,$FF -metro_rle: .byte $28,$28 - .byte $1F,$66, $09,$77, $03,$66, $04,$F6, $0A,$66, $01,$11, $01,$66 - .byte $02,$16, $01,$66, $01,$76, $08,$66, $01,$77, $02,$22, $02,$27 - .byte $04,$77, $02,$66, $01,$6F, $04,$7F, $01,$77, $09,$66, $02,$69 - .byte $02,$19, $01,$69, $01,$77, $08,$66, $01,$77, $05,$22, $01,$27 - .byte $02,$77, $02,$66, $01,$46, $1C,$66, $01,$77, $07,$22, $01,$77 - .byte $01,$66, $01,$46, $01,$44, $01,$46, $1B,$66, $01,$77, $07,$22 - .byte $01,$77, $01,$C6, $01,$C4, $01,$84, $01,$C4, $03,$C6, $01,$76 - .byte $02,$86, $01,$76, $09,$C6, $0B,$56, $01,$97, $01,$DD, $06,$22 - .byte $01,$77, $02,$CC, $01,$C8, $03,$CC, $01,$77, $02,$80, $01,$77 - .byte $01,$FF, $14,$CC, $01,$77, $01,$DD, $06,$22, $01,$77, $04,$CC - .byte $01,$7C, $01,$77, $02,$80, $01,$77, $02,$FF, $14,$0C, $01,$77 - .byte $01,$DD, $04,$D2, $02,$22, $01,$77, $03,$CC, $01,$7C, $01,$77 - .byte $02,$08, $01,$78, $01,$F7, $01,$FF, $01,$0F, $14,$00, $01,$77 - .byte $01,$0D, $02,$DD, $01,$0D, $03,$02, $01,$77, $02,$CC, $01,$7C - .byte $01,$87, $03,$80, $01,$77, $01,$FF, $01,$0F, $01,$00, $01,$55 - .byte $01,$85, $14,$00, $01,$F9, $02,$30, $01,$F0, $02,$80, $01,$77 - .byte $01,$CC, $01,$7C, $01,$07, $03,$08, $01,$77, $02,$FF, $02,$00 - .byte $01,$55, $01,$88, $01,$08, $11,$00, $01,$30, $01,$FF, $01,$F0 - .byte $02,$F3, $02,$FF, $01,$88, $01,$77, $01,$7C, $01,$87, $03,$80 - .byte $01,$70, $01,$F7, $01,$1F, $01,$FF, $02,$00, $02,$FF, $01,$00 - .byte $01,$80, $10,$00, $01,$0F, $06,$FF, $01,$88, $01,$77, $01,$07 - .byte $03,$08, $01,$78, $01,$77, $01,$FF, $01,$F1, $01,$FF, $02,$00 - .byte $02,$FF, $01,$0F, $01,$08, $04,$00, $01,$DD, $01,$BD, $0C,$00 - .byte $02,$3F, $02,$0F, $01,$3F, $01,$38, $01,$77, $04,$80, $01,$77 - .byte $01,$FF, $01,$1F, $01,$FF, $03,$00, $02,$1F, $06,$00, $01,$DD - .byte $01,$DB, $01,$0B, $11,$00, $01,$77, $03,$08, $01,$77, $01,$F7 - .byte $01,$FF, $01,$F1, $01,$0F, $03,$00, $02,$11, $06,$00, $01,$22 - .byte $13,$00, $01,$77, $02,$00, $01,$70, $01,$77, $03,$FF, $04,$00 - .byte $02,$11, $06,$00, $01,$22, $01,$02, $01,$03, $0E,$00, $01,$50 - .byte $02,$55, $01,$77, $02,$88, $01,$77, $01,$FF, $01,$11, $01,$FF - .byte $05,$00, $03,$88, $05,$00, $01,$22, $11,$00, $02,$05, $01,$77 - .byte $01,$00, $01,$77, $01,$F7, $02,$FF, $01,$0F, $0D,$00, $01,$82 - .byte $01,$80, $12,$00, $01,$77, $01,$70, $01,$77, $03,$FF, $22,$00 - .byte $02,$77, $03,$FF, $23,$00, $01,$77 - .byte $FF,$FF -talbot_rle: .byte $28,$28 - .byte $01,$22, $02,$66, $02,$77, $01,$FF, $0C,$77, $01,$55, $01,$00 - .byte $01,$66, $02,$00, $01,$55, $0B,$77, $01,$FF, $04,$77, $03,$66 - .byte $02,$77, $01,$FF, $0B,$77, $01,$87, $01,$55, $02,$50, $02,$53 - .byte $01,$55, $01,$87, $0A,$77, $01,$FF, $04,$77, $03,$66, $02,$77 - .byte $01,$FF, $06,$77, $01,$07, $01,$00, $01,$07, $01,$77, $02,$88 - .byte $04,$85, $01,$8C, $01,$85, $02,$88, $02,$77, $02,$87, $05,$77 - .byte $01,$FF, $04,$77, $01,$66, $01,$33, $01,$66, $02,$77, $01,$FF - .byte $06,$77, $01,$88, $01,$BB, $01,$B7, $01,$77, $01,$88, $01,$77 - .byte $01,$88, $01,$77, $02,$27, $01,$77, $01,$88, $01,$77, $01,$88 - .byte $01,$77, $01,$B7, $01,$BB, $01,$88, $05,$77, $01,$FF, $04,$77 - .byte $02,$66, $01,$76, $02,$77, $01,$FF, $06,$77, $01,$78, $01,$1B - .byte $02,$77, $01,$88, $01,$87, $01,$88, $01,$57, $02,$85, $01,$57 - .byte $01,$88, $01,$87, $01,$88, $02,$77, $01,$5B, $01,$78, $05,$77 - .byte $01,$FF, $04,$77, $02,$66, $02,$77, $01,$FF, $08,$0F, $01,$11 - .byte $01,$1F, $01,$BF, $01,$58, $02,$05, $04,$0F, $01,$05, $01,$5F - .byte $01,$58, $01,$BF, $01,$5F, $01,$55, $05,$0F, $01,$B8, $01,$88 - .byte $04,$77, $01,$66, $03,$77, $01,$44, $08,$00, $01,$41, $02,$00 - .byte $01,$88, $08,$00, $01,$88, $02,$00, $01,$25, $04,$00, $01,$B7 - .byte $01,$B5, $01,$88, $04,$77, $01,$66, $02,$77, $01,$47, $01,$C4 - .byte $01,$40, $02,$00, $01,$55, $01,$B5, $03,$00, $01,$44, $02,$00 - .byte $01,$08, $06,$00, $01,$90, $01,$95, $01,$08, $02,$00, $01,$22 - .byte $05,$00, $01,$2B, $01,$00, $01,$FF, $03,$77, $01,$66, $02,$77 - .byte $01,$44, $01,$CC, $01,$44, $01,$80, $01,$00, $01,$55, $01,$BB - .byte $01,$0B, $02,$00, $02,$08, $08,$00, $01,$09, $01,$99, $01,$55 - .byte $01,$99, $01,$09, $01,$95, $03,$00, $01,$B0, $01,$20, $01,$22 - .byte $01,$00, $01,$FF, $05,$77, $01,$44, $01,$CC, $01,$4C, $02,$C4 - .byte $01,$40, $01,$00, $01,$4B, $01,$40, $01,$B0, $0C,$00, $01,$99 - .byte $01,$00, $01,$99, $01,$00, $01,$09, $05,$00, $01,$82, $01,$00 - .byte $01,$FF, $05,$77, $01,$44, $01,$4C, $01,$C4, $01,$CC, $01,$4C - .byte $01,$04, $01,$00, $01,$44, $18,$00, $01,$88, $01,$00, $01,$FF - .byte $01,$F7, $04,$77, $02,$84, $02,$8C, $01,$44, $02,$00, $01,$55 - .byte $07,$00, $01,$D0, $06,$8D, $01,$D0, $08,$00, $01,$A0, $01,$A8 - .byte $02,$00, $01,$FF, $04,$77, $01,$88, $02,$44, $01,$88, $01,$00 - .byte $02,$80, $02,$05, $05,$00, $02,$0D, $06,$D8, $02,$0D, $09,$00 - .byte $01,$5D, $01,$DD, $01,$FF, $04,$77, $01,$88, $02,$00, $01,$88 - .byte $01,$00, $01,$88, $01,$BB, $01,$B0, $0A,$00, $02,$88, $0C,$00 - .byte $01,$0B, $01,$BB, $01,$0D, $01,$FF, $03,$77, $01,$FF, $01,$88 - .byte $02,$80, $01,$88, $01,$00, $01,$88, $01,$4B, $09,$00, $02,$D0 - .byte $02,$88, $02,$D0, $0B,$00, $01,$6B, $01,$00, $01,$0F, $01,$FF - .byte $02,$77, $01,$FF, $05,$00, $01,$88, $01,$44, $01,$04, $01,$0B - .byte $05,$00, $01,$D0, $01,$DD, $06,$88, $01,$DD, $01,$D0, $07,$00 - .byte $01,$0B, $01,$06, $01,$66, $02,$00, $01,$FF, $02,$77, $01,$FF - .byte $06,$00, $01,$22, $09,$00, $06,$0D, $0B,$00, $01,$22, $02,$00 - .byte $01,$FF, $01,$77, $02,$FF, $06,$00, $01,$82, $01,$80, $18,$00 - .byte $01,$50, $01,$52, $02,$00, $01,$0F, $01,$F7, $01,$FF, $01,$0F - .byte $25,$00, $02,$FF, $26,$00, $01,$FF - .byte $FF,$FF +title_rle: .byte $28 ; ysize=40 + .byte $00, $A0,$19,$20, $AF,$00, $22, $A3,$66, $22, $62 + .byte $66, $62, $22, $66, $A3,$22, $66, $26 + .byte $62, $22, $62, $26, $62, $22, $A3,$66 + .byte $22, $55, $00, $A3,$11, $44, $A3,$22, $44 + .byte $A3,$22, $00,$00, $22,$22, $66, $22,$22, $66, $62 + .byte $66, $22, $66, $A3,$22, $66, $26, $62 + .byte $22, $66, $22, $66, $22,$22, $66, $22,$22 + .byte $55, $00, $01, $11, $41, $44, $42 + .byte $22, $42, $44, $42, $22, $02, $00,$00 + .byte $22,$22, $66, $22,$22, $66, $22, $66, $22 + .byte $A3,$66, $22, $66, $62, $26, $22, $26 + .byte $62, $26, $22,$22, $66, $22,$22, $55, $00,$00 + .byte $11, $A3,$44, $22, $A3,$44, $22, $A3,$00, $02 + .byte $A0,$18,$52, $55, $AE,$00, $A0,$1E,$60, $AA,$00, $66, $A3,$22 + .byte $66, $26, $22, $26, $66, $22, $26 + .byte $66, $22, $66, $A3,$22, $66, $26, $22 + .byte $26, $66, $26, $62,$62, $66, $22, $66 + .byte $22, $66, $55, $A9,$00, $66, $22, $26 + .byte $66,$66, $22, $26, $22, $66, $22, $62 + .byte $26, $22, $66,$66, $22, $66,$66, $22, $26 + .byte $22, $66, $22, $26,$26, $66, $62, $26 + .byte $62, $66, $55, $A9,$00, $66, $22, $A3,$66 + .byte $22, $66, $22, $66, $22, $66, $62 + .byte $22, $66,$66, $22, $66,$66, $22, $66, $22 + .byte $66, $26,$26, $22, $66,$66, $22, $66,$66, $55 + .byte $A9,$00, $06, $A0,$1D,$56, $55, $A3,$00, $10, $A0,$24,$00 + .byte $10, $00, $10, $11, $01, $A5,$00, $A8,$CC + .byte $40, $A9,$00, $D0, $0D, $00, $D0, $0D + .byte $00, $D0, $A5,$00, $11, $AA,$00, $04, $A4,$54 + .byte $CC,$CC, $44, $55, $A6,$00, $D0, $DD, $D0,$D0 + .byte $DD, $D0,$D0, $DD, $D0, $A3,$00, $01,$01, $11 + .byte $01,$01, $AC,$00, $CC,$CC, $44, $54, $55, $A6,$00 + .byte $DD, $A7,$BB, $DD, $A4,$00, $10, $11, $10 + .byte $AC,$00, $CC,$CC, $44, $54, $55, $A7,$00, $DD + .byte $BB, $BF, $B0, $BB, $BF, $B0, $BB + .byte $DD, $A3,$00, $10, $A3,$11, $10, $AA,$00, $CC,$CC + .byte $44, $54, $55, $A8,$00, $DD, $DB, $BB + .byte $3B, $33, $BB,$BB, $DB, $DD, $A3,$00, $01,$01 + .byte $11, $01,$01, $AA,$00, $CC,$CC, $44, $55, $A9,$00 + .byte $DD,$DD, $A5,$BB, $DD,$DD, $A5,$00, $11, $AC,$00, $CC,$CC + .byte $44, $55, $A9,$00, $0D, $00, $BB, $A3,$B1 + .byte $BB, $00, $0D, $A4,$00, $BB,$BB, $AC,$00, $0C + .byte $4C, $44, $55, $AC,$00, $BB,$BB, $A6,$00, $20 + .byte $22, $2B, $0B, $AE,$00, $05,$05, $A9,$00, $20 + .byte $A6,$22, $A3,$20, $22,$22, $02, $A9,$00 + .byte $A1 +map_rle: .byte $28 ; ysize=40 + .byte $A0,$23,$66, $46, $06, $A5,$66, $56, $AE,$66, $E6 + .byte $A4,$66, $77, $FF, $F6, $A8,$66, $46, $A3,$44 + .byte $A3,$66, $E6, $56, $55, $56, $E6, $AB,$66 + .byte $6E, $66, $6E, $66,$66, $67, $A4,$6F, $A7,$66 + .byte $4F, $47, $4F, $44, $AB,$66, $A0,$17,$D6, $A3,$66 + .byte $64, $A3,$44, $46, $A8,$66, $DD, $A7,$FF, $4F + .byte $A5,$FF, $8F, $88, $8F, $FF, $7F, $77 + .byte $07, $77, $07, $77, $DD, $A3,$66, $E6 + .byte $A3,$E4, $E6, $A7,$66, $DD, $A6,$FF, $F4, $84 + .byte $F4, $A4,$FF, $8F, $A3,$FF, $7F, $77, $A3,$75 + .byte $77, $DD, $AF,$66, $DD, $AC,$CF, $A3,$C8, $A3,$CF + .byte $A5,$C7, $DD, $AA,$66, $E6, $A4,$66, $DD, $CC,$CC + .byte $4C, $A3,$CC, $77, $A6,$CC, $8C, $88, $8C + .byte $CC, $4C, $A5,$44, $DD, $A9,$66, $6E, $66 + .byte $6E, $A3,$66, $DD, $CC, $4C, $44, $4C + .byte $CC, $22, $A3,$FF, $22, $A3,$CC, $8C, $A3,$CC + .byte $C4, $A5,$44, $DD, $AC,$66, $E6, $66,$66, $DD + .byte $CC,$CC, $C8, $CC,$CC, $C2, $C7,$C7, $CF, $C2,$C2 + .byte $CC, $A3,$C8, $A3,$CC, $C8, $CC, $C8, $CC + .byte $C8, $DD, $AB,$66, $6E, $66, $6E, $66 + .byte $DD, $4C, $84, $C4, $AA,$CC, $8C, $88 + .byte $8C, $CC, $4C, $A5,$44, $DD, $AF,$66, $DD + .byte $C4, $CC, $88, $AA,$CC, $8C, $A3,$CC, $A6,$44 + .byte $DD, $66,$66, $55, $56, $66,$66, $55, $A8,$66 + .byte $DD, $A5,$CC, $A5,$9C, $CC, $1C, $A3,$C8, $1C + .byte $CC,$CC, $84, $C4, $84, $C4, $84, $DD + .byte $66,$66, $55, $66, $65, $56, $55, $A8,$66 + .byte $DD, $A3,$CC, $4C,$4C, $99, $49, $44, $99,$99 + .byte $CC, $11, $C1, $1C, $C1, $11, $A7,$CC + .byte $DD, $66,$66, $65, $A3,$66, $65, $66,$66, $6E + .byte $E6, $6E, $A3,$66, $DD, $CC,$CC, $44, $C8 + .byte $8C, $99, $94, $44, $94, $99, $CC + .byte $C1, $A3,$CC, $C1, $A7,$CC, $DD, $A3,$66, $16 + .byte $91, $16, $A4,$66, $EE, $A4,$66, $6D, $A4,$DC + .byte $D8, $D9,$D9, $D4, $D9,$D9, $DC,$DC, $8C, $88 + .byte $8E, $EE, $A7,$DC, $6D, $A3,$66, $69, $99 + .byte $69, $A3,$66, $05, $55, $66, $55, $65 + .byte $A0,$1C,$66, $86, $96, $99, $96, $86, $66,$66 + .byte $A4,$65, $A0,$1F,$66, $99, $A0,$1B,$66, $E6, $6E, $E6 + .byte $A9,$66, $69, $A0,$2B,$66 + .byte $A1 +landing_rle: .byte $28 ; ysize=40 + .byte $A3,$66, $56, $A0,$27,$66, $55, $F5, $A0,$26,$66, $55 + .byte $FF, $F5, $A0,$25,$66, $55, $FF,$FF, $F5, $A0,$24,$66 + .byte $55, $A3,$FF, $F5, $A0,$20,$66, $CC, $2C, $CC + .byte $55, $AF,$F5, $A4,$22, $A0,$12,$CC, $62, $22, $55 + .byte $FF, $A3,$11, $44, $A3,$22, $44, $A3,$22, $A3,$FF + .byte $A5,$22, $A0,$11,$CC, $22, $26, $55, $FF,$FF, $11 + .byte $A3,$44, $22, $A3,$44, $22, $A4,$FF, $A6,$22, $A0,$10,$CC + .byte $26,$26, $55, $FF,$FF, $F1, $A3,$F4, $F2, $A3,$F4 + .byte $F2, $FF, $8F,$8F, $FF, $A7,$22, $AF,$CC, $62 + .byte $26, $55, $AA,$5F, $FF,$FF, $88,$88, $FF, $A8,$22 + .byte $AE,$CC, $22, $C2, $55, $A9,$FF, $55, $FF,$FF + .byte $88,$88, $AA,$FF, $AF,$CC, $A3,$C5, $85, $A9,$C5, $85,$85 + .byte $A4,$C5, $85, $A5,$C5, $A0,$11,$CC, $C8, $A9,$CC, $A4,$85 + .byte $A4,$CC, $C8, $A0,$1E,$CC, $A6,$85, $A0,$FF,$CC, $A5,$CC + .byte $A1 +harfco_rle: .byte $28 ; ysize=40 + .byte $A5,$00, $A0,$1D,$5A, $77, $A9,$00, $F0, $00, $A0,$1B,$5A + .byte $77, $A3,$00, $F0, $A3,$00, $F0, $A0,$17,$00, $F0 + .byte $A0,$15,$00, $0F, $A0,$19,$00, $F0, $A0,$16,$00, $0F, $A0,$17,$00 + .byte $A0,$28,$22, $A0,$1D,$77, $72, $AA,$22, $A0,$1F,$77, $72, $A8,$22 + .byte $A0,$21,$77, $72, $A6,$22, $A0,$11,$77, $07, $77, $A5,$07 + .byte $77, $00, $77, $07, $A7,$77, $A5,$22, $AC,$77 + .byte $57, $00, $57, $00, $57, $00, $57 + .byte $A5,$00, $57, $00, $57, $00, $57, $A7,$77 + .byte $A4,$22, $AB,$77, $75, $55, $50, $A3,$55, $50 + .byte $A9,$55, $50, $55, $75, $A7,$77, $A3,$22, $A0,$25,$77 + .byte $A3,$22, $A0,$24,$77, $27, $A3,$22, $A0,$24,$77, $A4,$22, $A0,$22,$77 + .byte $27, $A5,$22, $A0,$21,$77, $27, $A6,$22, $A0,$20,$77, $27 + .byte $A7,$22, $A0,$1F,$77, $27, $A8,$22, $A0,$1E,$77, $27, $A9,$22 + .byte $A1 +belair_rle: .byte $28 ; ysize=40 + .byte $AA,$00, $05, $57, $75, $57, $75, $57 + .byte $75, $57, $75, $57, $75, $57, $75 + .byte $57, $75, $57, $75, $57, $75, $57 + .byte $05, $AB,$00, $70, $A9,$00, $05, $AF,$57, $05 + .byte $A5,$00, $0D, $D0, $A5,$00, $07, $7F, $07 + .byte $A5,$00, $70, $F7, $70, $A0,$17,$00, $DD, $AE,$00 + .byte $07, $A0,$17,$00, $0D, $AD,$00, $70, $A0,$1C,$00, $60 + .byte $E6, $60, $A7,$00, $07, $7F, $07, $A6,$00 + .byte $50, $A6,$85, $50, $AE,$00, $06, $AC,$00, $A5,$50 + .byte $A8,$88, $A0,$10,$00, $50,$50, $20, $A3,$22, $92, $D9 + .byte $A3,$50, $88, $98, $88, $98, $55, $88 + .byte $89, $88, $08,$08, $88, $89, $88, $A3,$50 + .byte $A6,$40, $A7,$50, $20, $A3,$22, $92, $D9, $0D + .byte $D9, $A3,$00, $A4,$88, $55, $A3,$88, $00,$00, $A3,$88 + .byte $A3,$00, $A6,$74, $A7,$00, $22,$22, $92, $D9, $0D + .byte $D9, $9D, $D9, $A9,$00, $08, $88, $00,$00 + .byte $88, $08, $A4,$00, $77, $07, $E7,$E7, $07 + .byte $77, $A7,$00, $88, $D9, $0D, $D9, $9D + .byte $D9, $0D, $D9, $A0,$13,$00, $77, $00, $EE,$EE + .byte $00, $77, $A7,$00, $88, $D9, $9D, $D9 + .byte $0D, $D9, $9D, $09, $A0,$13,$00, $77,$77, $EE,$EE + .byte $77,$77, $A4,$00, $D0, $10, $00, $88, $D9 + .byte $0D, $D9, $00, $09, $A0,$1F,$00, $DD, $11 + .byte $01, $88, $D9, $9D, $09, $A0,$21,$00, $DD + .byte $00,$00, $08, $09, $A0,$20,$00, $40, $44, $04 + .byte $DD, $04, $44, $A0,$23,$00, $A5,$04, $A0,$A0,$00 + .byte $A1 +math_office_rle: .byte $28 ; ysize=40 + .byte $A0,$19,$00, $AF,$44, $A0,$19,$00, $44, $FF, $4F, $F4 + .byte $44,$44, $F4, $FF, $F4, $44,$44, $FF, $F4 + .byte $44, $FF, $A0,$19,$00, $44, $FF, $4F, $F4 + .byte $44, $4F, $44, $FF, $44, $4F, $44 + .byte $FF, $44, $4F, $FF, $A0,$19,$00, $44, $4F,$4F + .byte $A4,$44, $4F, $A3,$44, $4F, $44,$44, $4F, $A0,$19,$00 + .byte $AF,$44, $00,$00, $88, $B8, $A7,$00, $80,$80, $A7,$00 + .byte $B8, $88, $00,$00, $0A, $AF,$07, $00,$00, $88 + .byte $BB, $0B, $A6,$00, $88, $BB, $B0, $A5,$00 + .byte $0B, $BB, $88, $A4,$00, $B8, $88, $AE,$00 + .byte $88, $A8,$00, $88, $FB, $A7,$00, $2B, $A4,$00 + .byte $0B, $BB, $88, $AE,$00, $77, $FF, $A7,$00 + .byte $F8, $FF, $F0, $A5,$00, $44, $22, $A5,$00 + .byte $FF, $08, $80, $AD,$00, $F7,$F7, $0B, $A6,$00 + .byte $7F, $11, $7F, $A4,$70, $11, $74, $72 + .byte $A3,$70, $11, $7F,$7F, $A6,$70, $A9,$00, $4F,$4F, $A5,$00 + .byte $70, $77,$77, $71, $A5,$77, $71, $A5,$77, $71 + .byte $A6,$77, $57, $55, $A9,$00, $44,$44, $A4,$00, $A0,$16,$57 + .byte $55, $05, $55, $A8,$00, $04,$04, $B4, $04 + .byte $A3,$00, $55, $05,$05, $55, $05, $B5, $A4,$05 + .byte $D5, $A5,$05, $B5, $A4,$05, $55, $00,$00, $55 + .byte $AA,$00, $BB, $A4,$00, $55, $00,$00, $55, $00 + .byte $08,$08, $00,$00, $08,$08, $A4,$00, $08,$08, $A4,$00, $55 + .byte $00,$00, $55, $AA,$00, $8B, $80, $A3,$00, $55 + .byte $00,$00, $55, $A0,$11,$00, $55, $00,$00, $55, $AA,$00 + .byte $08,$08, $A3,$00, $55, $00,$00, $05, $A0,$11,$00, $55 + .byte $00,$00, $05, $AF,$00, $55, $A0,$14,$00, $55, $A0,$82,$00 + .byte $A1 +video_hr_rle: .byte $28 ; ysize=40 + .byte $A0,$20,$00, $77, $A6,$57, $77, $A0,$20,$00, $77, $55,$55 + .byte $15, $A3,$55, $77, $A0,$20,$00, $77, $55, $51 + .byte $11, $A3,$55, $77, $A0,$20,$00, $77, $55,$55, $11 + .byte $A3,$55, $77, $A0,$13,$00, $50, $55,$55, $50, $A9,$00 + .byte $77, $55, $A3,$51, $55,$55, $77, $A3,$00, $A6,$70 + .byte $A3,$00, $DD, $BD, $A5,$00, $B0, $BB, $88 + .byte $A4,$00, $80,$80, $A4,$00, $77, $7C, $A6,$77, $00,$00 + .byte $70, $A4,$77, $87, $88, $A3,$00, $DD, $BB + .byte $0B, $A5,$00, $BB, $08, $A3,$00, $B0, $BB + .byte $88, $A9,$00, $05, $50, $00,$00, $74, $47 + .byte $44, $77,$77, $87, $00, $88, $A3,$00, $DD + .byte $FF, $A6,$00, $22,$22, $A4,$00, $BB, $08, $AB,$00 + .byte $05, $77, $99,$99, $74, $77, $87, $00,$00 + .byte $88, $A3,$00, $DD, $FF, $0F, $0B, $00,$00 + .byte $B0, $20, $22,$22, $A4,$00, $11, $AD,$00, $77 + .byte $79,$79, $77, $87, $00, $E0,$E0, $88, $A3,$00 + .byte $0D, $8F, $A6,$00, $52,$52, $00,$00, $0B, $01 + .byte $11, $AD,$00, $A3,$77, $87, $00, $D0, $DE + .byte $EE, $88, $A4,$07, $88, $A6,$07, $55,$55, $A4,$07 + .byte $44, $AD,$07, $77,$77, $87, $00, $30, $3D + .byte $DD, $8E, $08, $A3,$00, $08, $B8, $08 + .byte $A5,$00, $55,$55, $A4,$00, $44, $AD,$00, $77, $08 + .byte $00, $22,$22, $33, $8D, $08, $A5,$00, $BB + .byte $A6,$00, $55,$55, $A4,$00, $44, $AD,$00, $08, $00 + .byte $10, $12, $22, $83, $08, $A6,$00, $08,$08 + .byte $A4,$00, $A3,$08, $A3,$00, $08,$08, $AE,$00, $40, $41 + .byte $11, $82, $08, $A0,$22,$00, $19, $99, $44 + .byte $11, $88, $A0,$23,$00, $11, $99, $44, $88 + .byte $A0,$24,$00, $11, $99, $88, $A0,$25,$00, $11, $88 + .byte $A0,$26,$00, $88, $A0,$27,$00 + .byte $A1 +collegep_rle: .byte $28 ; ysize=40 + .byte $A0,$21,$66, $F6,$F6, $A8,$66, $F6,$F6, $A3,$FF, $F6, $A0,$15,$66 + .byte $F6, $A5,$FF, $F6, $A6,$66, $6F, $5F, $FF + .byte $F5, $A3,$FF, $A5,$66, $76, $A4,$56, $76, $A4,$56 + .byte $76, $A3,$66, $5F,$5F, $A3,$FF, $5F,$5F, $6F, $A8,$66 + .byte $A4,$65, $A5,$66, $A3,$17, $1A,$1A, $17, $F7, $17 + .byte $1A,$1A, $A3,$17, $A3,$66, $65,$65, $6F,$6F, $A0,$14,$66, $1F + .byte $FF, $1F, $4F, $1F, $FF, $1F, $FF + .byte $1F, $4F, $1F, $FF, $1F, $AD,$66, $AE,$CC + .byte $11, $FF, $11, $84, $11, $FF, $00 + .byte $FF, $11, $84, $11, $FF, $11, $A0,$1B,$CC + .byte $C7, $CF, $C7, $C8, $C7, $CF, $C0 + .byte $CF, $C7, $C8, $C7, $CF, $C7, $A0,$1E,$CC + .byte $5C, $15,$15, $55, $15,$15, $5C, $A0,$21,$CC, $55 + .byte $11, $55, $51, $55, $11, $55, $A0,$21,$CC + .byte $C5, $51, $A3,$55, $51, $C5, $A5,$CC, $5C + .byte $AA,$88, $AB,$CC, $FC, $FF, $5C, $CC, $DC + .byte $A8,$8C, $A5,$CC, $88, $77, $7E, $A8,$EE, $AA,$CC + .byte $8F, $FF,$FF, $85, $ED, $A9,$EE, $E8,$E8, $DC + .byte $CC,$CC, $88, $77,$77, $85, $58, $98, $A5,$88 + .byte $A9,$CC, $9C, $88,$88, $48, $58, $88, $8E + .byte $AA,$EE, $ED, $DC, $CC, $88, $77,$77, $88 + .byte $85, $A3,$58, $55, $58,$58, $A8,$CC, $8C, $98 + .byte $A3,$88, $48, $88, $58, $8E, $AA,$EE, $DD + .byte $CC, $C8, $77,$77, $88,$88, $55, $88,$88, $85 + .byte $88,$88, $A7,$CC, $8C, $89, $88,$88, $89, $A4,$88 + .byte $85, $88, $AB,$EE, $A3,$C7, $C8, $88, $55 + .byte $A3,$88, $48,$48, $A6,$CC, $8C, $89, $98, $88 + .byte $98, $88, $84, $A3,$88, $85, $88, $58 + .byte $A6,$EE, $DE, $CE, $A7,$CC, $55, $48, $44,$44 + .byte $49, $44, $A8,$CC, $A5,$C8, $A6,$88, $A5,$EE, $DD + .byte $CD, $A7,$CC, $4C, $44,$44, $49, $A3,$44, $A0,$11,$DD + .byte $ED, $A5,$EE, $A0,$11,$DD, $A0,$10,$77, $E7, $A5,$EE, $A0,$12,$77 + .byte $A0,$28,$22 + .byte $A1 +umcp_rle: .byte $28 ; ysize=40 + .byte $A0,$1D,$66, $A3,$F6, $76, $A3,$56, $A0,$10,$66, $96,$96, $AD,$66 + .byte $F6, $7F, $FF, $7F, $57, $75, $57 + .byte $77, $55, $AF,$66, $99, $DD,$DD, $99, $A8,$66 + .byte $F6, $7F, $F7, $7F, $A3,$77, $75, $57 + .byte $75, $55,$55, $65, $AB,$66, $F6, $76, $56 + .byte $66, $99, $DD,$DD, $99, $A8,$66, $6F, $F7 + .byte $A3,$77, $57, $55,$55, $A3,$65, $AA,$66, $FF, $7F + .byte $FF, $77, $55, $65, $66,$66, $69,$69, $A0,$2B,$66 + .byte $A7,$46, $A0,$1C,$66, $44, $A3,$66, $A9,$D4, $A0,$12,$66, $16 + .byte $66, $F6, $66, $16, $A3,$66, $A3,$44, $66,$66 + .byte $DD, $5D, $DD,$DD, $5D, $DD,$DD, $5D, $DD + .byte $66,$66, $86,$86, $46, $A8,$66, $D6,$D6, $A3,$66, $51 + .byte $56, $5F, $56, $51, $66,$66, $64,$64, $84 + .byte $64,$64, $66, $DD, $D5, $DD, $4D, $44 + .byte $4D, $DD, $D5, $DD, $66, $86, $88 + .byte $84, $44,$44, $A5,$66, $6D,$6D, $1D,$1D, $CC, $5C + .byte $A7,$55, $5C, $CC,$CC, $88, $A3,$CC, $DD, $5D + .byte $DD,$DD, $8D, $DD,$DD, $5D, $DD, $CC, $C8 + .byte $88, $A3,$44, $C0, $08, $58, $50, $0C + .byte $CC,$CC, $11,$11, $CC, $1F, $FF, $A5,$1F, $FF + .byte $1F, $CC,$CC, $88, $A3,$CC, $DD, $D5, $DD,$DD + .byte $88, $DD,$DD, $D5, $DD, $CC,$CC, $C8,$C8, $C4 + .byte $CC,$CC, $C0, $08, $58, $50, $05, $55 + .byte $11, $10, $CC, $11, $FF, $10, $11 + .byte $10, $11, $10, $FF, $11, $A0,$17,$CC, $00 + .byte $08, $58, $50, $05, $51, $11, $CC + .byte $11, $FF, $10, $11, $88, $11, $10 + .byte $FF, $11, $A0,$18,$CC, $00, $58,$58, $50, $00 + .byte $51, $CC, $11, $7F, $71,$71, $78, $71,$71 + .byte $7F, $11, $A0,$19,$CC, $00, $88,$88, $00, $05 + .byte $CC, $A9,$C7, $A9,$CC, $A3,$5C, $AD,$CC, $C0, $05 + .byte $85,$85, $00, $A0,$11,$CC, $5C, $E5, $A3,$EE, $E5 + .byte $5C, $AC,$CC, $00, $58,$58, $50, $A0,$11,$CC, $FF + .byte $75,$75, $A4,$55, $AC,$CC, $C0, $00, $88,$88, $A0,$10,$CC + .byte $44,$44, $47,$47, $A3,$45, $44,$44, $AC,$CC, $00, $05 + .byte $85, $A0,$10,$CC, $44, $D4, $9D, $D4, $44 + .byte $34, $D3, $34, $44, $AD,$CC, $00, $08 + .byte $AF,$CC, $A3,$44, $CD, $A3,$44, $C3, $A3,$44, $AC,$CC + .byte $C0, $00 + .byte $A1 +dining_rle: .byte $28 ; ysize=40 + .byte $88, $A3,$98, $88,$88, $98, $88,$88, $98,$98, $88,$88 + .byte $A3,$98, $88, $98,$98, $88, $A3,$98, $A4,$88, $98 + .byte $88, $98, $88, $A3,$98, $88, $98, $88 + .byte $98, $88, $98, $88,$88, $99, $88,$88, $99 + .byte $88, $99, $88, $99, $98, $89, $88 + .byte $99, $88, $98, $88, $99, $98, $88,$88 + .byte $99, $A5,$88, $89, $98, $89, $88, $99 + .byte $88, $99, $88, $99, $88, $99, $88 + .byte $99, $88,$88, $99, $88,$88, $99, $89, $99 + .byte $88, $99, $88, $99, $88, $99, $98 + .byte $99, $88, $99, $98, $88,$88, $99, $A6,$88 + .byte $99, $88,$88, $99, $98, $99, $88, $99 + .byte $98, $99, $88, $99, $A5,$88, $08, $D8 + .byte $08, $D8, $F8, $18, $F8, $18, $A7,$88 + .byte $A3,$98, $88, $A3,$98, $88, $A3,$98, $88, $98 + .byte $88,$88, $98, $88, $A3,$98, $A5,$88, $DD, $00 + .byte $DD, $0D, $F1,$F1, $1F,$1F, $A7,$88, $99, $98 + .byte $99, $88, $99, $88, $99, $88,$88, $99 + .byte $88,$88, $99,$99, $98, $99, $88,$88, $99, $A6,$88 + .byte $00, $DD, $00, $D0, $11, $FF, $11 + .byte $FF, $A7,$88, $99, $A3,$88, $99, $98, $99 + .byte $88, $98, $99, $98, $88, $99, $88 + .byte $89, $99, $88,$88, $99, $A0,$2C,$88, $58,$58, $A8,$88 + .byte $00, $B0, $A0,$1B,$88, $58, $55, $BB, $B8 + .byte $A7,$88, $00, $BB, $8B, $88, $68, $A3,$88 + .byte $78, $A3,$88, $08,$08, $A4,$88, $08,$08, $A9,$88, $85,$85 + .byte $BB, $A3,$88, $66, $A4,$88, $00, $22, $88,$88 + .byte $FF, $A3,$88, $77, $57,$57, $B7, $BB, $00 + .byte $A3,$57, $B7, $BB, $00, $A7,$57, $A3,$08, $11,$11 + .byte $08, $77, $66,$66, $77, $A4,$08, $22, $02 + .byte $A3,$05, $08,$08, $77, $A3,$5A, $FB, $F0, $55 + .byte $A3,$5A, $2B, $00, $A7,$5A, $A3,$00, $11,$11, $A4,$77 + .byte $A5,$00, $52, $A7,$00, $0A,$0A, $7A, $7F,$7F, $75 + .byte $7A, $6A, $72,$72, $70, $A3,$5A, $B8, $88 + .byte $5A,$5A, $A3,$00, $81, $A4,$77, $A6,$00, $5A, $A7,$00 + .byte $70, $87, $88,$88, $78, $77,$77, $99, $77,$77 + .byte $66, $77, $70, $0B, $BB, $88, $A5,$00 + .byte $A4,$57, $A7,$00, $08,$08, $A5,$00, $07, $AA,$77, $7F + .byte $77, $7B, $04, $44, $08, $70, $A4,$00 + .byte $55, $88, $A0,$12,$00, $07, $87, $A7,$07, $87 + .byte $07, $00, $20, $24, $00, $77, $A4,$00 + .byte $55, $08,$08, $A0,$12,$00, $88, $A7,$00, $88, $00,$00 + .byte $22, $77, $07, $77, $A4,$00, $55, $A0,$14,$00 + .byte $08, $A7,$00, $08, $00, $08,$08, $07, $00 + .byte $07, $A0,$79,$00 + .byte $A1 +metro_rle: .byte $28 ; ysize=40 + .byte $A0,$1F,$66, $A9,$77, $A3,$66, $A4,$F6, $AA,$66, $11, $66 + .byte $16,$16, $66, $76, $A8,$66, $77, $22,$22, $27,$27 + .byte $A4,$77, $66,$66, $6F, $A4,$7F, $77, $A9,$66, $69,$69 + .byte $19,$19, $69, $77, $A8,$66, $77, $A5,$22, $27 + .byte $77,$77, $66,$66, $46, $A0,$1C,$66, $77, $A7,$22, $77 + .byte $66, $46, $44, $46, $A0,$1B,$66, $77, $A7,$22 + .byte $77, $C6, $C4, $84, $C4, $A3,$C6, $76 + .byte $86,$86, $76, $A9,$C6, $AB,$56, $97, $DD, $A6,$22 + .byte $77, $CC,$CC, $C8, $A3,$CC, $77, $80,$80, $77 + .byte $FF, $A0,$14,$CC, $77, $DD, $A6,$22, $77, $A4,$CC + .byte $7C, $77, $80,$80, $77, $FF,$FF, $A0,$14,$0C, $77 + .byte $DD, $A4,$D2, $22,$22, $77, $A3,$CC, $7C, $77 + .byte $08,$08, $78, $F7, $FF, $0F, $A0,$14,$00, $77 + .byte $0D, $DD,$DD, $0D, $A3,$02, $77, $CC,$CC, $7C + .byte $87, $A3,$80, $77, $FF, $0F, $00, $55 + .byte $85, $A0,$14,$00, $F9, $30,$30, $F0, $80,$80, $77 + .byte $CC, $7C, $07, $A3,$08, $77, $FF,$FF, $00,$00 + .byte $55, $88, $08, $A0,$11,$00, $30, $FF, $F0 + .byte $F3,$F3, $FF,$FF, $88, $77, $7C, $87, $A3,$80 + .byte $70, $F7, $1F, $FF, $00,$00, $FF,$FF, $00 + .byte $80, $A0,$10,$00, $0F, $A6,$FF, $88, $77, $07 + .byte $A3,$08, $78, $77, $FF, $F1, $FF, $00,$00 + .byte $FF,$FF, $0F, $08, $A4,$00, $DD, $BD, $AC,$00 + .byte $3F,$3F, $0F,$0F, $3F, $38, $77, $A4,$80, $77 + .byte $FF, $1F, $FF, $A3,$00, $1F,$1F, $A6,$00, $DD + .byte $DB, $0B, $A0,$11,$00, $77, $A3,$08, $77, $F7 + .byte $FF, $F1, $0F, $A3,$00, $11,$11, $A6,$00, $22 + .byte $A0,$13,$00, $77, $00,$00, $70, $77, $A3,$FF, $A4,$00 + .byte $11,$11, $A6,$00, $22, $02, $03, $AE,$00, $50 + .byte $55,$55, $77, $88,$88, $77, $FF, $11, $FF + .byte $A5,$00, $A3,$88, $A5,$00, $22, $A0,$11,$00, $05,$05, $77 + .byte $00, $77, $F7, $FF,$FF, $0F, $AD,$00, $82 + .byte $80, $A0,$12,$00, $77, $70, $77, $A3,$FF, $A0,$22,$00 + .byte $77,$77, $A3,$FF, $A0,$23,$00, $77 + .byte $A1 +talbot_rle: .byte $28 ; ysize=40 + .byte $22, $66,$66, $77,$77, $FF, $AC,$77, $55, $00 + .byte $66, $00,$00, $55, $AB,$77, $FF, $A4,$77, $A3,$66 + .byte $77,$77, $FF, $AB,$77, $87, $55, $50,$50, $53,$53 + .byte $55, $87, $AA,$77, $FF, $A4,$77, $A3,$66, $77,$77 + .byte $FF, $A6,$77, $07, $00, $07, $77, $88,$88 + .byte $A4,$85, $8C, $85, $88,$88, $77,$77, $87,$87, $A5,$77 + .byte $FF, $A4,$77, $66, $33, $66, $77,$77, $FF + .byte $A6,$77, $88, $BB, $B7, $77, $88, $77 + .byte $88, $77, $27,$27, $77, $88, $77, $88 + .byte $77, $B7, $BB, $88, $A5,$77, $FF, $A4,$77 + .byte $66,$66, $76, $77,$77, $FF, $A6,$77, $78, $1B + .byte $77,$77, $88, $87, $88, $57, $85,$85, $57 + .byte $88, $87, $88, $77,$77, $5B, $78, $A5,$77 + .byte $FF, $A4,$77, $66,$66, $77,$77, $FF, $A8,$0F, $11 + .byte $1F, $BF, $58, $05,$05, $A4,$0F, $05, $5F + .byte $58, $BF, $5F, $55, $A5,$0F, $B8, $88 + .byte $A4,$77, $66, $A3,$77, $44, $A8,$00, $41, $00,$00 + .byte $88, $A8,$00, $88, $00,$00, $25, $A4,$00, $B7 + .byte $B5, $88, $A4,$77, $66, $77,$77, $47, $C4 + .byte $40, $00,$00, $55, $B5, $A3,$00, $44, $00,$00 + .byte $08, $A6,$00, $90, $95, $08, $00,$00, $22 + .byte $A5,$00, $2B, $00, $FF, $A3,$77, $66, $77,$77 + .byte $44, $CC, $44, $80, $00, $55, $BB + .byte $0B, $00,$00, $08,$08, $A8,$00, $09, $99, $55 + .byte $99, $09, $95, $A3,$00, $B0, $20, $22 + .byte $00, $FF, $A5,$77, $44, $CC, $4C, $C4,$C4 + .byte $40, $00, $4B, $40, $B0, $AC,$00, $99 + .byte $00, $99, $00, $09, $A5,$00, $82, $00 + .byte $FF, $A5,$77, $44, $4C, $C4, $CC, $4C + .byte $04, $00, $44, $A0,$18,$00, $88, $00, $FF + .byte $F7, $A4,$77, $84,$84, $8C,$8C, $44, $00,$00, $55 + .byte $A7,$00, $D0, $A6,$8D, $D0, $A8,$00, $50, $58 + .byte $00,$00, $FF, $A4,$77, $88, $44,$44, $88, $00 + .byte $80,$80, $05,$05, $A5,$00, $0D,$0D, $A6,$D8, $0D,$0D, $A9,$00 + .byte $5D, $DD, $FF, $A4,$77, $88, $00,$00, $88 + .byte $00, $88, $BB, $B0, $AA,$00, $88,$88, $AC,$00 + .byte $0B, $BB, $0D, $FF, $A3,$77, $FF, $88 + .byte $80,$80, $88, $00, $88, $4B, $A9,$00, $D0,$D0 + .byte $88,$88, $D0,$D0, $AB,$00, $6B, $00, $0F, $FF + .byte $77,$77, $FF, $A5,$00, $88, $44, $04, $0B + .byte $A5,$00, $D0, $DD, $A6,$88, $DD, $D0, $A7,$00 + .byte $0B, $06, $66, $00,$00, $FF, $77,$77, $FF + .byte $A6,$00, $22, $A9,$00, $A6,$0D, $AB,$00, $22, $00,$00 + .byte $FF, $77, $FF,$FF, $A6,$00, $82, $80, $A0,$18,$00 + .byte $50, $52, $00,$00, $0F, $F7, $FF, $0F + .byte $A0,$25,$00, $FF,$FF, $A0,$26,$00, $FF + .byte $A1 diff --git a/tfv/tfv_flying.s b/tfv/tfv_flying.s index ac5fa953..eabbf663 100644 --- a/tfv/tfv_flying.s +++ b/tfv/tfv_flying.s @@ -1222,7 +1222,7 @@ fixed_sin_scale: ; .byte $A6,$8A,$76,$68,$5C,$53,$4B,$45,$40,$3B,$37,$34,$30,$2E,$2B,$29 ; we can guarantee 4 cycle indexed reads if we page-aligned this -.align 256 +;.align 256 horizontal_lookup: .byte $0C,$0B,$0A,$09,$09,$08,$08,$07,$07,$06,$06,$06,$05,$05,$05,$05 .byte $04,$04,$04,$04,$04,$04,$04,$03,$03,$03,$03,$03,$03,$03,$03,$03 diff --git a/tfv/tfv_old.s b/tfv/tfv_old.s new file mode 100644 index 00000000..d91c86c4 --- /dev/null +++ b/tfv/tfv_old.s @@ -0,0 +1,98 @@ + ;================= + ; load RLE image + ;================= + ; Output is BASH/BASL + ; Input is in GBASH/GBASL +load_rle_gr: + lda #$0 + tax + tay ; init X and Y to 0 + + sta CV ; ycoord=0 + + lda (GBASL),y ; load xsize + sta CH + iny ; (we should check if we had + ; bad luck and overflows page) + + iny ; skip ysize + +rle_loop: + lda (GBASL),y ; load run value + cmp #$ff ; if 0xff + beq rle_done ; we are done + sta RUN + iny ; point to next value + bne rle_yskip1 ; if overflow, increment address + inc GBASH +rle_yskip1: + lda (GBASL),y ; load value to write + iny + bne rle_yskip2 + inc GBASH +rle_yskip2: + sty TEMP2 ; save y for later + pha + lda #$0 + tay + pla ; convoluted way to set y to 0 + +rle_run_loop: + sta (BASL),y ; write out the value + inc BASL ; increment the pointer + bne rle_skip3 ; if wrapped + inc BASH ; then increment the high value +rle_skip3: + inx ; increment the X value + cpx CH ; compare against the image width + bcc rle_not_eol ; if less then keep going + + pha ; save out value on stack + + lda BASL ; cheat to avoid a 16-bit add + cmp #$a7 ; we are adding 0x58 to get + bcc rle_add_skip ; to the next line + inc BASH +rle_add_skip: + clc + adc #$58 ; actually do the 0x58 add + sta BASL ; and store it back + + inc CV ; add 2 to ypos + inc CV ; each "line" is two high + + lda CV ; load value + cmp #15 ; if it's greater than 14 it wraps + bcc rle_no_wrap ; Thanks Woz + + lda #$0 ; we wrapped, so set to zero + sta CV + + ; when wrapping have to sub 0x3d8 + sec ; this is a 16-bit subtract routine + lda BASL + sbc #$d8 ; LSB + sta BASL + lda BASH ; MSB + sbc #$3 ; + sta BASH + +rle_no_wrap: + lda #$0 ; set X value back to zero + tax + pla ; restore value to write from stack + +rle_not_eol: + dec RUN ; decrement run value + bne rle_run_loop ; if not zero, keep looping + + ldy TEMP2 ; restore the input pointer + sec + bcs rle_loop ; and branch always + +rle_done: + lda #$15 ; move the cursor somewhere sane + sta CV + rts + + diff --git a/tfv/tfv_utils.s b/tfv/tfv_utils.s index 57182a52..005dbff8 100644 --- a/tfv/tfv_utils.s +++ b/tfv/tfv_utils.s @@ -71,49 +71,59 @@ memset_loop: ; Input is in GBASH/GBASL load_rle_gr: lda #$0 - tax - tay ; init X and Y to 0 + tay ; init Y to 0 + sta TEMP ; stores the xcoord sta CV ; ycoord=0 - lda (GBASL),y ; load xsize + jsr load_and_increment ; load xsize sta CH - iny ; (we should check if we had - ; bad luck and overflows page) - - iny ; skip ysize rle_loop: - lda (GBASL),y ; load run value - cmp #$ff ; if 0xff - beq rle_done ; we are done - sta RUN - iny ; point to next value - bne rle_yskip1 ; if overflow, increment address - inc GBASH -rle_yskip1: - lda (GBASL),y ; load value to write - iny - bne rle_yskip2 - inc GBASH -rle_yskip2: - sty TEMP2 ; save y for later - pha - lda #$0 - tay - pla ; convoluted way to set y to 0 + jsr load_and_increment + cmp #$A1 ; if 0xa1 + beq rle_done ; we are done + + pha + + and #$f0 ; mask + cmp #$a0 ; see if special AX + beq decompress_special + + pla ; note, PLA sets flags! + + ldx #$1 ; only want to print 1 + bne decompress_run + +decompress_special: + pla + + and #$0f ; check if was A0 + + bne decompress_color ; if A0 need to read run, color + +decompress_large: + jsr load_and_increment ; get run length + +decompress_color: + tax ; put runlen into X + jsr load_and_increment ; get color + +decompress_run: rle_run_loop: sta (BASL),y ; write out the value inc BASL ; increment the pointer bne rle_skip3 ; if wrapped inc BASH ; then increment the high value -rle_skip3: - inx ; increment the X value - cpx CH ; compare against the image width - bcc rle_not_eol ; if less then keep going - pha ; save out value on stack +rle_skip3: + pha ; store colore for later + + inc TEMP ; increment the X value + lda TEMP + cmp CH ; compare against the image width + bcc rle_not_eol ; if less then keep going lda BASL ; cheat to avoid a 16-bit add cmp #$a7 ; we are adding 0x58 to get @@ -145,16 +155,13 @@ rle_add_skip: rle_no_wrap: lda #$0 ; set X value back to zero - tax - pla ; restore value to write from stack + sta TEMP rle_not_eol: - dec RUN ; decrement run value + pla ; restore color + dex bne rle_run_loop ; if not zero, keep looping - - ldy TEMP2 ; restore the input pointer - sec - bcs rle_loop ; and branch always + beq rle_loop ; and branch always rle_done: lda #$15 ; move the cursor somewhere sane @@ -162,6 +169,15 @@ rle_done: rts +load_and_increment: + lda (GBASL),y ; load value ; 5? + inc GBASL ; 5? + bne lskip2 ; 2nt/3 + inc GBASH ; 5? +lskip2: + rts ; 6 + + ;========================================================== ; set_text_page0 ;========================================================== @@ -751,3 +767,10 @@ clear_bottom_loop: bne clear_bottom_loop rts + + ; move these to zero page for slight speed increase? +gr_offsets: + .word $400,$480,$500,$580,$600,$680,$700,$780 + .word $428,$4a8,$528,$5a8,$628,$6a8,$728,$7a8 + .word $450,$4d0,$550,$5d0,$650,$6d0,$750,$7d0 +