; star ; by Vince `deater` Weaver SPEAKER = $C030 SET_GR = $C050 SET_TEXT = $C051 FULLGR = $C052 PAGE1 = $C054 PAGE2 = $C055 LORES = $C056 ; Enable LORES graphics HGR2 = $F3D8 PLOT = $F800 ; PLOT AT Y,A (A colors output, Y preserved) GBASCALC = $F847 ; Y in A, put addr in GBASL/GBASH SETGR = $FB40 WAIT = $FCA8 ; delay 1/2(26+27A+5A^2) us GBASL = $26 GBASH = $27 OUTL = $74 OUTH = $75 YPOS = $76 FRAME = $6D PAGE = $6E LINE = $6F pattern1 = $d000 ; location in memory ;.zeropage ;.globalzp pattern_smc star: jsr SETGR ; set LORES lda #0 sta OUTL bit FULLGR ; set FULL 48x40 main_loop: sta PAGE ; start at page 1 asl ; make OUTH $4 or $8 depending on value in PAGE ; which we have in A above or at end of loop asl ; C is 0 adc #4 sta OUTH lda #100 jsr WAIT inc FRAME ;============================ ; clear screen ;============================ full_loop: ldx #3 line_loop: ldy #119 screen_loop: tya ; extrapolate X from Y lda #$44 ;inner_loop_smc: sta (OUTL),Y dey bpl screen_loop ; move to next line by adding $80 ; we save a byte by using EOR instead lda OUTL eor #$80 ; add $80 sta OUTL bne line_loop ; we overflowed, so increment OUTH inc OUTH dex bpl line_loop ;============================ ; end clear screen ;============================ done_bg: ;====================== ; draw 8x8 bitmap ;====================== lda FRAME and #$7 tax lda bounce,X sta YPOS ldx #7 boxloop: txa clc adc YPOS jsr GBASCALC ; calc address of X ; note we center to middle of screen ; by noting the middle 8 lines ; are offset by $28 from first 8 lines ; GBASL is in A at this point clc adc #12 sta GBASL ; center x-coord and y-coord at same time lda PAGE ; want to add 0 or 4 (not 0 or 1) asl asl ; this sets C to 0 adc GBASH sta GBASH ldy #7 draw_line_loop: lda bitmap,X ; get low bit of bitmap2 into carry lsr lda #$00 ; black is default color ror bitmap,X ; 16-bit rotate (in memory) bcc its_black lda #$dd ; yellow its_black: sta (GBASL),Y ; partway down screen dey bpl draw_line_loop dex bpl boxloop ;====================== ; switch page ;====================== lda PAGE tax ldy PAGE1,X ; flip page eor #$1 bpl main_loop ; bra ; star bitmap ;012|456| ; @ ; ; @@ ; ; @@@@@ ; ;@@@@@@@ ; ; @@@@@ ; ; @@@@@ ; ; @@ @@ ; ;@@ @@ ; bitmap: .byte $10 .byte $18 .byte $1f .byte $fe .byte $7c .byte $3e .byte $66 .byte $C3 bounce: .byte 10,11,12,13,13,12,11,10