diff --git a/graphics/hgr/parallax/par.s b/graphics/hgr/parallax/par.s index 799ffc61..d5ee7a72 100644 --- a/graphics/hgr/parallax/par.s +++ b/graphics/hgr/parallax/par.s @@ -163,22 +163,25 @@ skip_color_medium: ;=========================== ; SMALL - txa + txa ; 2 - sec ; subtract frame from YY + sec ; subtract frame from YY ; 2 frame4_smc: - sbc #0 + sbc #0 ; 2 - eor X2 - and #$10 + eor X2 ; 3 + and #$10 ; 2 - beq skip_color_small - lda #$aa + beq skip_color_small ; 2/3 + lda #$aa ; 2 - bne draw_color + bne draw_color ; 2/3 skip_color_small: - lda #$00 + + ; fallthrough is black + + lda #$00 ; 2 ;======================== @@ -186,20 +189,19 @@ skip_color_small: draw_color: out_smc: - sta $2000,Y + sta $2000,Y ; 5 + dey ; 2 + cpy #10 ; 2 + bne xloop ; 2/3 - dey ; 1 - cpy #10 - bne xloop ; 2 - - dex ; 1 + dex ; 2 ; cpx #$FF - bpl yloop ; 2 + bpl yloop ; 2/3 - bmi parallax_forever ; 2 + bmi parallax_forever ; 2/3 ; for bot diff --git a/graphics/hgr/parallax/sier.s b/graphics/hgr/parallax/sier.s new file mode 100644 index 00000000..fe4907c7 --- /dev/null +++ b/graphics/hgr/parallax/sier.s @@ -0,0 +1,177 @@ +; Parallax HGR + +; by deater (Vince Weaver) + + +; Zero Page +GBASL = $26 +GBASH = $27 +H2 = $2C +COLOR = $30 + +HGR_X = $E0 +HGR_Y = $E2 +HGR_COLOR = $E4 +HGR_HORIZ = $E5 +HGR_PAGE = $E6 + +FRAME = $F0 +FRAME2 = $F1 +FRAME4 = $F2 + +X2 = $FB +COLORS = $FC + +; Soft Switches +PAGE1 = $C054 ; Page1 +PAGE2 = $C055 ; Page2 + + +; ROM routines + +HGR = $F3E2 +HGR2 = $F3D8 +HCLR = $F3F2 +HPLOT0 = $F457 ;; plot at (Y,X), (A) +WAIT = $FCA8 ;; delay 1/2(26+27A+5A^2) us +HPOSN = $F411 ; (Y,X),(A) (values stores in HGRX,XH,Y) + + +hgr_lookup_h = $1000 +hgr_lookup_l = $1100 +div4_lookup = $1200 + +parallax: + + ;=================== + ; init screen + jsr HGR + jsr HGR2 + + ;=================== + ; int tables + + ldx #191 +init_loop: + txa + pha + jsr HPOSN + pla + tax + lda GBASL + sta hgr_lookup_l,X + lda GBASH + and #$1F ; 20 30 001X 40 50 010X + sta hgr_lookup_h,X + + txa + asl + asl + sta div4_lookup,X + + dex + cpx #$ff + bne init_loop + + +parallax_forever: + + inc FRAME ; 5 + + ;======================== + ; flip page + + lda HGR_PAGE ; $40 or $20 + + eor #$60 ; flip draw_page + sta HGR_PAGE + + asl + asl + rol + eor #$1 + tay + lda PAGE1,Y + + + ldx #127 ; init Y + +yloop: + + ;============== + ; point output to current line + + lda hgr_lookup_l,X + sta out_smc+1 + lda hgr_lookup_h,X + ora HGR_PAGE + sta out_smc+2 + + ;============== + ; current column (work backwards) + + ldy #39 ; 2 +xloop: + +; lda div4_lookup,Y ; 4+ +; sta X2 ; 3 + + ;=========================== + ; LARGE + + txa ; 2 + +; carry always clear here? +; sec ; subtract frame from Y + sbc FRAME ; 3 + + eor div4_lookup,Y ; 4+ + and #$40 ; 2 + + beq skip_color_large ; 2/3 + lda #$ff ; 2 + bne draw_color ; 2/3 +skip_color_large: + + ;=========================== + ; MEDIUM + + txa ; 2 + + sec ; subtract frame from Y ; 2 + + adc FRAME ; go other way ; 3 + + and div4_lookup,Y ; sierpinski ; 4+ + + bne skip_color_medium + lda #$55 + bne draw_color +skip_color_medium: + + ; fallthrough is black + + lda #$00 ; 2 + + + ;======================== + ; actually draw color + +draw_color: +out_smc: + sta $2000,Y ; 5 + + dey ; 2 + bpl xloop ; 2/3 + + dex ; 2 + + bpl yloop ; 2/3 + + bmi parallax_forever ; 2/3 + + +; for bot + ; $3F5 - 127 + 3 = $379 + +; jmp parallax