X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=hacks%2Fimages%2Fm6502%2Fsflake.asm;fp=hacks%2Fimages%2Fm6502%2Fsflake.asm;h=cbb72e8908225c5b9e3e7c5d0bf365fdce449985;hp=0000000000000000000000000000000000000000;hb=d6b0217f2417bd19187f0ebc389d6c5c2233b11c;hpb=aa75c7476aeaa84cf3abc192b376a8b03c325213 diff --git a/hacks/images/m6502/sflake.asm b/hacks/images/m6502/sflake.asm new file mode 100644 index 00000000..cbb72e89 --- /dev/null +++ b/hacks/images/m6502/sflake.asm @@ -0,0 +1,320 @@ +;; Jeremy English 01-December-2008 +;; Snowflakes + +;; Main loop Count +lda #7 +sta $f + +;; pattern number +lda #0 +sta $10 + +;;Cells +lda #$00 +sta $4 +lda #$10 +sta $5 + +;;Tmp +lda #$00 +sta $6 +lda #$11 +sta $7 + +;;Init Cells Buffer +;;------------------------------------------------------------ +ldy #$ff +initCells: +lda #0 +sta ($4),y +sta ($6),y +dey +bne initCells + +;;Set start position +ldy #115 +lda #1 +sta ($4),y + +;;Setup offset +lda #15 +sta $d +lda #16 +sta $e + +;;Start of main loop +;;------------------------------------------------------------ +mainloop: + +;;init indent +;;We want to indent every other line +lda #0 +sta $a + +lda #0 +sta $9 + +;; Display Cells +;;------------------------------------------------------------ +;; 248 is the total number of cells +ldy #248 +display: + +lda #0 +sta $8 + +lda $a +beq stop16 +lda #15 +sta $b +lda #1 +sta $8 +jmp toggle +stop16: +lda #16 +sta $b +toggle: +lda $a +eor #1 +sta $a + +;; Set the stop position +ldx $b +inner_display: +dex +txa +pha + +dey +tya +pha +lda ($4),y + +beq display_continue +ldx $8 +ldy $9 +lda #1 +jsr paint +ldx $8 +ldy $9 +inx +jsr paint +ldx $8 +ldy $9 +iny +jsr paint +ldx $8 +ldy $9 +inx +iny +jsr paint +display_continue: +inc $8 +inc $8 + +;;Life Cycle +;;------------------------------------------------------------ +pla +tay +pha ;;Store y on the stack + +tax +dey +lda ($4),y +iny +iny +clc +adc ($4),y +sta $c + +txa +sec +sbc $d +tay +lda $c +clc +adc ($4),y +sta $c + +txa +sec +sbc $e +tay +lda $c +clc +adc ($4),y +sta $c + +txa +clc +adc $d +tay +lda $c +clc +adc ($4),y +sta $c + +txa +clc +adc $e +tay +lda $c +clc +adc ($4),y +sta $c + +pla +tay ;;Pull Y off of the stack + +lda $c +and #1 +beq dontset +sta ($6),y +dontset: + +pla +tax ;;Pull x off of the stack +beq exit_inner_display +jmp inner_display +exit_inner_display: +inc $9 +inc $9 +tya +beq display_exit +jmp display +display_exit: + + +;;Copy Temporary Buffer +;;------------------------------------------------------------ +ldy #248 +copybuf: +dey +lda ($6),y +sta ($4),y +tya +bne copybuf + +dec $f +lda $f +beq reset_main +jmp mainloop + +;;Reset main counter +;;------------------------------------------------------------ +reset_main: +lda #7 +sta $f + +lda #$ff ;;Delay Count +sta $11 +delay: +ldy #$a0 +inner_delay: +nop +dey +bne inner_delay +dec $11 +lda $11 +bne delay + +;; init buffer +;; and clear screen +clrscr: +lda $fe +and $f +cmp #1 +beq clrscr ;We don't want a white background +ldy #$00 +ldx #$0 +cs_loop: +sta $200,x +sta $300,x +sta $400,x +sta $500,x +pha +lda #0 +sta ($6),y +sta ($4),y +pla +inx +dey +bne cs_loop + +;; Setup new pattern +;;------------------------------------------------------------ +inc $10 +lda $10 +and #3 +sta $10 +cmp #0 +beq pattern1 +cmp #1 +beq pattern2 +cmp #2 +beq pattern3 +cmp #3 +beq pattern4 + +pattern1: +ldy #114 +lda #1 +sta ($4),y +ldy #115 +lda #1 +sta ($4),y +ldy #116 +lda #1 +sta ($4),y +jmp mainloop + +pattern2: +ldy #113 +lda #1 +sta ($4),y +ldy #118 +lda #1 +sta ($4),y +jmp mainloop + +pattern3: +ldy #115 +lda #1 +sta ($4),y +jmp mainloop + +pattern4: +ldy #102 +lda #1 +sta ($4),y +ldy #128 +lda #1 +sta ($4),y +jmp mainloop + +;;Paint subroutine +;;------------------------------------------------------------ +paint: + pha + lda yl,y + sta $2 + lda yh,y + sta $3 + txa + tay + pla + sta ($2),y + rts + + ;; Y cord MSB +yh: + dcb $02, $02, $02, $02, $02, $02, $02, $02 + dcb $03, $03, $03, $03, $03, $03, $03, $03 + dcb $04, $04, $04, $04, $04, $04, $04, $04 + dcb $05, $05, $05, $05, $05, $05, $05, $05 + ;; Y cord LSB +yl: + dcb $00, $20, $40, $60, $80, $a0, $c0, $e0 + dcb $00, $20, $40, $60, $80, $a0, $c0, $e0 + dcb $00, $20, $40, $60, $80, $a0, $c0, $e0 + dcb $00, $20, $40, $60, $80, $a0, $c0, $e0