WIP sky scroller

This commit is contained in:
Natt Akuma 2025-11-23 00:09:53 +07:00
parent 1e67d3f98b
commit eda94e147b
8 changed files with 165 additions and 106 deletions

3
.gitignore vendored
View file

@ -4,5 +4,6 @@ loader/tools/cc1541/cc1541
loader/samples/minexample/*.bak loader/samples/minexample/*.bak
loader/samples/minexample/*.o loader/samples/minexample/*.o
loader/samples/minexample/*.zx0
loader/samples/minexample/*.zx0.prg loader/samples/minexample/*.zx0.prg
loader/samples/minexample/*.lz.prg
loader/samples/minexample/*.tmp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

View file

@ -137,10 +137,11 @@ ZX0PRGS = \
field.zx0.prg \ field.zx0.prg \
falling_star.zx0.prg \ falling_star.zx0.prg \
lilia.zx0.prg \ lilia.zx0.prg \
lilia_hero.zx0.prg lilia_hero.zx0.prg \
sky_scroll.zx0.prg
LZS = \ LZPRGS = \
tilemap.bin.lz sky_scroll_map.lz.prg
default: diskimage default: diskimage
@ -153,12 +154,12 @@ tellarch:
loader: $(LOADER) loader: $(LOADER)
$(LOADER): $(LOADERCFG) $(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: $(ASSEMBLE)
$(ASSEMBLE): $(SOURCE) $(LOADER) $(LOADERCFG) $(ZX0PRGS) $(LZS) $(ASSEMBLE): $(SOURCE) $(LOADER) $(LOADERCFG)
$(MKDIR) $(BUILDDIR) $(MKDIR) $(BUILDDIR)
$(MKDIR) $(INTERMDIR) $(MKDIR) $(INTERMDIR)
ifeq ($(_PLATFORM_),c64) ifeq ($(_PLATFORM_),c64)
@ -172,14 +173,13 @@ endif
diskimage: $(DISKIMAGE) diskimage: $(DISKIMAGE)
$(DISKIMAGE): $(ASSEMBLE) $(CC1541) $(DISKIMAGE): $(ASSEMBLE) $(CC1541) $(ZX0PRGS) $(LZPRGS)
$(RM) $@ $(RM) $@
$(CC1541) -n "ys2 intro" -i otomata \ $(CC1541) -n "otomata labs" -i " 2025" \
-f "ys2" -w $< \ -f "ys2intro" -w $< \
-f "sid" -w use_this_sid.bin \ -f "sid" -w use_this_sid.bin \
-f "badguy" -w badguy.zx0.prg \ -f "badguy" -w badguy.zx0.prg \
-f "font" -w font.bin \ -f "font" -w font.bin \
-f "scrmap" -w tilemap.bin.lz \
-f "intrbmp" -w title_320-prepared.zx0.prg \ -f "intrbmp" -w title_320-prepared.zx0.prg \
-f "tower" -w tower.zx0.prg \ -f "tower" -w tower.zx0.prg \
-f "towerbm" -w tower_beam.zx0.prg \ -f "towerbm" -w tower_beam.zx0.prg \
@ -187,6 +187,8 @@ $(DISKIMAGE): $(ASSEMBLE) $(CC1541)
-f "fallstar" -w falling_star.zx0.prg \ -f "fallstar" -w falling_star.zx0.prg \
-f "lilia" -w lilia.zx0.prg \ -f "lilia" -w lilia.zx0.prg \
-f "lilhero" -w lilia_hero.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 make -C $(ZX02_SRC) build/zx02
%.zx0.prg: %.bin $(ZX02) %.zx0.prg: %.bin $(ZX02)
$(ZX02) $< $<.zx0 $(ZX02) $< $@.tmp
$(PRINTF) "\x00\x80" | cat - $<.zx0 > $@ $(PRINTF) "\x00\x80" | cat - $@.tmp > $@
$(RM) $<.zx0 $(RM) $@.tmp
%.lz: % %.lz.prg: %.bin
$(PYTHON) aart_lz.py $< $@ $(PYTHON) aart_lz.py $< $@.tmp
$(PRINTF) "\x00\x90" | cat - $@.tmp > $@
$(RM) $@.tmp
clean: clean:
-$(RM) $(ZX0PRGS) $(LZS) -$(RM) $(ZX0PRGS) $(LZPRGS)
-$(RM) *.o $(ASSEMBLE) $(DISKIMAGE) -$(RM) *.o $(ASSEMBLE) $(DISKIMAGE)
-$(RM) -rf $(INTERMDIR) -$(RM) -rf $(INTERMDIR)
-$(RM) $(BUILDDIR)/loader-c64.prg -$(RM) $(BUILDDIR)/loader-c64.prg

View file

@ -43,10 +43,6 @@ copy_start:
sei sei
lda #$35 lda #$35
sta $01 sta $01
lda #>(code_end-CODE_START_ADDR)
sta $ff
lda #<(code_end-CODE_START_ADDR)
sta $fe
lda #<CODE_START_ADDR lda #<CODE_START_ADDR
sta $fc sta $fc
@ -58,26 +54,26 @@ copy_start:
lda #>code_start lda #>code_start
sta $fb sta $fb
@copy_loop:
ldy #0 ldy #0
ldx #>(code_end-CODE_START_ADDR)
beq :+++
:
lda ($fa), y lda ($fa), y
sta ($fc), y sta ($fc), y
inc $fc iny
bne :+ bne :-
inc $fd
:
inc $fa
bne :+
inc $fb inc $fb
inc $fd
dex
bne :-
beq :+
: :
lda $fe lda ($fa), y
bne :+ sta ($fc), y
dec $ff iny
: :
dec $fe cpy #<(code_end-CODE_START_ADDR)
lda $fe bne :--
ora $ff
bne @copy_loop
lda #$36 lda #$36
sta $01 sta $01
@ -86,7 +82,7 @@ copy_start:
sei sei
lda #$35 lda #$35
sta $01 sta $01
jmp CODE_START_ADDR jmp part_9
.res loadraw - * .res loadraw - *
.incbin "../../build/loader-c64.prg", 2 .incbin "../../build/loader-c64.prg", 2
@ -137,16 +133,7 @@ code_start:
ldx #<badguy ldx #<badguy
ldy #>badguy ldy #>badguy
jsr loadraw jsr load_8000_zx02_2000
lda #0
sta ZX0_src
lda #$80
sta ZX0_src+1
lda #0
sta ZX0_dst
lda #$20
jsr zx02
lda #127 lda #127
sta $dc0d sta $dc0d
@ -189,16 +176,8 @@ code_start:
sei sei
ldx #<introname ldx #<introname
ldy #>introname ldy #>introname
jsr loadraw
lda #0
sta ZX0_src
lda #$80
sta ZX0_src+1
lda #0
sta ZX0_dst
lda #$10 lda #$10
jsr zx02 jsr load_8000_zx02
ldx #<sidname ldx #<sidname
ldy #>sidname ldy #>sidname
@ -232,14 +211,8 @@ code_start:
lda #1 lda #1
sta timer_mode sta timer_mode
lda #0
sta ZX0_src
lda #$80
sta ZX0_src+1
lda #0
sta ZX0_dst
lda #$20 lda #$20
jsr zx02 jsr zx02_8000
: :
lda timer_reached lda timer_reached
@ -285,15 +258,7 @@ code_start:
ldx #<towerbeamname ldx #<towerbeamname
ldy #>towerbeamname ldy #>towerbeamname
jsr loadraw jsr load_8000_zx02_2000
lda #0
sta ZX0_src
lda #$80
sta ZX0_src+1
lda #0
sta ZX0_dst
lda #$20
jsr zx02
: :
lda timer_reached lda timer_reached
@ -356,15 +321,7 @@ code_start:
ldx #<fieldname ldx #<fieldname
ldy #>fieldname ldy #>fieldname
jsr loadraw jsr load_8000_zx02_2000
lda #0
sta ZX0_src
lda #$80
sta ZX0_src+1
lda #0
sta ZX0_dst
lda #$20
jsr zx02
: :
lda timer_reached lda timer_reached
@ -441,15 +398,7 @@ code_start:
ldx #<fallingstarname ldx #<fallingstarname
ldy #>fallingstarname ldy #>fallingstarname
jsr loadraw jsr load_8000_zx02_2000
lda #0
sta ZX0_src
lda #$80
sta ZX0_src+1
lda #0
sta ZX0_dst
lda #$20
jsr zx02
: :
lda timer_reached lda timer_reached
@ -492,15 +441,7 @@ code_start:
ldx #<lilianame ldx #<lilianame
ldy #>lilianame ldy #>lilianame
jsr loadraw jsr load_8000_zx02_2000
lda #0
sta ZX0_src
lda #$80
sta ZX0_src+1
lda #0
sta ZX0_dst
lda #$20
jsr zx02
: :
lda timer_reached lda timer_reached
@ -547,15 +488,7 @@ code_start:
ldx #<liliaheroname ldx #<liliaheroname
ldy #>liliaheroname ldy #>liliaheroname
jsr loadraw jsr load_8000_zx02_2000
lda #0
sta ZX0_src
lda #$80
sta ZX0_src+1
lda #0
sta ZX0_dst
lda #$20
jsr zx02
: :
lda timer_reached lda timer_reached
@ -571,9 +504,110 @@ code_start:
lda timer_reached lda timer_reached
beq :- beq :-
part_9:
jsr init_bmp jsr init_bmp
ldx #<skyscrname
ldy #>skyscrname
lda #$70
jsr load_8000_zx02
ldx #<skyscrmapname
ldy #>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 * 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: intro:
lda #0 lda #0
@ -1116,6 +1150,8 @@ fieldname: .byte "field", 0
fallingstarname: .byte "fallstar", 0 fallingstarname: .byte "fallstar", 0
lilianame: .byte "lilia", 0 lilianame: .byte "lilia", 0
liliaheroname: .byte "lilhero", 0 liliaheroname: .byte "lilhero", 0
skyscrname: .byte "skyscr", 0
skyscrmapname: .byte "skyscrmap", 0
darmtower_txt: darmtower_txt:
@ -1256,6 +1292,24 @@ run_nufli_bmp:
.include "zx02.asm" .include "zx02.asm"
.include "thcmod_lz.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: story_writ:
.res 11, ' ' .res 11, ' '
.byte "story written by" .byte "story written by"

Binary file not shown.

Binary file not shown.