From 8139c2520cc4151584ab44f2d5669b721c78df0f Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Sun, 27 Sep 2020 22:03:01 -0400 Subject: [PATCH] tfv: update to match more modern vmw games mostly using lzsa compression --- tfv/Makefile | 41 +- tfv/art/title.png | Bin 9747 -> 0 bytes tfv/decompress_fast_v2.s | 370 ++++++++++++++++ tfv/gr_fast_clear.s | 201 +++++++++ tfv/{art => graphics_map}/Apple II Lowres.gpl | 0 tfv/graphics_map/Makefile | 33 ++ tfv/{art => graphics_map}/ap_calculus.png | Bin tfv/{art => graphics_map}/belair.png | Bin tfv/{art => graphics_map}/collegep.png | Bin .../concept/worldmap.piskel | 0 .../concept/worldmap.png | Bin tfv/{art => graphics_map}/deutsch.png | Bin tfv/{art => graphics_map}/dining.png | Bin tfv/{art => graphics_map}/fountain.png | Bin tfv/{art => graphics_map}/harfco.png | Bin tfv/{art => graphics_map}/homeroom.png | Bin tfv/{art => graphics_map}/jc.png | Bin tfv/{art => graphics_map}/jc_hallway.png | Bin tfv/{art => graphics_map}/jc_office.png | Bin tfv/{art => graphics_map}/landing.png | Bin tfv/{art => graphics_map}/map.png | Bin tfv/{art => graphics_map}/math_office.png | Bin tfv/{art => graphics_map}/metro.png | Bin tfv/{art => graphics_map}/mirror_lake.png | Bin tfv/{art => graphics_map}/patriot_room.png | Bin tfv/{art => graphics_map}/puzzle.png | Bin tfv/{art => graphics_map}/sprites.piskel | 0 tfv/{art => graphics_map}/sprites.png | Bin tfv/{art => graphics_map}/talbot.png | Bin tfv/{art => graphics_map}/title.piskel | 0 tfv/graphics_map/title.png | Bin 0 -> 10645 bytes tfv/{art => graphics_map}/umcp.png | Bin tfv/{art => graphics_map}/video_hr.png | Bin tfv/{art => graphics_map}/waterfall.png | Bin tfv/hardware.inc | 98 ++++ tfv/multiply_fast.s | 351 +++++++++++++++ tfv/tfv.s | 8 +- tfv/tfv_backgrounds.inc | 419 ------------------ tfv/tfv_flying.s | 28 +- tfv/tfv_info.s | 21 +- tfv/tfv_title.s | 24 +- tfv/tfv_worldmap.s | 46 +- tfv/tfv_zp.inc | 315 ++++++------- 43 files changed, 1290 insertions(+), 665 deletions(-) delete mode 100644 tfv/art/title.png create mode 100644 tfv/decompress_fast_v2.s create mode 100644 tfv/gr_fast_clear.s rename tfv/{art => graphics_map}/Apple II Lowres.gpl (100%) create mode 100644 tfv/graphics_map/Makefile rename tfv/{art => graphics_map}/ap_calculus.png (100%) rename tfv/{art => graphics_map}/belair.png (100%) rename tfv/{art => graphics_map}/collegep.png (100%) rename tfv/{art => graphics_map}/concept/worldmap.piskel (100%) rename tfv/{art => graphics_map}/concept/worldmap.png (100%) rename tfv/{art => graphics_map}/deutsch.png (100%) rename tfv/{art => graphics_map}/dining.png (100%) rename tfv/{art => graphics_map}/fountain.png (100%) rename tfv/{art => graphics_map}/harfco.png (100%) rename tfv/{art => graphics_map}/homeroom.png (100%) rename tfv/{art => graphics_map}/jc.png (100%) rename tfv/{art => graphics_map}/jc_hallway.png (100%) rename tfv/{art => graphics_map}/jc_office.png (100%) rename tfv/{art => graphics_map}/landing.png (100%) rename tfv/{art => graphics_map}/map.png (100%) rename tfv/{art => graphics_map}/math_office.png (100%) rename tfv/{art => graphics_map}/metro.png (100%) rename tfv/{art => graphics_map}/mirror_lake.png (100%) rename tfv/{art => graphics_map}/patriot_room.png (100%) rename tfv/{art => graphics_map}/puzzle.png (100%) rename tfv/{art => graphics_map}/sprites.piskel (100%) rename tfv/{art => graphics_map}/sprites.png (100%) rename tfv/{art => graphics_map}/talbot.png (100%) rename tfv/{art => graphics_map}/title.piskel (100%) create mode 100644 tfv/graphics_map/title.png rename tfv/{art => graphics_map}/umcp.png (100%) rename tfv/{art => graphics_map}/video_hr.png (100%) rename tfv/{art => graphics_map}/waterfall.png (100%) create mode 100644 tfv/hardware.inc create mode 100644 tfv/multiply_fast.s delete mode 100644 tfv/tfv_backgrounds.inc diff --git a/tfv/Makefile b/tfv/Makefile index de169cb5..f6550945 100644 --- a/tfv/Makefile +++ b/tfv/Makefile @@ -8,39 +8,15 @@ ARTDIR = ./art all: tfv.dsk -$(PNG2RLE): - cd ../gr-utils && make - $(DOS33): cd ../dos33fs-utils && make -tfv.dsk: $(DOS33) TFV +tfv.dsk: $(DOS33) TFV HELLO + $(DOS33) -y tfv.dsk SAVE A HELLO $(DOS33) -y tfv.dsk BSAVE -a 0x1000 TFV # $(DOS33) -y tfv.dsk BSAVE -a 0x2000 HIGHWIND.ED # $(DOS33) -y tfv.dsk BSAVE -a 0x2000 FIGHTING.ED - -tfv_backgrounds.inc: $(PNG2RLE) \ - $(ARTDIR)/title.png $(ARTDIR)/map.png \ - $(ARTDIR)/landing.png $(ARTDIR)/harfco.png \ - $(ARTDIR)/belair.png \ - $(ARTDIR)/math_office.png $(ARTDIR)/video_hr.png \ - $(ARTDIR)/collegep.png \ - $(ARTDIR)/umcp.png \ - $(ARTDIR)/dining.png $(ARTDIR)/metro.png $(ARTDIR)/talbot.png - $(PNG2RLE) asm $(ARTDIR)/title.png title_rle > tfv_backgrounds.inc - $(PNG2RLE) asm $(ARTDIR)/map.png map_rle >> tfv_backgrounds.inc - $(PNG2RLE) asm $(ARTDIR)/landing.png landing_rle >> tfv_backgrounds.inc - $(PNG2RLE) asm $(ARTDIR)/harfco.png harfco_rle >> tfv_backgrounds.inc - $(PNG2RLE) asm $(ARTDIR)/belair.png belair_rle >> tfv_backgrounds.inc - $(PNG2RLE) asm $(ARTDIR)/math_office.png math_office_rle >> tfv_backgrounds.inc - $(PNG2RLE) asm $(ARTDIR)/video_hr.png video_hr_rle >> tfv_backgrounds.inc - $(PNG2RLE) asm $(ARTDIR)/collegep.png collegep_rle >> tfv_backgrounds.inc - $(PNG2RLE) asm $(ARTDIR)/umcp.png umcp_rle >> tfv_backgrounds.inc - $(PNG2RLE) asm $(ARTDIR)/dining.png dining_rle >> tfv_backgrounds.inc - $(PNG2RLE) asm $(ARTDIR)/metro.png metro_rle >> tfv_backgrounds.inc - $(PNG2RLE) asm $(ARTDIR)/talbot.png talbot_rle >> tfv_backgrounds.inc - ### TFV: tfv.o @@ -49,9 +25,9 @@ TFV: tfv.o tfv.o: tfv.s \ tfv_flying.s tfv_info.s tfv_opener.s tfv_title.s \ tfv_textentry.s tfv_worldmap.s \ - tfv_backgrounds.inc tfv_sprites.inc tfv_zp.inc \ + graphics_map/tfv_backgrounds.inc tfv_sprites.inc tfv_zp.inc \ ../asm_routines/multiply_fast.s \ - ../asm_routines/gr_fast_clear.s \ + gr_fast_clear.s \ ../asm_routines/pageflip.s \ ../asm_routines/gr_setpage.s \ ../asm_routines/keypress.s \ @@ -63,7 +39,16 @@ tfv.o: tfv.s \ ../asm_routines/gr_unrle.s ca65 -o tfv.o tfv.s -l tfv.lst +graphics_map/tfv_backgrounds.inc: + cd graphics_map && make +### + +HELLO: hello.bas + ../asoft_basic-utils/tokenize_asoft < hello.bas > HELLO + + +### clean: rm -f *~ TITLE.GR *.o *.lst ED TFV diff --git a/tfv/art/title.png b/tfv/art/title.png deleted file mode 100644 index 9b34384656695681aae8eb40f5718d8f202f1e4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9747 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 diff --git a/tfv/decompress_fast_v2.s b/tfv/decompress_fast_v2.s new file mode 100644 index 00000000..fb2f24ad --- /dev/null +++ b/tfv/decompress_fast_v2.s @@ -0,0 +1,370 @@ +; note -- modified by Vince Weaver to assemble with ca65 +; in this case, A = page to decompress to +; getsrc_smc+1, getsrc_smc+2 is src location + +; ----------------------------------------------------------------------------- +; Decompress raw LZSA2 block. +; Create one with lzsa -r -f2 +; +; in: +; * LZSA_SRC_LO and LZSA_SRC_HI contain the compressed raw block address +; * LZSA_DST_LO and LZSA_DST_HI contain the destination buffer address +; +; out: +; * LZSA_DST_LO and LZSA_DST_HI contain the last decompressed byte address, +1 +; +; ----------------------------------------------------------------------------- +; Backward decompression is also supported, use lzsa -r -b -f2 +; To use it, also define BACKWARD_DECOMPRESS=1 before including this code! +; +; in: +; * LZSA_SRC_LO/LZSA_SRC_HI must contain the address of the last byte of compressed data +; * LZSA_DST_LO/LZSA_DST_HI must contain the address of the last byte of the destination buffer +; +; out: +; * LZSA_DST_LO/LZSA_DST_HI contain the last decompressed byte address, -1 +; +; ----------------------------------------------------------------------------- +; +; Copyright (C) 2019 Emmanuel Marty, Peter Ferrie +; +; This software is provided 'as-is', without any express or implied +; warranty. In no event will the authors be held liable for any damages +; arising from the use of this software. +; +; Permission is granted to anyone to use this software for any purpose, +; including commercial applications, and to alter it and redistribute it +; freely, subject to the following restrictions: +; +; 1. The origin of this software must not be misrepresented; you must not +; claim that you wrote the original software. If you use this software +; in a product, an acknowledgment in the product documentation would be +; appreciated but is not required. +; 2. Altered source versions must be plainly marked as such, and must not be +; misrepresented as being the original software. +; 3. This notice may not be removed or altered from any source distribution. +; ----------------------------------------------------------------------------- + +;NIBCOUNT = $FC ; zero-page location for temp offset + +decompress_lzsa2_fast: + + sta LZSA_DST_HI + + ldy #$00 + sty LZSA_DST_LO + sty NIBCOUNT + +decode_token: + jsr getsrc ; read token byte: XYZ|LL|MMM + pha ; preserve token on stack + + and #$18 ; isolate literals count (LL) + beq no_literals ; skip if no literals to copy + cmp #$18 ; LITERALS_RUN_LEN_V2? + bcc prepare_copy_literals ; if less, count is directly embedded in token + + jsr getnibble ; get extra literals length nibble + ; add nibble to len from token + adc #$02 ; (LITERALS_RUN_LEN_V2) minus carry + cmp #$12 ; LITERALS_RUN_LEN_V2 + 15 ? + bcc prepare_copy_literals_direct ; if less, literals count is complete + + jsr getsrc ; get extra byte of variable literals count + ; the carry is always set by the CMP above + ; GETSRC doesn't change it + sbc #$EE ; overflow? + jmp prepare_copy_literals_direct + +prepare_copy_literals_large: + ; handle 16 bits literals count + ; literals count = directly these 16 bits + jsr getlargesrc ; grab low 8 bits in X, high 8 bits in A + tay ; put high 8 bits in Y + bcs prepare_copy_literals_high ; (*same as JMP PREPARE_COPY_LITERALS_HIGH but shorter) + +prepare_copy_literals: + lsr ; shift literals count into place + lsr + lsr + +prepare_copy_literals_direct: + tax + bcs prepare_copy_literals_large ; if so, literals count is large + +prepare_copy_literals_high: + txa + beq copy_literals + iny + +copy_literals: + jsr getput ; copy one byte of literals + dex + bne copy_literals + dey + bne copy_literals + +no_literals: + pla ; retrieve token from stack + pha ; preserve token again + asl + bcs repmatch_or_large_offset ; 1YZ: rep-match or 13/16 bit offset + + asl ; 0YZ: 5 or 9 bit offset + bcs offset_9_bit + + ; 00Z: 5 bit offset + + ldx #$FF ; set offset bits 15-8 to 1 + + jsr getcombinedbits ; rotate Z bit into bit 0, read nibble for bits 4-1 + ora #$E0 ; set bits 7-5 to 1 + bne got_offset_lo ; go store low byte of match offset and prepare match + +offset_9_bit: ; 01Z: 9 bit offset + ;;asl ; shift Z (offset bit 8) in place + rol + rol + and #$01 + eor #$FF ; set offset bits 15-9 to 1 + bne got_offset_hi ; go store high byte, read low byte of match offset and prepare match + ; (*same as JMP GOT_OFFSET_HI but shorter) + +repmatch_or_large_offset: + asl ; 13 bit offset? + bcs repmatch_or_16bit ; handle rep-match or 16-bit offset if not + + ; 10Z: 13 bit offset + + jsr getcombinedbits ; rotate Z bit into bit 8, read nibble for bits 12-9 + adc #$DE ; set bits 15-13 to 1 and substract 2 (to substract 512) + bne got_offset_hi ; go store high byte, read low byte of match offset and prepare match + ; (*same as JMP GOT_OFFSET_HI but shorter) + +repmatch_or_16bit: ; rep-match or 16 bit offset + ;;ASL ; XYZ=111? + bmi rep_match ; reuse previous offset if so (rep-match) + + ; 110: handle 16 bit offset + jsr getsrc ; grab high 8 bits +got_offset_hi: + tax + jsr getsrc ; grab low 8 bits +got_offset_lo: + sta OFFSLO ; store low byte of match offset + stx OFFSHI ; store high byte of match offset + +rep_match: +.ifdef BACKWARD_DECOMPRESS + + ; Backward decompression - substract match offset + + sec ; add dest + match offset + lda putdst+1 ; low 8 bits +OFFSLO = *+1 + sbc #$AA + sta copy_match_loop+1 ; store back reference address + lda putdst+2 +OFFSHI = *+1 + sbc #$AA ; high 8 bits + sta copy_match_loop+2 ; store high 8 bits of address + sec + +.else + + ; Forward decompression - add match offset + + clc ; add dest + match offset + lda putdst+1 ; low 8 bits +OFFSLO = *+1 + adc #$AA + sta copy_match_loop+1 ; store back reference address +OFFSHI = *+1 + lda #$AA ; high 8 bits + adc putdst+2 + sta copy_match_loop+2 ; store high 8 bits of address +.endif + + pla ; retrieve token from stack again + and #$07 ; isolate match len (MMM) + adc #$01 ; add MIN_MATCH_SIZE_V2 and carry + cmp #$09 ; MIN_MATCH_SIZE_V2 + MATCH_RUN_LEN_V2? + bcc prepare_copy_match ; if less, length is directly embedded in token + + jsr getnibble ; get extra match length nibble + ; add nibble to len from token + adc #$08 ; (MIN_MATCH_SIZE_V2 + MATCH_RUN_LEN_V2) minus carry + cmp #$18 ; MIN_MATCH_SIZE_V2 + MATCH_RUN_LEN_V2 + 15? + bcc prepare_copy_match ; if less, match length is complete + + jsr getsrc ; get extra byte of variable match length + ; the carry is always set by the CMP above + ; GETSRC doesn't change it + sbc #$E8 ; overflow? + +prepare_copy_match: + tax + bcc prepare_copy_match_y ; if not, the match length is complete + beq decompression_done ; if EOD code, bail + + ; Handle 16 bits match length + jsr getlargesrc ; grab low 8 bits in X, high 8 bits in A + tay ; put high 8 bits in Y + +prepare_copy_match_y: + txa + beq copy_match_loop + iny + +copy_match_loop: + lda $AAAA ; get one byte of backreference + jsr putdst ; copy to destination + +.ifdef BACKWARD_DECOMPRESS + + ; Backward decompression -- put backreference bytes backward + + lda copy_match_loop+1 + beq getmatch_adj_hi +getmatch_done: + dec copy_match_loop+1 + +.else + + ; Forward decompression -- put backreference bytes forward + + inc copy_match_loop+1 + beq getmatch_adj_hi +getmatch_done: + +.endif + + dex + bne copy_match_loop + dey + bne copy_match_loop + jmp decode_token + +.ifdef BACKWARD_DECOMPRESS + +getmatch_adj_hi: + dec copy_match_loop+2 + jmp getmatch_done + +.else + +getmatch_adj_hi: + inc copy_match_loop+2 + jmp getmatch_done +.endif + +getcombinedbits: + eor #$80 + asl + php + + jsr getnibble ; get nibble into bits 0-3 (for offset bits 1-4) + plp ; merge Z bit as the carry bit (for offset bit 0) +combinedbitz: + rol ; nibble -> bits 1-4; carry(!Z bit) -> bit 0 ; carry cleared +decompression_done: + rts + +getnibble: +NIBBLES = *+1 + lda #$AA + lsr NIBCOUNT + bcc need_nibbles + and #$0F ; isolate low 4 bits of nibble + rts + +need_nibbles: + inc NIBCOUNT + jsr getsrc ; get 2 nibbles + sta NIBBLES + lsr + lsr + lsr + lsr + sec + rts + +.ifdef BACKWARD_DECOMPRESS + + ; Backward decompression -- get and put bytes backward + +getput: + jsr getsrc +putdst: +LZSA_DST_LO = *+1 +LZSA_DST_HI = *+2 + sta $AAAA + lda putdst+1 + beq putdst_adj_hi + dec putdst+1 + rts + +putdst_adj_hi: + dec putdst+2 + dec putdst+1 + rts + +getlargesrc: + jsr getsrc ; grab low 8 bits + tax ; move to X + ; fall through grab high 8 bits + +getsrc: +LZSA_SRC_LO = *+1 +LZSA_SRC_HI = *+2 + lda $AAAA + pha + lda getsrc+1 + beq getsrc_adj_hi + dec getsrc+1 + pla + rts + +getsrc_adj_hi: + dec getsrc+2 + dec getsrc+1 + pla + rts + +.else + + ; Forward decompression -- get and put bytes forward + +getput: + jsr getsrc +putdst: +LZSA_DST_LO = *+1 +LZSA_DST_HI = *+2 + sta $AAAA + inc putdst+1 + beq putdst_adj_hi + rts + +putdst_adj_hi: + inc putdst+2 + rts + +getlargesrc: + jsr getsrc ; grab low 8 bits + tax ; move to X + ; fall through grab high 8 bits + +getsrc: +getsrc_smc: +LZSA_SRC_LO = *+1 +LZSA_SRC_HI = *+2 + lda $AAAA + inc getsrc+1 + beq getsrc_adj_hi + rts + +getsrc_adj_hi: + inc getsrc+2 + rts +.endif + diff --git a/tfv/gr_fast_clear.s b/tfv/gr_fast_clear.s new file mode 100644 index 00000000..8cc8d152 --- /dev/null +++ b/tfv/gr_fast_clear.s @@ -0,0 +1,201 @@ +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 + + + + + ;========================================================= + ; clear_top + ;========================================================= + ; clear DRAW_PAGE + ; original = 14,558 cycles(?) 15ms, 70Hz + ; OPTIMIZED MAX (page0,48rows): 45*120+4+6 = 5410 = 5.4ms 185Hz + ; (pageX,40rows): 50*120+4+6 = 6010 = 6.0ms 166Hz + ; 50*120+4+6+37 = 6055 = 6.0ms 166Hz +clear_top: + lda #0 ; 2 +clear_top_a: + sta COLOR ; 3 + clc ; 2 + lda DRAW_PAGE ; 3 + + adc #4 ; 2 + sta __ctf+2 ; 3 + sta __ctf+5 ; 3 + adc #1 ; 2 + sta __ctf+8 ; 3 + sta __ctf+11 ; 3 + adc #1 ; 2 + sta __ctf2+2 ; 3 + sta __ctf2+5 ; 3 + adc #1 ; 2 + sta __ctf2+8 ; 3 + sta __ctf2+11 ; 3 + + + ldy #120 ; 2 + lda COLOR ; 3 +clear_top_fast_loop: +__ctf: + sta $400,Y ; 5 + sta $480,Y ; 5 + sta $500,Y ; 5 + sta $580,Y ; 5 + + cpy #80 ; 2 + bpl no_draw_bottom ; 2nt/3 +__ctf2: + sta $600,Y ; 5 + sta $680,Y ; 5 + sta $700,Y ; 5 + sta $780,Y ; 5 +no_draw_bottom: + + dey ; 2 + bpl clear_top_fast_loop ; 2nt/3 + + rts ; 6 + + + + + ;========================================================= + ; clear_bottom + ;========================================================= + ; clear bottom of draw page + +clear_bottom: + clc ; 2 + lda DRAW_PAGE ; 3 + + adc #6 ; 2 + sta __cbf2+2 ; 3 + sta __cbf2+5 ; 3 + adc #1 ; 2 + sta __cbf2+8 ; 3 + sta __cbf2+11 ; 3 + + + ldy #120 ; 2 + lda #$a0 ; Normal Space ; 2 +clear_bottom_fast_loop: +__cbf2: + sta $600,Y ; 5 + sta $680,Y ; 5 + sta $700,Y ; 5 + sta $780,Y ; 5 + + dey ; 2 + cpy #80 ; 2 + bpl clear_bottom_fast_loop ; 2nt/3 + + rts ; 6 + + +;clear_screens_notext: + ;=================================== + ; Clear top/bottom of page 0 + ;=================================== + +; lda #$0 +; sta DRAW_PAGE +; jsr clear_all + + ;=================================== + ; Clear top/bottom of page 1 + ;=================================== + +; lda #$4 +; sta DRAW_PAGE +; jsr clear_all + +; rts + + +clear_bottoms: + + lda DRAW_PAGE + pha + + ;=================================== + ; Clear bottom of page 0 + ;=================================== + + lda #$0 + sta DRAW_PAGE + jsr clear_bottom + + ;=================================== + ; Clear bottom of page 1 + ;=================================== + + lda #$4 + sta DRAW_PAGE + jsr clear_bottom + + pla + sta DRAW_PAGE + + rts + + + ;========================================================= + ; clear_all + ;========================================================= + ; clear 48 rows + +clear_all: + clc ; 2 + lda DRAW_PAGE ; 3 + + adc #4 ; 2 + sta __caf+2 ; 3 + sta __caf+5 ; 3 + adc #1 ; 2 + sta __caf+8 ; 3 + sta __caf+11 ; 3 + adc #1 ; 2 + sta __caf2+2 ; 3 + sta __caf2+5 ; 3 + adc #1 ; 2 + sta __caf2+8 ; 3 + sta __caf2+11 ; 3 + + + ldy #120 ; 2 +clear_all_color: + lda #' '|$80 ; 2 +clear_all_fast_loop: +__caf: + sta $400,Y ; 5 + sta $480,Y ; 5 + sta $500,Y ; 5 + sta $580,Y ; 5 +__caf2: + sta $600,Y ; 5 + sta $680,Y ; 5 + sta $700,Y ; 5 + sta $780,Y ; 5 + + dey ; 2 + bpl clear_all_fast_loop ; 2nt/3 + + rts ; 6 diff --git a/tfv/art/Apple II Lowres.gpl b/tfv/graphics_map/Apple II Lowres.gpl similarity index 100% rename from tfv/art/Apple II Lowres.gpl rename to tfv/graphics_map/Apple II Lowres.gpl diff --git a/tfv/graphics_map/Makefile b/tfv/graphics_map/Makefile new file mode 100644 index 00000000..d6e334bc --- /dev/null +++ b/tfv/graphics_map/Makefile @@ -0,0 +1,33 @@ +include ../../Makefile.inc + +PNG2RLE = ../../gr-utils/png2rle +PNG2GR = ../../gr-utils/png2gr +LZSA = ~/research/lzsa/lzsa/lzsa + +tfv_backgrounds.inc: \ + title.lzsa map.lzsa landing.lzsa harfco.lzsa \ + belair.lzsa math_office.lzsa video_hr.lzsa \ + collegep.lzsa umcp.lzsa dining.lzsa metro.lzsa \ + talbot.lzsa + echo "title_lzsa: .incbin \"title.lzsa\"" > tfv_backgrounds.inc + echo "map_lzsa: .incbin \"map.lzsa\"" >> tfv_backgrounds.inc + echo "landing_lzsa: .incbin \"landing.lzsa\"" >> tfv_backgrounds.inc + echo "harfco_lzsa: .incbin \"harfco.lzsa\"" >> tfv_backgrounds.inc + echo "belair_lzsa: .incbin \"belair.lzsa\"" >> tfv_backgrounds.inc + echo "math_office_lzsa: .incbin \"math_office.lzsa\"" >> tfv_backgrounds.inc + echo "video_hr_lzsa: .incbin \"video_hr.lzsa\"" >> tfv_backgrounds.inc + echo "collegep_lzsa: .incbin \"collegep.lzsa\"" >> tfv_backgrounds.inc + echo "umcp_lzsa: .incbin \"umcp.lzsa\"" >> tfv_backgrounds.inc + echo "dining_lzsa: .incbin \"dining.lzsa\"" >> tfv_backgrounds.inc + echo "metro_lzsa: .incbin \"metro.lzsa\"" >> tfv_backgrounds.inc + echo "talbot_lzsa: .incbin \"talbot.lzsa\"" >> tfv_backgrounds.inc + +%.gr: %.png + $(PNG2GR) $< $@ + +%.lzsa: %.gr + $(LZSA) -r -f2 $< $@ + +clean: + rm -f *~ tfv_backgrounds.inc + diff --git a/tfv/art/ap_calculus.png b/tfv/graphics_map/ap_calculus.png similarity index 100% rename from tfv/art/ap_calculus.png rename to tfv/graphics_map/ap_calculus.png diff --git a/tfv/art/belair.png b/tfv/graphics_map/belair.png similarity index 100% rename from tfv/art/belair.png rename to tfv/graphics_map/belair.png diff --git a/tfv/art/collegep.png b/tfv/graphics_map/collegep.png similarity index 100% rename from tfv/art/collegep.png rename to tfv/graphics_map/collegep.png diff --git a/tfv/art/concept/worldmap.piskel b/tfv/graphics_map/concept/worldmap.piskel similarity index 100% rename from tfv/art/concept/worldmap.piskel rename to tfv/graphics_map/concept/worldmap.piskel diff --git a/tfv/art/concept/worldmap.png b/tfv/graphics_map/concept/worldmap.png similarity index 100% rename from tfv/art/concept/worldmap.png rename to tfv/graphics_map/concept/worldmap.png diff --git a/tfv/art/deutsch.png b/tfv/graphics_map/deutsch.png similarity index 100% rename from tfv/art/deutsch.png rename to tfv/graphics_map/deutsch.png diff --git a/tfv/art/dining.png b/tfv/graphics_map/dining.png similarity index 100% rename from tfv/art/dining.png rename to tfv/graphics_map/dining.png diff --git a/tfv/art/fountain.png b/tfv/graphics_map/fountain.png similarity index 100% rename from tfv/art/fountain.png rename to tfv/graphics_map/fountain.png diff --git a/tfv/art/harfco.png b/tfv/graphics_map/harfco.png similarity index 100% rename from tfv/art/harfco.png rename to tfv/graphics_map/harfco.png diff --git a/tfv/art/homeroom.png b/tfv/graphics_map/homeroom.png similarity index 100% rename from tfv/art/homeroom.png rename to tfv/graphics_map/homeroom.png diff --git a/tfv/art/jc.png b/tfv/graphics_map/jc.png similarity index 100% rename from tfv/art/jc.png rename to tfv/graphics_map/jc.png diff --git a/tfv/art/jc_hallway.png b/tfv/graphics_map/jc_hallway.png similarity index 100% rename from tfv/art/jc_hallway.png rename to tfv/graphics_map/jc_hallway.png diff --git a/tfv/art/jc_office.png b/tfv/graphics_map/jc_office.png similarity index 100% rename from tfv/art/jc_office.png rename to tfv/graphics_map/jc_office.png diff --git a/tfv/art/landing.png b/tfv/graphics_map/landing.png similarity index 100% rename from tfv/art/landing.png rename to tfv/graphics_map/landing.png diff --git a/tfv/art/map.png b/tfv/graphics_map/map.png similarity index 100% rename from tfv/art/map.png rename to tfv/graphics_map/map.png diff --git a/tfv/art/math_office.png b/tfv/graphics_map/math_office.png similarity index 100% rename from tfv/art/math_office.png rename to tfv/graphics_map/math_office.png diff --git a/tfv/art/metro.png b/tfv/graphics_map/metro.png similarity index 100% rename from tfv/art/metro.png rename to tfv/graphics_map/metro.png diff --git a/tfv/art/mirror_lake.png b/tfv/graphics_map/mirror_lake.png similarity index 100% rename from tfv/art/mirror_lake.png rename to tfv/graphics_map/mirror_lake.png diff --git a/tfv/art/patriot_room.png b/tfv/graphics_map/patriot_room.png similarity index 100% rename from tfv/art/patriot_room.png rename to tfv/graphics_map/patriot_room.png diff --git a/tfv/art/puzzle.png b/tfv/graphics_map/puzzle.png similarity index 100% rename from tfv/art/puzzle.png rename to tfv/graphics_map/puzzle.png diff --git a/tfv/art/sprites.piskel b/tfv/graphics_map/sprites.piskel similarity index 100% rename from tfv/art/sprites.piskel rename to tfv/graphics_map/sprites.piskel diff --git a/tfv/art/sprites.png b/tfv/graphics_map/sprites.png similarity index 100% rename from tfv/art/sprites.png rename to tfv/graphics_map/sprites.png diff --git a/tfv/art/talbot.png b/tfv/graphics_map/talbot.png similarity index 100% rename from tfv/art/talbot.png rename to tfv/graphics_map/talbot.png diff --git a/tfv/art/title.piskel b/tfv/graphics_map/title.piskel similarity index 100% rename from tfv/art/title.piskel rename to tfv/graphics_map/title.piskel diff --git a/tfv/graphics_map/title.png b/tfv/graphics_map/title.png new file mode 100644 index 0000000000000000000000000000000000000000..bfdc128f05893ddd9d9adb935b4a8b3f91641b1d GIT binary patch literal 10645 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 W((I*I)/4) +; square2_lo = <(((I-255)*(I-255))/4) +; square2_hi = >(((I-255)*(I-255))/4) + +; Note: DOS3.3 starts at $9600 + +.ifndef square1_lo +square1_lo = $8E00 +square1_hi = $9000 +square2_lo = $9200 +square2_hi = $9400 +.endif + +; for(i=0;i<512;i++) { +; square1_lo[i]=((i*i)/4)&0xff; +; square1_hi[i]=(((i*i)/4)>>8)&0xff; +; square2_lo[i]=( ((i-255)*(i-255))/4)&0xff; +; square2_hi[i]=(( ((i-255)*(i-255))/4)>>8)&0xff; +; } + +init_multiply_tables: + + ; Build the add tables + + ldx #$00 + txa + .byte $c9 ; CMP #immediate - skip TYA and clear carry flag +lb1: tya + adc #$00 ; 0 +ml1: sta square1_hi,x ; square1_hi[0]=0 + tay ; y=0 + cmp #$40 ; subtract 64 and update flags (c=0) + txa ; a=0 + ror ; rotate +ml9: adc #$00 ; add 0 + sta ml9+1 ; update add value + inx ; x=1 +ml0: sta square1_lo,x ; square1_lo[0]=1 + bne lb1 ; if not zero, loop + inc ml0+2 ; increment values + inc ml1+2 ; increment values + clc ; c=0 + iny ; y=1 + bne lb1 ; loop + + ; Build the subtract tables based on the existing one + + ldx #$00 + ldy #$ff +second_table: + lda square1_hi+1,x + sta square2_hi+$100,x + lda square1_hi,x + sta square2_hi,y + lda square1_lo+1,x + sta square2_lo+$100,x + lda square1_lo,x + sta square2_lo,y + dey + inx + bne second_table + + + rts + + +; Fast 16x16 bit unsigned multiplication, 32-bit result +; Input: NUM1H:NUM1L * NUM2H:NUM2L +; Result: RESULT3:RESULT2:RESULT1:RESULT0 +; +; Does self-modifying code to hard-code NUM1H:NUM1L into the code +; carry=0: re-use previous NUM1H:NUM1L +; carry=1: reload NUM1H:NUM1L (58 cycles slower) +; +; clobbered: RESULT, X, A, C +; Allocation setup: T1,T2 and RESULT preferably on Zero-page. +; +; NUM1H (x_i), NUM1L (x_f) +; NUM2H (y_i), NUM2L (y_f) + +; NUM1L * NUM2L = AAaa +; NUM1L * NUM2H = BBbb +; NUM1H * NUM2L = CCcc +; NUM1H * NUM2H = DDdd +; +; AAaa +; BBbb +; CCcc +; + DDdd +; ---------- +; RESULT + +;fixed_16x16_mul_unsigned: + +multiply: + + bcc num1_same_as_last_time ; 2nt/3 + + ;============================ + ; Set up self-modifying code + ; this changes the code to be hard-coded to multiply by NUM1H:NUM1L + ;============================ + + lda NUM1L ; load the low byte ; 3 + sta sm1a+1 ; 3 + sta sm3a+1 ; 3 + sta sm5a+1 ; 3 + sta sm7a+1 ; 3 + eor #$ff ; invert the bits for subtracting ; 2 + sta sm2a+1 ; 3 + sta sm4a+1 ; 3 + sta sm6a+1 ; 3 + sta sm8a+1 ; 3 + lda NUM1H ; load the high byte ; 3 + sta sm1b+1 ; 3 + sta sm3b+1 ; 3 + sta sm5b+1 ; 3 +; sta sm7b+1 ; + eor #$ff ; invert the bits for subtractin ; 2 + sta sm2b+1 ; 3 + sta sm4b+1 ; 3 + sta sm6b+1 ; 3 +; sta sm8b+1 ; + ;=========== + ; 52 + +num1_same_as_last_time: + + ;========================== + ; Perform NUM1L * NUM2L = AAaa + ;========================== + + ldx NUM2L ; (low le) ; 3 + sec ; 2 +sm1a: + lda square1_lo,x ; 4 +sm2a: + sbc square2_lo,x ; 4 + + ; a is _aa + +; sta RESULT+0 ; + +sm3a: + lda square1_hi,x ; 4 +sm4a: + sbc square2_hi,x ; 4 + ; a is _AA + sta _AA+1 ; 3 + ;=========== + ; 24 + + ; Perform NUM1H * NUM2L = CCcc + sec ; 2 +sm1b: + lda square1_lo,x ; 4 +sm2b: + sbc square2_lo,x ; 4 + ; a is _cc + sta _cc+1 ; 3 +sm3b: + lda square1_hi,x ; 4 +sm4b: + sbc square2_hi,x ; 4 + ; a is _CC + sta _CC+1 ; 3 + ;=========== + ; 24 + + ;========================== + ; Perform NUM1L * NUM2H = BBbb + ;========================== + ldx NUM2H ; 3 + sec ; 2 +sm5a: + lda square1_lo,x ; 4 +sm6a: + sbc square2_lo,x ; 4 + ; a is _bb + sta _bb+1 ; 3 + +sm7a: + lda square1_hi,x ; 4 +sm8a: + sbc square2_hi,x ; 4 + ; a is _BB + sta _BB+1 ; 3 + ;=========== + ; 27 + + ;========================== + ; Perform NUM1H * NUM2H = DDdd + ;========================== + sec ; 2 +sm5b: + lda square1_lo,x ; 4 +sm6b: + sbc square2_lo,x ; 4 + ; a is _dd + sta _dd+1 ; 3 +;sm7b: +; lda square1_hi,x ; +;sm8b: +; sbc square2_hi,x ; + ; a = _DD +; sta RESULT+3 ; + ;=========== + ; 13 + + ;=========================================== + ; Add the separate multiplications together + ;=========================================== + + clc ; 2 +_AA: + lda #0 ; loading _AA ; 2 +_bb: + adc #0 ; adding in _bb ; 2 + sta RESULT+1 ; 3 + ;========== + ; 9 + ; product[2]=_BB+_CC+c + +_BB: + lda #0 ; loading _BB ; 2 +_CC: + adc #0 ; adding in _CC ; 2 + sta RESULT+2 ; 3 + ;=========== + ; 7 + + ; product[3]=_DD+c + +; bcc dd_no_carry1 ; +; inc RESULT+3 ; + clc ; 2 + ;============= + ; 2 +dd_no_carry1: + + ; product[1]=_AA+_bb+_cc + +_cc: + lda #0 ; load _cc ; 2 + adc RESULT+1 ; 3 + sta RESULT+1 ; 3 + + ; product[2]=_BB+_CC+_dd+c + +_dd: + lda #0 ; load _dd ; 2 + adc RESULT+2 ; 3 + sta RESULT+2 ; 3 + + ;=========== + ; 16 + ; product[3]=_DD+c + + +; bcc dd_no_carry2 ; +; inc RESULT+3 ; + + ;============= + ; 0 + +dd_no_carry2: + +; *z_i=product[1]; +; *z_f=product[0]; + +; rts ; 6 + + + ;================= + ; Signed multiply + ;================= + +;multiply: + +; jsr fixed_16x16_mul_unsigned ; 6 + + lda NUM1H ; x_i ; 3 + ;=========== + ; 12 + + + bpl x_positive ;^3/2nt + + sec ; 2 + lda RESULT+2 ; 3 + sbc NUM2L ; 3 + sta RESULT+2 ; 3 +; lda RESULT+3 ; +; sbc NUM2H ; +; sta RESULT+3 ; + ;============ + ; 10 + +x_positive: + + lda NUM2H ; y_i ; 3 + ;============ + ; ; 6 + + bpl y_positive ;^3/2nt + + + sec ; 2 + lda RESULT+2 ; 3 + sbc NUM1L ; 3 + sta RESULT+2 ; 3 +; lda RESULT+3 ; +; sbc NUM1H ; +; sta RESULT+3 ; + ;=========== + ; 10 + +y_positive: + ldx RESULT+2 ; *z_i=product[2]; ; 3 + lda RESULT+1 ; *z_f=product[1]; ; 3 + + rts ; 6 + ;========== + ; 12 + diff --git a/tfv/tfv.s b/tfv/tfv.s index 69b2eecf..23754a5a 100644 --- a/tfv/tfv.s +++ b/tfv/tfv.s @@ -1,4 +1,5 @@ .include "tfv_zp.inc" +.include "hardware.inc" ;================================ ; Clear screen and setup graphics @@ -90,7 +91,7 @@ exit: .include "tfv_worldmap.s" .include "tfv_info.s" -.include "../asm_routines/gr_fast_clear.s" +.include "gr_fast_clear.s" .include "../asm_routines/gr_hlin.s" .include "../asm_routines/pageflip.s" .include "../asm_routines/gr_setpage.s" @@ -100,7 +101,8 @@ exit: .include "../asm_routines/memset.s" .include "../asm_routines/gr_vlin.s" .include "../asm_routines/gr_copy.s" -.include "../asm_routines/gr_unrle.s" +;.include "../asm_routines/gr_unrle.s" +.include "decompress_fast_v2.s" .include "../asm_routines/gr_offsets.s" ;=============================================== @@ -115,4 +117,4 @@ name: .include "tfv_sprites.inc" -.include "tfv_backgrounds.inc" +.include "graphics_map/tfv_backgrounds.inc" diff --git a/tfv/tfv_backgrounds.inc b/tfv/tfv_backgrounds.inc deleted file mode 100644 index 1ec99919..00000000 --- a/tfv/tfv_backgrounds.inc +++ /dev/null @@ -1,419 +0,0 @@ -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, $AB,$00, $80,$80, $A7,$00, $B8, $88, $00,$00 - .byte $0A, $AF,$07, $AB,$00, $88, $BB, $B0, $A5,$00 - .byte $0B, $BB, $88, $A4,$00, $B8, $88, $AE,$00 - .byte $88, $B8, $A7,$00, $88, $FB, $A7,$00, $2B - .byte $A4,$00, $0B, $BB, $88, $AE,$00, $88, $BB - .byte $0B, $A6,$00, $F8, $FF, $F0, $A5,$00, $44 - .byte $22, $A5,$00, $FF, $08, $80, $AD,$00, $88 - .byte $F0, $A7,$00, $7F, $11, $7F, $A4,$70, $11 - .byte $74, $72, $A3,$70, $11, $7F,$7F, $A6,$70, $A9,$00 - .byte $77, $7F, $B0, $A4,$00, $70, $77,$77, $71 - .byte $A5,$77, $71, $A5,$77, $71, $A6,$77, $57, $55 - .byte $A9,$00, $4F,$4F, $A4,$00, $A0,$16,$57, $55, $05, $55 - .byte $A8,$00, $04, $B4, $04,$04, $A3,$00, $55, $05,$05 - .byte $55, $05, $B5, $A4,$05, $D5, $A5,$05, $B5 - .byte $A4,$05, $55, $00,$00, $55, $A9,$00, $8F, $80 - .byte $A4,$00, $55, $00,$00, $55, $00, $08,$08, $00,$00 - .byte $08,$08, $A4,$00, $08,$08, $A4,$00, $55, $00,$00, $55 - .byte $AF,$00, $55, $00,$00, $55, $A0,$11,$00, $55, $00,$00 - .byte $55, $AF,$00, $55, $A0,$14,$00, $55, $A0,$12,$00, $05 - .byte $A0,$14,$00, $05, $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, $A9,$00, $B6,$B6, $E0 - .byte $00, $77, $08, $00, $22,$22, $33, $8D - .byte $08, $A5,$00, $BB, $A6,$00, $55,$55, $A4,$00, $44 - .byte $A8,$00, $0B, $BB,$BB, $EE, $00, $08, $00 - .byte $10, $12, $22, $83, $08, $A6,$00, $08,$08 - .byte $A4,$00, $A3,$08, $A3,$00, $08,$08, $A9,$00, $60, $6B - .byte $0E, $00,$00, $40, $41, $11, $82, $08 - .byte $A0,$19,$00, $78, $A3,$88, $80, $A3,$66, $00, $19 - .byte $99, $44, $11, $88, $A0,$1A,$00, $88, $87 - .byte $78, $A3,$88, $86, $66, $00, $11, $99 - .byte $44, $88, $A0,$1B,$00, $A3,$88, $87, $78, $8B - .byte $86, $88, $80, $11, $99, $88, $A0,$1C,$00 - .byte $A5,$88, $77, $A3,$87, $11, $88, $A0,$1D,$00, $A5,$88 - .byte $77, $A4,$88, $A0,$1F,$00, $08, $A3,$88, $77, $A3,$88 - .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,$55, $A3,$66, $A4,$F6, $AA,$66, $11, $66 - .byte $16,$16, $66, $76, $A8,$66, $55, $22,$22, $25,$25 - .byte $A4,$55, $66,$66, $6F, $A4,$7F, $77, $A9,$66, $69,$69 - .byte $19,$19, $69, $77, $A8,$66, $55, $A5,$22, $25 - .byte $55,$55, $66,$66, $46, $A0,$1C,$66, $55, $A7,$22, $55 - .byte $66, $46, $44, $46, $A8,$66, $A7,$86, $AC,$66 - .byte $55, $A7,$22, $55, $C6, $C4, $84, $C4 - .byte $A3,$C6, $76, $86,$86, $76, $C6, $55, $15 - .byte $A3,$55, $15, $55, $C6, $AA,$56, $C6, $95 - .byte $DD, $A6,$22, $55, $CC,$CC, $C8, $A3,$CC, $77 - .byte $80,$80, $77, $CC,$CC, $55, $11, $51, $15 - .byte $51, $11, $55, $AC,$CC, $55, $DD, $A6,$22 - .byte $55, $A4,$CC, $7C, $77, $80,$80, $77, $FF,$FF - .byte $0C, $55, $51, $A3,$55, $51, $55, $AC,$0C - .byte $55, $DD, $A4,$D2, $22,$22, $55, $A3,$CC, $7C - .byte $77, $08,$08, $78, $F7, $FF, $0F, $A0,$14,$00 - .byte $55, $0D, $DD,$DD, $0D, $A3,$02, $55, $CC,$CC - .byte $7C, $87, $A3,$80, $77, $FF, $0F, $00 - .byte $55, $85, $A0,$14,$00, $99, $A5,$00, $55, $CC - .byte $7C, $07, $A3,$08, $77, $FF,$FF, $00,$00, $55 - .byte $88, $08, $A0,$13,$00, $F9, $30,$30, $F0, $80,$80 - .byte $55, $7C, $87, $A3,$80, $70, $F7, $1F - .byte $FF, $00,$00, $FF,$FF, $00, $80, $A0,$10,$00, $30 - .byte $FF, $F0, $F3,$F3, $FF,$FF, $88, $55, $07 - .byte $A3,$08, $78, $77, $FF, $F1, $FF, $00,$00 - .byte $FF,$FF, $0F, $08, $A0,$10,$00, $0F, $A6,$FF, $88 - .byte $55, $A4,$80, $77, $FF, $1F, $FF, $A3,$00 - .byte $1F,$1F, $A0,$14,$00, $3F,$3F, $0F,$0F, $3F, $38, $55 - .byte $A3,$08, $77, $F7, $FF, $F1, $0F, $A3,$00 - .byte $11,$11, $A0,$1A,$00, $55, $00,$00, $70, $77, $A3,$FF - .byte $A4,$00, $11,$11, $A0,$17,$00, $80, $08, $89, $55 - .byte $88,$88, $77, $FF, $11, $FF, $A5,$00, $A3,$88 - .byte $A0,$16,$00, $08, $88,$88, $55, $00, $77, $F7 - .byte $FF,$FF, $0F, $A0,$21,$00, $55, $70, $77, $A3,$FF - .byte $A0,$22,$00, $55, $77, $A3,$FF, $A0,$23,$00, $55 - .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 $A0,$17,$00, $50, $58, $00,$00, $FF, $A4,$77, $88 - .byte $44,$44, $88, $00, $80,$80, $05,$05, $A0,$18,$00, $5D - .byte $DD, $FF, $A4,$77, $88, $00,$00, $88, $00 - .byte $88, $BB, $B0, $A0,$18,$00, $0B, $BB, $0D - .byte $FF, $A3,$77, $FF, $88, $80,$80, $88, $00 - .byte $88, $4B, $A9,$00, $D0,$D0, $80,$80, $D0,$D0, $AB,$00 - .byte $6B, $00, $0F, $FF, $77,$77, $FF, $A5,$00 - .byte $88, $44, $04, $0B, $A5,$00, $D0, $DD - .byte $A6,$88, $DD, $D0, $A7,$00, $0B, $06, $66 - .byte $00,$00, $FF, $77,$77, $FF, $A6,$00, $22, $A9,$00 - .byte $A6,$0D, $AB,$00, $22, $00,$00, $FF, $77, $FF,$FF - .byte $A6,$00, $82, $80, $A0,$18,$00, $50, $52, $00,$00 - .byte $0F, $F7, $FF, $0F, $A0,$25,$00, $FF,$FF, $A0,$26,$00, $FF - .byte $A1 diff --git a/tfv/tfv_flying.s b/tfv/tfv_flying.s index 44c75aa0..96108807 100644 --- a/tfv/tfv_flying.s +++ b/tfv/tfv_flying.s @@ -1,19 +1,19 @@ ;=========== ; CONSTANTS ;=========== -CONST_SHIPX EQU 15 -CONST_TILE_W EQU 64 -CONST_TILE_H EQU 64 -CONST_MAP_MASK_X EQU (CONST_TILE_W - 1) -CONST_MAP_MASK_Y EQU (CONST_TILE_H - 1) -CONST_LOWRES_W EQU 40 -CONST_LOWRES_H EQU 40 -CONST_BETA_I EQU $ff -CONST_BETA_F EQU $80 -CONST_SCALE_I EQU $14 -CONST_SCALE_F EQU $00 -CONST_LOWRES_HALF_I EQU $ec ; -(LOWRES_W/2) -CONST_LOWRES_HALF_F EQU $00 +CONST_SHIPX = 15 +CONST_TILE_W = 64 +CONST_TILE_H = 64 +CONST_MAP_MASK_X = (CONST_TILE_W - 1) +CONST_MAP_MASK_Y = (CONST_TILE_H - 1) +CONST_LOWRES_W = 40 +CONST_LOWRES_H = 40 +CONST_BETA_I = $ff +CONST_BETA_F = $80 +CONST_SCALE_I = $14 +CONST_SCALE_F = $00 +CONST_LOWRES_HALF_I = $ec ; -(LOWRES_W/2) +CONST_LOWRES_HALF_F = $00 flying_start: @@ -1171,7 +1171,7 @@ water_map: .byte $22,$22,$22,$22, $22,$22,$22,$22 .byte $22,$22,$22,$22, $ee,$22,$22,$22 -.include "../asm_routines/multiply_fast.s" +.include "multiply_fast.s" ; 8.8 fixed point diff --git a/tfv/tfv_info.s b/tfv/tfv_info.s index c30cba5f..005c0994 100644 --- a/tfv/tfv_info.s +++ b/tfv/tfv_info.s @@ -31,16 +31,19 @@ show_map: lda DRAW_PAGE clc - adc #$4 - sta BASH - lda #$00 - sta BASL + adc #$4 ; page to load at? + ; FIXME: really need to load at 0xc and + ; copy + pha - lda #>(map_rle) - sta GBASH - lda #<(map_rle) - sta GBASL - jsr load_rle_gr + lda #<(map_lzsa) + sta getsrc_smc+1 + lda #>(map_lzsa) + sta getsrc_smc+2 + + pla + + jsr decompress_lzsa2_fast ; basic_plot(8+((map_x&0x3)*6)+(tfv_x/6), diff --git a/tfv/tfv_title.s b/tfv/tfv_title.s index 5ea6d020..884580dd 100644 --- a/tfv/tfv_title.s +++ b/tfv/tfv_title.s @@ -5,27 +5,19 @@ title_screen: ;=========================== ; Clear both bottoms - lda #$0 - sta DRAW_PAGE - jsr clear_bottom - - lda #$4 - sta DRAW_PAGE - jsr clear_bottom + jsr clear_bottoms ;============================= - ; Load title_rle + ; Load title + + lda #<(title_lzsa) + sta getsrc_smc+1 + lda #>(title_lzsa) + sta getsrc_smc+2 lda #$0c - sta BASH - lda #$00 - sta BASL ; load image off-screen 0xc00 - lda #>(title_rle) - sta GBASH - lda #<(title_rle) - sta GBASL - jsr load_rle_gr + jsr decompress_lzsa2_fast ;================================= ; copy to both pages diff --git a/tfv/tfv_worldmap.s b/tfv/tfv_worldmap.s index 300d7e96..38ec502e 100644 --- a/tfv/tfv_worldmap.s +++ b/tfv/tfv_worldmap.s @@ -766,11 +766,6 @@ load_map_bg: ; Set target for the background drawing - lda #$0c - sta BASH - lda #$00 - sta BASL ; load image off-screen 0xc00 - ; Check for special cases lda MAP_X @@ -778,33 +773,44 @@ map_harfco: cmp #3 ; if map_x==3, harfco bne map_landing - lda #>(harfco_rle) - sta GBASH - lda #<(harfco_rle) - sta GBASL - jsr load_rle_gr + + lda #<(harfco_lzsa) + sta getsrc_smc+1 + lda #>(harfco_lzsa) + sta getsrc_smc+2 + + lda #$c + + jsr decompress_lzsa2_fast rts map_landing: cmp #5 ; if map_x==5, landing site bne map_collegep - lda #>(landing_rle) - sta GBASH - lda #<(landing_rle) - sta GBASL - jsr load_rle_gr + + lda #<(landing_lzsa) + sta getsrc_smc+1 + lda #>(landing_lzsa) + sta getsrc_smc+2 + + lda #$c + + jsr decompress_lzsa2_fast rts map_collegep: cmp #14 ; if map_x==14, collegep bne map_custom - lda #>(collegep_rle) - sta GBASH - lda #<(collegep_rle) - sta GBASL - jsr load_rle_gr + lda #<(collegep_lzsa) + sta getsrc_smc+1 + lda #>(collegep_lzsa) + sta getsrc_smc+2 + + lda #$c + + jsr decompress_lzsa2_fast rts ;============================ diff --git a/tfv/tfv_zp.inc b/tfv/tfv_zp.inc index 9ae4ab50..b01b6068 100644 --- a/tfv/tfv_zp.inc +++ b/tfv/tfv_zp.inc @@ -1,190 +1,193 @@ -.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 +;; LZSA addresses +NIBCOUNT = $00 + +WNDLFT = $20 +WNDWDTH = $21 +WNDTOP = $22 +WNDBTM = $23 +CH = $24 +CV = $25 +GBASL = $26 +GBASH = $27 +BASL = $28 +BASH = $29 +H2 = $2C +V2 = $2D +MASK = $2E +COLOR = $30 +INVFLG = $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 +COLOR1 = $E0 +COLOR2 = $E1 +MATCH = $E2 +XX = $E3 +YY = $E4 +YADD = $E5 +LOOP = $E6 +MEMPTRL = $E7 +MEMPTRH = $E8 +NAMEL = $E9 +NAMEH = $EA +NAMEX = $EB +CHAR = $EC +DISP_PAGE = $ED +DRAW_PAGE = $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 +FIRST = $F0 +LASTKEY = $F1 +PADDLE_STATUS = $F2 +XPOS = $F3 +YPOS = $F4 +TEMP = $FA +RUN = $FA +TEMP2 = $FB +TEMPY = $FB +INL = $FC +INH = $FD +OUTL = $FE +OUTH = $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 +TURNING = $60 +;SCREEN_X = $61 ; not used? +SCREEN_Y = $62 +ANGLE = $63 +HORIZ_SCALE_I = $64 +HORIZ_SCALE_F = $65 +FACTOR_I = $66 +FACTOR_F = $67 +DX_I = $68 +DX_F = $69 +SPACEX_I = $6A +SPACEX_F = $6B +CX_I = $6C +CX_F = $6D +DY_I = $6E +DY_F = $6F +SPACEY_I = $70 +SPACEY_F = $71 +CY_I = $72 +CY_F = $73 +TEMP_I = $74 +TEMP_F = $75 +DISTANCE_I = $76 +DISTANCE_F = $77 +SPACEZ_I = $78 +SPACEZ_F = $79 +DRAW_SPLASH = $7A +SPEED = $7B +SPLASH_COUNT = $7C +OVER_LAND = $7D +NUM1L = $7E +NUM1H = $7F +NUM2L = $80 +NUM2H = $81 +RESULT = $82 ; 83,84,85 +NEGATE = $86 ; UNUSED? +LAST_SPACEX_I = $87 +LAST_SPACEY_I = $88 +LAST_MAP_COLOR = $89 +DRAW_SKY = $8A +COLOR_MASK = $8B -SHIPY EQU $E4 +SHIPY = $E4 ;; World Map Only -ODD EQU $7B -DIRECTION EQU $7C -REFRESH EQU $7D -ON_BIRD EQU $7E -MOVED EQU $7F -STEPS EQU $80 -TFV_X EQU $81 -TFV_Y EQU $82 -NEWX EQU $83 -NEWY EQU $84 -MAP_X EQU $85 -GROUND_COLOR EQU $86 +ODD = $7B +DIRECTION = $7C +REFRESH = $7D +ON_BIRD = $7E +MOVED = $7F +STEPS = $80 +TFV_X = $81 +TFV_Y = $82 +NEWX = $83 +NEWY = $84 +MAP_X = $85 +GROUND_COLOR = $86 +.if 0 - -KEYPRESS EQU $C000 -KEYRESET EQU $C010 +KEYPRESS = $C000 +KEYRESET = $C010 ;; SOFT SWITCHES -SET_GR EQU $C050 -SET_TEXT EQU $C051 -FULLGR EQU $C052 -TEXTGR EQU $C053 -PAGE0 EQU $C054 -PAGE1 EQU $C055 -LORES EQU $C056 -HIRES EQU $C057 +SET_GR = $C050 +SET_TEXT = $C051 +FULLGR = $C052 +TEXTGR = $C053 +PAGE0 = $C054 +PAGE1 = $C055 +LORES = $C056 +HIRES = $C057 -PADDLE_BUTTON0 EQU $C061 -PADDL0 EQU $C064 -PTRIG EQU $C070 +PADDLE_BUTTON0 = $C061 +PADDL0 = $C064 +PTRIG = $C070 ;; BASIC ROUTINES -NORMAL EQU $F273 +NORMAL = $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 +HLINE = $F819 ;; HLINE Y,$2C at A +VLINE = $F828 ;; VLINE A,$2D at Y +CLRSCR = $F832 ;; Clear low-res screen +CLRTOP = $F836 ;; clear only top of low-res screen +SETCOL = $F864 ;; COLOR=A +TEXT = $FB36 +TABV = $FB5B ;; VTAB to A +BASCALC = $FBC1 ;; +VTAB = $FC22 ;; VTAB to CV +HOME = $FC58 ;; Clear the text screen +WAIT = $FCA8 ;; delay 1/2(26+27A+5A^2) us +SETINV = $FE80 ;; INVERSE +SETNORM = $FE84 ;; NORMAL +COUT = $FDED ;; output A to screen +COUT1 = $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_BLACK = 0 +COLOR_RED = 1 +COLOR_DARKBLUE = 2 +COLOR_PURPLE = 3 +COLOR_DARKGREEN = 4 +COLOR_GREY = 5 +COLOR_MEDIUMBLUE = 6 +COLOR_LIGHTBLUE = 7 +COLOR_BROWN = 8 +COLOR_ORANGE = 9 +COLOR_GREY2 = 10 +COLOR_PINK = 11 +COLOR_LIGHTGREEN = 12 +COLOR_YELLOW = 13 +COLOR_AQUA = 14 +COLOR_WHITE = 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 +COLOR_BOTH_RED = $11 +COLOR_BOTH_DARKBLUE = $22 +COLOR_BOTH_DARKGREEN = $44 +COLOR_BOTH_GREY = $55 +COLOR_BOTH_MEDIUMBLUE = $66 +COLOR_BOTH_LIGHTBLUE = $77 +COLOR_BOTH_BROWN = $88 +COLOR_BOTH_ORANGE = $99 +COLOR_BOTH_LIGHTGREEN = $CC +COLOR_BOTH_YELLOW = $DD +COLOR_BOTH_WHITE = $FF + +.endif