From 5b6ee9764409f08bce81de1383ee38dc4df8e5e8 Mon Sep 17 00:00:00 2001 From: AArt1256 Date: Mon, 17 Nov 2025 00:03:39 +0300 Subject: [PATCH] tower --- loader/samples/minexample/Makefile | 1 + loader/samples/minexample/conv_zx0.sh | 5 +- loader/samples/minexample/minexample.s | 366 +++++++++++++++++++++--- loader/samples/minexample/tower.bin | Bin 0 -> 30010 bytes loader/samples/minexample/tower.zx0 | Bin 0 -> 8048 bytes loader/samples/minexample/tower.zx0.prg | Bin 0 -> 8050 bytes 6 files changed, 326 insertions(+), 46 deletions(-) create mode 100644 loader/samples/minexample/tower.bin create mode 100644 loader/samples/minexample/tower.zx0 create mode 100644 loader/samples/minexample/tower.zx0.prg diff --git a/loader/samples/minexample/Makefile b/loader/samples/minexample/Makefile index de75bd8..09c063b 100644 --- a/loader/samples/minexample/Makefile +++ b/loader/samples/minexample/Makefile @@ -167,6 +167,7 @@ $(DISKIMAGE): $(ASSEMBLE) $(CC1541) -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 \ $@ diff --git a/loader/samples/minexample/conv_zx0.sh b/loader/samples/minexample/conv_zx0.sh index 9f45280..f419899 100644 --- a/loader/samples/minexample/conv_zx0.sh +++ b/loader/samples/minexample/conv_zx0.sh @@ -4,4 +4,7 @@ cat badguy.zx0 >> badguy.zx0.prg python3 aart_lz.py tilemap.bin tilemap.bin.lz zx02/zx02 title_320-prepared.bin title_320-prepared.zx0 printf "\x00\x80" > title_320-prepared.zx0.prg -cat title_320-prepared.zx0 >> title_320-prepared.zx0.prg \ No newline at end of file +cat title_320-prepared.zx0 >> title_320-prepared.zx0.prg +zx02/zx02 tower.bin tower.zx0 +printf "\x00\x80" > tower.zx0.prg +cat tower.zx0 >> tower.zx0.prg \ No newline at end of file diff --git a/loader/samples/minexample/minexample.s b/loader/samples/minexample/minexample.s index f27b3d1..710e064 100644 --- a/loader/samples/minexample/minexample.s +++ b/loader/samples/minexample/minexample.s @@ -16,6 +16,10 @@ cur_frame: .res 1 frame_delay: .res 1 frame_until: .res 1 text_ptr: .res 2 +timer: .res 2 +timer_limit: .res 2 +timer_reached: .res 2 +timer_mode: .res 1 aart_lz_buffer := $fd00 .include "lz_zp.asm" @@ -83,39 +87,6 @@ copy_start: sta $01 jmp CODE_START_ADDR -run_nufli_bmp: - lda #$01 - sta $81 - lda #$29 - sta $80 - lda #0 - sta $d01a - jsr $a000 - cli - jsr $3000 -@loop: - bit $d011 - bpl @loop - jsr $a003 -@loop2: - bit $d011 - bmi @loop2 - lda #0 - sta $d020 - sta $d021 - jsr $a003 - lda $80 - bne :+ - dec $81 -: - dec $80 - lda $81 - cmp #$ff - beq :+ - jmp @loop -: - rts - .res loadraw - * .incbin "../../build/loader-c64.prg", 2 @@ -138,8 +109,12 @@ code_start: : lda $8000, x sta $d800, x + eor #$ff + sta $c00, x lda $8100, x sta $d900, x + eor #$ff + sta $d00, x inx bne :- @@ -205,6 +180,7 @@ code_start: ;sta frame_delay ;jsr wait_loop +/* lda #0 jsr sfx_init @@ -269,6 +245,7 @@ code_start: lda #120 sta frame_delay jsr wait_loop +*/ lda #$0b sta $d011 @@ -291,6 +268,10 @@ code_start: ldy #>sidname jsr loadraw + ldx #towername + jsr loadraw + lda #fake_kernal_irq @@ -302,8 +283,114 @@ code_start: jsr run_nufli_bmp sei jsr init_2x + lda #$0b + sta $d011 + ;ldx #3 +;: + ;jsr wait_frame + ;dex + ;bpl :- + jsr clr_txt + ldx #story_writ + jsr write_txt3 + ldx #$30 + ldy #$01 + jsr init_timer + 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 + +: + lda timer_reached + beq :- + + ldx #$b8 + ldy #$01 + jsr init_timer + lda #2 + sta timer_mode +: + lda timer_reached + beq :- + + jsr init_bmp + + lda #0 + sta vbl + + lda #$11 + sta frame_until + jsr wait_frame_until_2x + + ldx #$6c +: + jsr wait_frame + jsr wait_frame + dex + bpl :- + + lda #$0b + sta $d011 jmp * + +wait_frame: +@loop: + bit $d011 + bpl @loop +@loop2: + bit $d011 + bmi @loop2 + rts + +story_writ: +.res 11, ' ' +.byte "story written by" +.res 40-(16+11), ' ' +.res 11, ' ' +.res 5, ' ' +.byte "takahiro ohura" +.res 40-(14+11+5), ' ' +.res 11, ' ' +.res 5, ' ' +.byte "tomoo yamane" +.res 40-(12+11+5), ' ' + + +clr_txt: + lda #$80 + ldx #0 +: + .repeat 4, I + sta $400+(I*250), x + .endrepeat + inx + cpx #250 + bne :- + lda #0 + ldx #0 +: + .repeat 4, I + sta $d800+(I*250), x + .endrepeat + inx + cpx #250 + bne :- + lda #$13 + sta $d018 + lda #$1b + sta $d011 + rts + init_2x: lda #127 sta $dc0d @@ -351,6 +438,21 @@ init_2x: cli rts +init_timer: + lda #0 + sta timer_reached + sta timer_mode + sta timer + sta timer+1 + stx timer_limit + sty timer_limit+1 + rts + +fade_cols: + .byte 0, 0 + .byte $0, $0, $0, $0, $b, $c, $f, $1 + .res 32-10, $1 + irq_music: pha txa @@ -358,9 +460,63 @@ irq_music: tya pha - inc $d020 + lda $dd00 + and #3 + sta @dd00_arc+1 + lda #3 + sta $dd00 + + inc vbl + + ;inc $d020 jsr $a003 - dec $d020 + ;dec $d020 + + lda timer_mode + cmp #1 + bne :+ + lda timer+1 + bne :+ + lda timer + lsr + lsr + lsr + tax + lda fade_cols, x + sta $d021 +: + lda timer_mode + cmp #2 + bne :+ + lda timer+1 + bne :+ + lda timer + lsr + lsr + lsr + eor #31 + tax + lda fade_cols, x + sta $d021 +: + + inc timer + bne :+ + inc timer+1 +: + lda timer + cmp timer_limit + bne :+ + lda timer+1 + cmp timer_limit+1 + bne :+ + lda #1 + sta timer_reached +: + +@dd00_arc: + lda #0 + sta $dd00 pla tay @@ -385,9 +541,9 @@ fake_kernal_irq: jmp ($0314) ; fuck you wait_loop: -loop2: +@loop2: lda vbl - beq loop2 + beq @loop2 lda #0 sta vbl @@ -397,14 +553,14 @@ loop2: dec frame_delay lda frame_delay beq :+ - jmp loop2 + jmp @loop2 : rts wait_frame_until: -loop: +@loop: lda vbl - beq loop + beq @loop lda #0 sta vbl @@ -424,12 +580,51 @@ loop: cmp frame_until beq :+ - jmp loop + jmp @loop : rts + +wait_loop_2x: +@loop: + lda vbl + cmp #2 + bcc @loop + + lda #0 + sta vbl + + dec frame_delay + lda frame_delay + beq :+ + jmp @loop +: + rts + +wait_frame_until_2x: +@loop: + lda vbl + cmp #2 + bcc @loop + + lda #0 + sta vbl + + dec bmp_delay + bpl :+ + jsr update_bmp +: + + lda cur_frame + cmp frame_until + beq :+ + jmp @loop +: + rts + + init_bmp: - lda #$3b + lda #$0b sta $d011 lda #$19 sta $d018 @@ -467,6 +662,9 @@ init_bmp: inx cpx #250 bne :- + + lda #$3b + sta $d011 rts inc_bmp_addr: @@ -647,6 +845,7 @@ badguy: .byte "badguy",0 fontname: .byte "font",0 sidname: .byte "sid", 0 introname: .byte "intrbmp", 0 +towername: .byte "tower", 0 darmtower_txt: .res (40-26)/2, ' ' @@ -663,6 +862,48 @@ too_bad_txt: .byte "too bad..." .res (40-10)/2, ' ' +write_txt3: + stx text_ptr + sty text_ptr+1 + + ldx #0 + ldy #0 +: + lda (text_ptr), y + sec + sbc #$20 + ora #$80 + sta $400+10*40, x + iny + inx + cpx #40 + bne :- + + ldx #0 +: + lda (text_ptr), y + sec + sbc #$20 + ora #$80 + sta $400+12*40, x + iny + inx + cpx #40 + bne :- + + ldx #0 +: + lda (text_ptr), y + sec + sbc #$20 + ora #$80 + sta $400+14*40, x + iny + inx + cpx #40 + bne :- + rts + upload_text: lda #$34 sta $01 @@ -690,9 +931,40 @@ upload_text: bne :- rts -.include "sfx.asm" -.include "zx02.asm" -.include "thcmod_lz.asm" + +run_nufli_bmp: + lda #$01 + sta $81 + lda #$29 + sta $80 + lda #0 + sta $d01a + jsr $a000 + cli + jsr $3000 +@loop: + bit $d011 + bpl @loop + jsr $a003 +@loop2: + bit $d011 + bmi @loop2 + lda #0 + sta $d020 + sta $d021 + jsr $a003 + lda $80 + bne :+ + dec $81 +: + dec $80 + lda $81 + cmp #$ff + beq :+ + jmp @loop +: + rts + .res $ea31-*, $ff ;asl $d019 @@ -712,4 +984,8 @@ upload_text: pla rti +.include "sfx.asm" +.include "zx02.asm" +.include "thcmod_lz.asm" + code_end: diff --git a/loader/samples/minexample/tower.bin b/loader/samples/minexample/tower.bin new file mode 100644 index 0000000000000000000000000000000000000000..5f427796ab68b037f2389c1fc25a1a87b71d31b4 GIT binary patch literal 30010 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 ArT_o{ literal 0 HcmV?d00001 diff --git a/loader/samples/minexample/tower.zx0.prg b/loader/samples/minexample/tower.zx0.prg new file mode 100644 index 0000000000000000000000000000000000000000..299e488a19e41f1630422be3f8fa5b4f363ca353 GIT binary patch literal 8050 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 CuzDr{ literal 0 HcmV?d00001