diff --git a/.gitignore b/.gitignore index dcc1bf5..32b1aee 100644 --- a/.gitignore +++ b/.gitignore @@ -4,5 +4,6 @@ loader/tools/cc1541/cc1541 loader/samples/minexample/*.bak loader/samples/minexample/*.o -loader/samples/minexample/*.zx0 loader/samples/minexample/*.zx0.prg +loader/samples/minexample/*.lz.prg +loader/samples/minexample/*.tmp diff --git a/assets/tileset_c64.png b/assets/tileset_c64.png index 1a3137e..0612bd1 100644 Binary files a/assets/tileset_c64.png and b/assets/tileset_c64.png differ diff --git a/loader/samples/minexample/Makefile b/loader/samples/minexample/Makefile index e147bf6..4356bd0 100644 --- a/loader/samples/minexample/Makefile +++ b/loader/samples/minexample/Makefile @@ -137,10 +137,11 @@ ZX0PRGS = \ field.zx0.prg \ falling_star.zx0.prg \ lilia.zx0.prg \ - lilia_hero.zx0.prg + lilia_hero.zx0.prg \ + sky_scroll.zx0.prg -LZS = \ - tilemap.bin.lz +LZPRGS = \ + sky_scroll_map.lz.prg default: diskimage @@ -153,12 +154,12 @@ tellarch: loader: $(LOADER) $(LOADER): $(LOADERCFG) - make -C $(LOADER_SRC) EXTCONFIGPATH=../samples/$(NAME) PLATFORM=$(_PLATFORM_) INSTALL=1800 RESIDENT=0F00 ZP=02 prg + make -C $(LOADER_SRC) EXTCONFIGPATH=../samples/$(NAME) PLATFORM=$(_PLATFORM_) INSTALL=0a00 RESIDENT=0900 ZP=02 prg assemble: $(ASSEMBLE) -$(ASSEMBLE): $(SOURCE) $(LOADER) $(LOADERCFG) $(ZX0PRGS) $(LZS) +$(ASSEMBLE): $(SOURCE) $(LOADER) $(LOADERCFG) $(MKDIR) $(BUILDDIR) $(MKDIR) $(INTERMDIR) ifeq ($(_PLATFORM_),c64) @@ -172,14 +173,13 @@ endif diskimage: $(DISKIMAGE) -$(DISKIMAGE): $(ASSEMBLE) $(CC1541) +$(DISKIMAGE): $(ASSEMBLE) $(CC1541) $(ZX0PRGS) $(LZPRGS) $(RM) $@ - $(CC1541) -n "ys2 intro" -i otomata \ - -f "ys2" -w $< \ + $(CC1541) -n "otomata labs" -i " 2025" \ + -f "ys2intro" -w $< \ -f "sid" -w use_this_sid.bin \ -f "badguy" -w badguy.zx0.prg \ -f "font" -w font.bin \ - -f "scrmap" -w tilemap.bin.lz \ -f "intrbmp" -w title_320-prepared.zx0.prg \ -f "tower" -w tower.zx0.prg \ -f "towerbm" -w tower_beam.zx0.prg \ @@ -187,6 +187,8 @@ $(DISKIMAGE): $(ASSEMBLE) $(CC1541) -f "fallstar" -w falling_star.zx0.prg \ -f "lilia" -w lilia.zx0.prg \ -f "lilhero" -w lilia_hero.zx0.prg \ + -f "skyscr" -w sky_scroll.zx0.prg \ + -f "skyscrmap" -w sky_scroll_map.lz.prg \ $@ @@ -211,15 +213,17 @@ $(ZX02): make -C $(ZX02_SRC) build/zx02 %.zx0.prg: %.bin $(ZX02) - $(ZX02) $< $<.zx0 - $(PRINTF) "\x00\x80" | cat - $<.zx0 > $@ - $(RM) $<.zx0 + $(ZX02) $< $@.tmp + $(PRINTF) "\x00\x80" | cat - $@.tmp > $@ + $(RM) $@.tmp -%.lz: % - $(PYTHON) aart_lz.py $< $@ +%.lz.prg: %.bin + $(PYTHON) aart_lz.py $< $@.tmp + $(PRINTF) "\x00\x90" | cat - $@.tmp > $@ + $(RM) $@.tmp clean: - -$(RM) $(ZX0PRGS) $(LZS) + -$(RM) $(ZX0PRGS) $(LZPRGS) -$(RM) *.o $(ASSEMBLE) $(DISKIMAGE) -$(RM) -rf $(INTERMDIR) -$(RM) $(BUILDDIR)/loader-c64.prg diff --git a/loader/samples/minexample/minexample.s b/loader/samples/minexample/minexample.s index f0369ad..1296114 100644 --- a/loader/samples/minexample/minexample.s +++ b/loader/samples/minexample/minexample.s @@ -43,10 +43,6 @@ copy_start: sei lda #$35 sta $01 - lda #>(code_end-CODE_START_ADDR) - sta $ff - lda #<(code_end-CODE_START_ADDR) - sta $fe lda #code_start sta $fb -@copy_loop: ldy #0 + ldx #>(code_end-CODE_START_ADDR) + beq :+++ +: lda ($fa), y sta ($fc), y - inc $fc - bne :+ - inc $fd -: - inc $fa - bne :+ + iny + bne :- inc $fb + inc $fd + dex + bne :- + beq :+ : - lda $fe - bne :+ - dec $ff + lda ($fa), y + sta ($fc), y + iny : - dec $fe - lda $fe - ora $ff - bne @copy_loop + cpy #<(code_end-CODE_START_ADDR) + bne :-- lda #$36 sta $01 @@ -86,7 +82,7 @@ copy_start: sei lda #$35 sta $01 - jmp CODE_START_ADDR + jmp part_9 .res loadraw - * .incbin "../../build/loader-c64.prg", 2 @@ -137,16 +133,7 @@ code_start: ldx #badguy - jsr loadraw - - lda #0 - sta ZX0_src - lda #$80 - sta ZX0_src+1 - lda #0 - sta ZX0_dst - lda #$20 - jsr zx02 + jsr load_8000_zx02_2000 lda #127 sta $dc0d @@ -189,16 +176,8 @@ code_start: sei ldx #introname - jsr loadraw - - lda #0 - sta ZX0_src - lda #$80 - sta ZX0_src+1 - lda #0 - sta ZX0_dst lda #$10 - jsr zx02 + jsr load_8000_zx02 ldx #sidname @@ -232,14 +211,8 @@ code_start: lda #1 sta timer_mode - lda #0 - sta ZX0_src - lda #$80 - sta ZX0_src+1 - lda #0 - sta ZX0_dst lda #$20 - jsr zx02 + jsr zx02_8000 : lda timer_reached @@ -285,15 +258,7 @@ code_start: ldx #towerbeamname - jsr loadraw - lda #0 - sta ZX0_src - lda #$80 - sta ZX0_src+1 - lda #0 - sta ZX0_dst - lda #$20 - jsr zx02 + jsr load_8000_zx02_2000 : lda timer_reached @@ -356,15 +321,7 @@ code_start: ldx #fieldname - jsr loadraw - lda #0 - sta ZX0_src - lda #$80 - sta ZX0_src+1 - lda #0 - sta ZX0_dst - lda #$20 - jsr zx02 + jsr load_8000_zx02_2000 : lda timer_reached @@ -441,15 +398,7 @@ code_start: ldx #fallingstarname - jsr loadraw - lda #0 - sta ZX0_src - lda #$80 - sta ZX0_src+1 - lda #0 - sta ZX0_dst - lda #$20 - jsr zx02 + jsr load_8000_zx02_2000 : lda timer_reached @@ -492,15 +441,7 @@ code_start: ldx #lilianame - jsr loadraw - lda #0 - sta ZX0_src - lda #$80 - sta ZX0_src+1 - lda #0 - sta ZX0_dst - lda #$20 - jsr zx02 + jsr load_8000_zx02_2000 : lda timer_reached @@ -547,15 +488,7 @@ code_start: ldx #liliaheroname - jsr loadraw - lda #0 - sta ZX0_src - lda #$80 - sta ZX0_src+1 - lda #0 - sta ZX0_dst - lda #$20 - jsr zx02 + jsr load_8000_zx02_2000 : lda timer_reached @@ -571,9 +504,110 @@ code_start: lda timer_reached beq :- +part_9: jsr init_bmp + + ldx #skyscrname + lda #$70 + jsr load_8000_zx02 + ldx #skyscrmapname + jsr loadraw + ldx #0 + ldy #$90 + jsr LZ_init_decomp + + ; $0c00-$0fff buffer 0 tilemap + ; $2000-$3fff buffer 0 bitmap + ; $4000-$5fff buffer 1 bitmap + ; $6000-$63ff buffer 1 tilemap + ; $6400-$67ff next buffer CRAM + ; $7000-$77ff tileset bitmap + ; $7800-$78ff tileset tile colors + ; $7900-$79ff tileset CRAM colors + ; $9000- compressed tilemap + + lda #$38 + sta $d018 + lda #<((17+4)*40+$c08) + sta text_ptr + lda #>((17+4)*40+$c08) + sta text_ptr+1 + ldx #16 +: + lda #0 + lda text_ptr + sec + sbc #40 + sta text_ptr + sta scr_ptr + sta cram_ptr + sta bmp_ptr + lda text_ptr+1 + sbc #0 + sta text_ptr+1 + sta scr_ptr+1 + ; carry is always set here + adc #$d8-$0c-1 + sta cram_ptr+1 + adc #<(($20>>3)-$d8) + asl bmp_ptr + rol a + asl bmp_ptr + rol a + asl bmp_ptr + rol a + sta bmp_ptr+1 + stx temp+1 + jsr drawrow + ldx temp+1 + dex + bpl :- + +: + stx $d020 + inx + jmp :- jmp * +drawrow: + ldy #0 +charloop: + sty temp + lda #$70>>3 + sta bmp_addr+1 + jsr LZ_get_byte + tax + asl a + rol bmp_addr+1 + asl a + rol bmp_addr+1 + asl a + rol bmp_addr+1 + sta bmp_addr + ldy #0 + .repeat 8, I + lda (bmp_addr),y + sta (bmp_ptr),y + iny + .endrepeat + clc + lda bmp_ptr + adc #8 + sta bmp_ptr + bne :+ + inc bmp_ptr+1 +: + ldy temp + lda $7800,x + sta (scr_ptr),y + lda $7900,x + sta (cram_ptr),y + iny + cpy #24 + bne charloop + rts intro: lda #0 @@ -1116,6 +1150,8 @@ fieldname: .byte "field", 0 fallingstarname: .byte "fallstar", 0 lilianame: .byte "lilia", 0 liliaheroname: .byte "lilhero", 0 +skyscrname: .byte "skyscr", 0 +skyscrmapname: .byte "skyscrmap", 0 darmtower_txt: @@ -1256,6 +1292,24 @@ run_nufli_bmp: .include "zx02.asm" .include "thcmod_lz.asm" +zx02_8000: + pha + jmp :+ + +load_8000_zx02_2000: + lda #$20 +load_8000_zx02: + pha + jsr loadraw +: + lda #0 + sta ZX0_src + sta ZX0_dst + lda #$80 + sta ZX0_src+1 + pla + jmp zx02 + story_writ: .res 11, ' ' .byte "story written by" diff --git a/loader/samples/minexample/sky_scroll.bin b/loader/samples/minexample/sky_scroll.bin new file mode 100644 index 0000000..3594c01 Binary files /dev/null and b/loader/samples/minexample/sky_scroll.bin differ diff --git a/loader/samples/minexample/sky_scroll_map.bin b/loader/samples/minexample/sky_scroll_map.bin new file mode 100644 index 0000000..97d15f7 Binary files /dev/null and b/loader/samples/minexample/sky_scroll_map.bin differ diff --git a/loader/samples/minexample/tilemap.bin b/loader/samples/minexample/tilemap.bin deleted file mode 100644 index b713b02..0000000 Binary files a/loader/samples/minexample/tilemap.bin and /dev/null differ diff --git a/loader/samples/minexample/tilemap.bin.lz b/loader/samples/minexample/tilemap.bin.lz deleted file mode 100644 index 3c26051..0000000 Binary files a/loader/samples/minexample/tilemap.bin.lz and /dev/null differ