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/*.o
loader/samples/minexample/*.zx0
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 \
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

View file

@ -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_ADDR
sta $fc
@ -58,26 +54,26 @@ copy_start:
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
ldy #>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
ldy #>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
ldy #>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
ldy #>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
ldy #>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
ldy #>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
ldy #>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
ldy #>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
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 *
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"

Binary file not shown.

Binary file not shown.