diff --git a/demos/second/part01_intropan/horiz_scroll.s b/demos/second/part01_intropan/horiz_scroll.s index 21ca10ad..45be3ddf 100644 --- a/demos/second/part01_intropan/horiz_scroll.s +++ b/demos/second/part01_intropan/horiz_scroll.s @@ -7,31 +7,47 @@ pan_loop: lda #0 sta COUNT + sta TICKER + sta P2_OFFSET pan_outer_outer_loop: ldx #191 pan_outer_loop: + ; $2000 ; 0010 -> 0100 0011 -> 0101 lda hposn_high,X sta pil_smc1+2 sta pil_smc2+2 sta pil_smc3+2 - ; sta pil_smc4+2 -; eor #$60 - + sta pil_smc6+2 + ; $4000 + eor #$60 + sta pil_smc5+2 + sta pil_smc7+2 + sta pil_smc8+2 + sta pil_smc9+2 + ; $2000 lda hposn_low,X sta pil_smc1+1 sta pil_smc2+1 +; sta pil_smc4+1 + sta pil_smc6+1 + sta pil_smc5+1 + sta pil_smc8+1 + + ; $2000+1 + sta pil_smc3+1 inc pil_smc3+1 + sta pil_smc7+1 + inc pil_smc7+1 + sta pil_smc9+1 + inc pil_smc9+1 + -; clc -; adc COUNT -; sta pil_smc3+1 -; sta pil_smc4+1 stx XSAVE @@ -41,7 +57,7 @@ pan_outer_loop: ; updated: 34*39 pil_smc1: - ldx $2000,Y ; 4+ + ldx $2000,Y ; ; 4+ pan_inner_loop: lda left_lookup_main,X ; 4+ @@ -61,25 +77,103 @@ pil_smc2: ; leftover -;pil_smc3: -; lda $4000 -;pil_smc4: -; sta $2000,Y + ; X has $2000,39 + lda left_lookup_main,X ; 4+ + sta TEMPY ; 3 + +pil_smc5: + ldx $4000 ; 4+ + lda left_lookup_next,X ; 4+ + ora TEMPY ; 3 + +pil_smc6: + sta $2000,Y ; 5 + + ; X has $4000 + lda left_lookup_main,X ; 4+ + sta TEMPY ; 3 + +pil_smc7: + ldx $4000+1 ; 4+ + lda left_lookup_next,X ; 4+ + ora TEMPY ; 3 + +pil_smc8: + sta $4000 ; 5 + + lda left_lookup_main,X ; 4+ +pil_smc9: + sta $4000+1 ; 5 + + ; $2038 $2039 $4000 $4001 + ;0 DCCBBAA GGFFEED KJJIIHH NNMMLLK + ;1 EDDCCBB HHGGFFE LKKJJII ~~NNMML + ;2 FEEDDCC IIHHGGF MLLKKJJ ~~~~NNM + ;3 GFFEEDD JJIIHHG NMMLLKK ~~~~~~N + ;4 HGGFFEE KKJJIIH ~NNMMLL ~~~~~~~ + ;5 IHHGGFF LLKKJJI ~~~NNMM ~~~~~~~ + ;6 JIIHHGG MMLLKKJ ~~~~~NN ~~~~~~~ + ;7 KJJIIHH NNMMLLK ~~~~~~~ ~~~~~~~ + ;8 RQQPPOO UUTTSSR + + ; every 8 clicks need to copy over two more columns ldx XSAVE dex cpx #$ff - bne pan_outer_loop +; bne pan_outer_loop + beq done_pan_outer_loop + jmp pan_outer_loop +done_pan_outer_loop: lda KEYPRESS bmi done_pan + ; check if update + ; FIXME: use mod 7 table here + inc TICKER + lda TICKER + cmp #7 + bne no_ticker + + lda #0 + sta TICKER + inc P2_OFFSET + inc P2_OFFSET + + ldx #0 +p2_loop: + lda hposn_low,X + sta GBASL + lda hposn_high,X + eor #$60 + sta GBASH + + ldy P2_OFFSET + lda (GBASL),Y + pha + iny + lda (GBASL),Y + ldy #1 + sta (GBASL),Y + dey + pla + sta (GBASL),Y + + inx + cpx #192 + bne p2_loop + + +no_ticker: inc COUNT lda COUNT cmp #139 + beq done_pan - bne pan_outer_outer_loop +; bne pan_outer_outer_loop + jmp pan_outer_outer_loop done_pan: bit KEYRESET diff --git a/demos/second/part01_intropan/intro.s b/demos/second/part01_intropan/intro.s index 9cf79833..fff1aca8 100644 --- a/demos/second/part01_intropan/intro.s +++ b/demos/second/part01_intropan/intro.s @@ -143,6 +143,9 @@ intro_start: jsr horiz_pan + lda #5 + jsr wait_seconds + ;============================ ; draw sprites diff --git a/demos/second/zp.inc b/demos/second/zp.inc index f84eb6ff..aff16f93 100644 --- a/demos/second/zp.inc +++ b/demos/second/zp.inc @@ -234,6 +234,10 @@ SCROLL_IN = $F3 MEMCOUNT = $F4 FAKE_KEY_COUNT = $F5 +; OPENER +TICKER = $F1 +P2_OFFSET = $F2 + ;============================================== ; $FC-$FF we use for in/out pointers ;==============================================