diff --git a/megademo/KATC.BIN.lz4 b/megademo/KATC.BIN.lz4 new file mode 100644 index 00000000..f3a0a191 Binary files /dev/null and b/megademo/KATC.BIN.lz4 differ diff --git a/megademo/Makefile b/megademo/Makefile index e8c925d4..d2dbbde9 100644 --- a/megademo/Makefile +++ b/megademo/Makefile @@ -24,6 +24,7 @@ megademo.o: megademo.s \ gr_hline.s gr_offsets.s vapor_lock.s delay_a.s wait_keypress.s \ c64_opener.s c64.img.lz4 \ falling_apple.s apple_40_96.inc \ + bird_mountain.s \ fireworks.s fw_background.inc fw_state_machine.s fw.s \ hgr.s random16.s move_letters.s ca65 -o megademo.o megademo.s -l megademo.lst diff --git a/megademo/bird_mountain.s b/megademo/bird_mountain.s new file mode 100644 index 00000000..a1ee6bf7 --- /dev/null +++ b/megademo/bird_mountain.s @@ -0,0 +1,487 @@ +; +; Ride the bird past the mountain +; by Vince Weaver +; + + + TREE1X = $E1 + TREE2X = $E2 + +bird_mountain: + + ;=================== + ; init screen + + jsr TEXT + jsr HOME + + ;================== + ; Init vars + + lda #28 + sta TREE1X + lda #37 + sta TREE2X + + ;========================= + ; setup scrolling letters + ;========================= + + lda #letters_bm + sta LETTERH + lda #39 + sta LETTERX + lda #1 + sta LETTERY + lda #15 + sta LETTERD + + ;================= + ; Set draw page + + lda #0 + sta DISP_PAGE + lda #0 + sta DRAW_PAGE + + ;========================== + ; Load the background image + + lda #katahdin + sta LZ4_SRC+1 + + lda #<(katahdin_end-8) ; skip checksum at end + sta LZ4_END + lda #>(katahdin_end-8) ; skip checksum at end + sta LZ4_END+1 + + lda #<$2000 ; Destination is HGR page0 + sta LZ4_DST + lda #>$2000 + sta LZ4_DST+1 + + jsr lz4_decode + + + ;===================================================== + ; attempt vapor lock + ;===================================================== + jsr vapor_lock + + + ;========================== + ; setup text screen + + ; clear top 6 lines to space + + ; takes (Y/2)*(6+435+7)+5 = ? + lda #$A0 ; space ; 2 + ldy #10 ; 6 lines ; 2 + jsr clear_page_loop ; 2693 + +; 1 2 +; 0123456789abcdef0123456789abcdef0123456 +;line1:.asciiz " * . " $400 +;line2:.asciiz " * . . " $480 +;line3:.asciiz " * " $500 +;line4:.asciiz " * " $580 +;line5:.asciiz " . . . " $600 +;line6:.asciiz " . " $680 + + lda #'.'|$80 ; print star ; 2 + sta $420 ; 4 + sta $487 ; 4 + sta $4A4 ; 4 + sta $601 ; 4 + sta $61c ; 4 + sta $621 ; 4 + sta $68d ; 4 + ;============ + ; 30 + ; draw the moon + lda #' ' ; print inv space ; 2 + sta $403 ; 4 + sta $482 ; 4 + sta $502 ; 4 + sta $583 ; 4 + ;============ + ; 18 + + + + ; vapor lock returns with us at beginning of hsync in line + ; 114 (7410 cycles), so with 5070 cycles to go + ; 5070+4550 = 9620 + ; -2745 (draw text) + ; =========== + ; 6875 + + + ; Try X=97 Y=14 cycles=6875 + + ldy #14 ; 2 +bmloopA:ldx #97 ; 2 +bmloopB:dex ; 2 + bne bmloopB ; 2nt/3 + dey ; 2 + bne bmloopA ; 2nt/3 + + jmp bm_display_loop +.align $100 + + ;===================================================== + ;===================================================== + ; Loop forever display loop + ;===================================================== + ;===================================================== +bm_display_loop: + ; each scan line 65 cycles + ; 1 cycle each byte (40cycles) + 25 for horizontal + ;Total of 12480 cycles to draw screen + ;Vertical blank = 4550 cycles (70 scan lines) + ; Total of 17030 cycles to get back to where was + ; Text mode for 6*8=48 scanlines (3120 cycles) + ; hgr for 64 scalines (4160 cycles) + ; gr for 80 scalines (5200 cycles) + ; vblank = 4550 cycles + + ; text + bit SET_TEXT ; 4 + + ;================ + ; clear bottom green + + jsr draw_bottom_green ; 2209+6 + + + ;================ + ; Draw Small Tree + + lda #>small_tree ; 2 + sta INH ; 3 + lda #big_tree ; 2 + sta INH ; 3 + lda #bird_rider_stand_right ; 2 + sta INH ; 3 + lda #bird_rider_walk_right ; 2 + sta INH ; 3 + lda #letters - sta LETTERH - lda #39 - sta LETTERX - lda #22 - sta LETTERY - lda #25 - sta LETTERD + lda #fw_letters + sta LETTERH + lda #39 + sta LETTERX + lda #22 + sta LETTERY + lda #25 + sta LETTERD diff --git a/megademo/fw.s b/megademo/fw.s index 29d3b8c6..01356ba6 100644 --- a/megademo/fw.s +++ b/megademo/fw.s @@ -841,3 +841,43 @@ stars: ; even x so they are purple .byte 216, 21, 164, 40, 124, 18, 60, 12 .byte 240,124, 94,125, 12, 22, 216,116 + +fw_letters: +; .byte 22,28, + .byte " ",128 + .byte 22+128,25," ",128 + + .byte 23,25, " ",128 + .byte 23+128,25," ",128 + + .byte 22,26, "CODE BY",128 + .byte 22+128,26,"CODE BY",128 + + .byte 23,26, "DEATER",128 + .byte 23+128,26,"DEATER",198 + + .byte 22,26, " ",128 + .byte 22+128,26," ",128 + + .byte 23,26, " ",128 + .byte 23+128,26," ",128 + + .byte 22,26, "FIREWORKS",128 + .byte 22+128,26,"FIREWORKS",128 + + .byte 23,26, "FOZZTEXX",128 + .byte 23+128,26,"FOZZTEXX",198 + + .byte 22,26, " ",128 + .byte 22+128,26," ",128 + + .byte 23,26, " ",128 + .byte 23+128,26," ",128 + + .byte 22,26,"A VMW",128 + .byte 22+128,26,"A VMW",128 + + .byte 23,26,"PRODUCTION",128 + .byte 23+128,26,"PRODUCTION" + + .byte 255 diff --git a/megademo/megademo.s b/megademo/megademo.s index 1074cfc6..0227fdc7 100644 --- a/megademo/megademo.s +++ b/megademo/megademo.s @@ -26,6 +26,7 @@ ; Leaving house ; Riding bird + jsr bird_mountain ; Waterfall @@ -63,4 +64,7 @@ loop_forever: .align $100 .include "fireworks.s" .include "hgr.s" + .include "bird_mountain.s" .include "move_letters.s" +.align $100 + .include "gr_putsprite.s" diff --git a/megademo/move_letters.s b/megademo/move_letters.s index 2e6c2e0c..bede455c 100644 --- a/megademo/move_letters.s +++ b/megademo/move_letters.s @@ -181,43 +181,3 @@ waste_28: inc BLARGH ; 5 inc BLARGH ; 5 rts ; 6 - -letters: -; .byte 22,28, - .byte " ",128 - .byte 22+128,25," ",128 - - .byte 23,25, " ",128 - .byte 23+128,25," ",128 - - .byte 22,26, "CODE BY",128 - .byte 22+128,26,"CODE BY",128 - - .byte 23,26, "DEATER",128 - .byte 23+128,26,"DEATER",198 - - .byte 22,26, " ",128 - .byte 22+128,26," ",128 - - .byte 23,26, " ",128 - .byte 23+128,26," ",128 - - .byte 22,26, "FIREWORKS",128 - .byte 22+128,26,"FIREWORKS",128 - - .byte 23,26, "FOZZTEXX",128 - .byte 23+128,26,"FOZZTEXX",198 - - .byte 22,26, " ",128 - .byte 22+128,26," ",128 - - .byte 23,26, " ",128 - .byte 23+128,26," ",128 - - .byte 22,26,"A VMW",128 - .byte 22+128,26,"A VMW",128 - - .byte 23,26,"PRODUCTION",128 - .byte 23+128,26,"PRODUCTION" - - .byte 255 diff --git a/megademo/tfv_sprites.inc b/megademo/tfv_sprites.inc new file mode 100644 index 00000000..dee1657f --- /dev/null +++ b/megademo/tfv_sprites.inc @@ -0,0 +1,47 @@ +bird_rider_stand_right: + .byte $6,$7 + .byte $00,$dd,$bd,$00,$00,$00 + .byte $00,$dd,$db,$00,$dd,$90 + .byte $00,$00,$22,$02,$dd,$00 + .byte $0d,$dd,$d2,$22,$dd,$00 + .byte $00,$00,$0d,$82,$8d,$00 + .byte $00,$00,$00,$99,$00,$00 + .byte $00,$00,$00,$99,$90,$00 + ; 00=22 0X=3 X0=2 XX=15 + ; = 33 + Y*(52)+ [30A + 64B + 69C + 54D]-Y + ; = 33 + 7*52 + 30*22 + 64*3 + 69*2 + 54*15 - 7 + ; = 2190 + +bird_rider_walk_right: + .byte $6,$7 + .byte $00,$dd,$bd,$00,$00,$00 + .byte $00,$dd,$db,$00,$dd,$90 + .byte $00,$00,$22,$02,$dd,$00 + .byte $0d,$dd,$d2,$22,$dd,$00 + .byte $00,$00,$0d,$82,$8d,$00 + .byte $00,$00,$00,$99,$00,$00 + .byte $00,$00,$99,$00,$99,$00 + ; 00=22 0X=3 X0=1 XX=16 + ; = 33 + Y*(52)+ [30A + 64B + 69C + 54D]-Y + ; = 33 + 7*52 + 30*22 + 64*3 + 69*1 + 54*16 - 7 + ; = 2175 + +small_tree: + .byte $3,$3 + .byte $00,$CC,$00 + .byte $CC,$CC,$CC + .byte $00,$88,$00 + ; 00=4 0X=0 X0=0 XX=5 + ; = 33 + Y*(52)+ [30A + 64B + 69C + 54D]-Y + ; = 33 + 3*52 + [30*4 + 54*5]-3 = 576 + +big_tree: + .byte $5,$5 + .byte $00,$00,$CC,$00,$00 + .byte $00,$C0,$CC,$C0,$00 + .byte $00,$CC,$CC,$CC,$00 + .byte $c0,$CC,$CC,$CC,$c0 + .byte $00,$00,$88,$00,$00 + ; 00=12 0X=0 X0=4 XX=9 + ; = 33 + Y*(52)+ [30A + 64B + 69C + 54D]-Y + ; = 33 + 5*52 + 30*12 + 69*4 + 54*9 - 5 = 1410