diff --git a/xmas_2018/Makefile b/xmas_2018/Makefile index 6d897089..b16914d3 100644 --- a/xmas_2018/Makefile +++ b/xmas_2018/Makefile @@ -22,8 +22,8 @@ xmas2018.o: xmas2018.s \ zp.inc hardware.inc \ vapor_lock.s delay_a.s wait_keypress.s \ mockingboard.s \ - wreath.img.lz4 \ - wreath.s + wreath.s wreath.img.lz4 \ + ball.s ball.img.lz4 ca65 -o xmas2018.o xmas2018.s -l xmas2018.lst diff --git a/xmas_2018/ball.s b/xmas_2018/ball.s new file mode 100644 index 00000000..85fd8c6e --- /dev/null +++ b/xmas_2018/ball.s @@ -0,0 +1,168 @@ +;===================================== +; XMAS2018 -- Ball Part +;===================================== + + +ball: + + ;=================== + ; init screen + + ;=================== + ; init vars + lda #15 + sta XPOS + lda #38 + sta YPOS + + lda #0 + sta FRAME + sta FRAMEH + + ;============================= + ; Load graphic hgr + + lda #ball_hgr + sta LZ4_SRC+1 + + lda #<(ball_hgr_end-8) ; skip checksum at end + sta LZ4_END + lda #>(ball_hgr_end-8) ; skip checksum at end + sta LZ4_END+1 + + lda #<$2000 + sta LZ4_DST + lda #>$2000 + sta LZ4_DST+1 + + jsr lz4_decode + + ;============================== + ; setup graphics for vapor lock + ;============================== + + jsr vapor_lock ; 6 + + ; vapor lock returns with us at beginning of hsync in line + ; 114 (7410 cycles), so with 5070 lines to go + + ; so we have 5070 + 4550 = 9620 to kill + + ; FIXME: clear page0/page1 screens + +; jsr gr_copy_to_current ; 6+ 9292 + + ; now we have 322 left + + ; GR part +; bit HIRES ; 4 + bit SET_GR ; 4 + bit FULLGR ; 4 + + ; 9620 + ; -8 mode set + ; - 3 for jmp + ;======= + ; 9609 + + ; Try X=239 Y=8 cycles=9609 + + ldy #8 ; 2 +baloopA:ldx #239 ; 2 +baloopB:dex ; 2 + bne baloopB ; 2nt/3 + dey ; 2 + bne baloopA ; 2nt/3 + + jmp ball_begin_loop +.align $100 + + + ;================================================ + ; Ball 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 + +ball_begin_loop: + +ball_display_loop: + + ; (40*65)-4 = 2596 + + ; 40 lines of LORES + bit LORES ; 4 + + ; Try X=42 Y=12 cycles=2593 R3 + + lda $0 ; nop ; 3 + + ldy #12 ; 2 +baloopC:ldx #42 ; 2 +baloopD:dex ; 2 + bne baloopD ; 2nt/3 + dey ; 2 + bne baloopC ; 2nt/3 + + + ; rest of screen is hires page0 + ; (152*65)-4 = 9876 + + bit HIRES ; 4 + + ; Try X=13 Y=139 cycles=9870 R6 + + nop + nop + nop + + ldy #139 ; 2 +baloopE:ldx #13 ; 2 +baloopF:dex ; 2 + bne baloopF ; 2nt/3 + dey ; 2 + bne baloopE ; 2nt/3 + + + +;====================================================== +; We have 4550 cycles in the vblank, use them wisely +;====================================================== + + ; do_nothing should be 4550 + ; -10 keypress + ; =========== + ; 4540 + + +; jsr play_music ; 6+1032 + + + ; Try X=9 Y=89 cycles=4540 + + ldy #89 ; 2 +baloop1:ldx #9 ; 2 +baloop2:dex ; 2 + bne baloop2 ; 2nt/3 + dey ; 2 + bne baloop1 ; 2nt/3 + + ; no keypress = 10+(24) = 34 + + lda KEYPRESS ; 4 + bpl ba_no_keypress ; 3 + ; -1 + jmp ba_handle_keypress ; 3 +ba_no_keypress: + jmp ball_display_loop ; 3 + +ba_handle_keypress: + bit KEYRESET ; clear keypress ; 4 + rts ; 6 + + diff --git a/xmas_2018/wreath.s b/xmas_2018/wreath.s index 82dff28a..954bcffd 100644 --- a/xmas_2018/wreath.s +++ b/xmas_2018/wreath.s @@ -70,11 +70,11 @@ wreath: ; Try X=239 Y=8 cycles=9609 ldy #8 ; 2 -sbloopA:ldx #239 ; 2 -sbloopB:dex ; 2 - bne sbloopB ; 2nt/3 +wrloopA:ldx #239 ; 2 +wrloopB:dex ; 2 + bne wrloopB ; 2nt/3 dey ; 2 - bne sbloopA ; 2nt/3 + bne wrloopA ; 2nt/3 jmp wreath_begin_loop .align $100 diff --git a/xmas_2018/xmas2018.s b/xmas_2018/xmas2018.s index db390cc3..b4aa3383 100644 --- a/xmas_2018/xmas2018.s +++ b/xmas_2018/xmas2018.s @@ -46,6 +46,8 @@ apple_iie: jsr wreath + jsr ball + ;================== ; Game over ;================== @@ -56,6 +58,7 @@ game_over_man: .align $100 .include "wreath.s" + .include "ball.s" .include "lz4_decode.s" .include "gr_offsets.s" .include "gr_hline.s" @@ -95,9 +98,12 @@ game_over_man: ; FIXME: we can save 8 bytes per file by stripping checksums off end ;============================ -; starring wreath_hgr: .incbin "wreath.img.lz4",11 wreath_hgr_end: +ball_hgr: +.incbin "ball.img.lz4",11 +ball_hgr_end: +