; Roughly based on "Entropy" by Dave McKellar of Toronto ; A Two-line BASIC program Found on Beagle Brother's Apple Mechanic Disk ; ; It is XORing vector squares across the screen. Randomly the size ; is changed while doing this. ; 24001 ROT=0:FOR I=1 TO 15: READ A,B: POKE A,B: NEXT: DATA ; 232,252,233,29,7676,1,7678,4,7679,0,7680,18,7681,63, ; 7682,36,7683,36,7684,45,7685,45,7686,54,7687,54,7688,63, ; 7689,0 ; 24002 FOR I=1 TO 99: HGR2: FOR E=.08 TO .15 STEP .01: ; FOR Y=4 to 189 STEP 6: FOR X=4 to 278 STEP 6: ; SCALE=(RND(1)E) THEN SCALE = 1 ; if E=.15 IF RND<38 ; If (RND(1)E) THEN SCALE = 1 credits: lda #0 sta DRAW_PAGE jsr clear_bottom jsr HGR ; Hi-res graphics, no text at bottom ; Y=0, A=0 after this call sta LOGO_OFFSET sta FRAME ;================= ; pause a bit ldx #50 jsr long_wait lda #1 ; default is 1 sta HGR_SCALE ldy #60 ; FOR Y=60 to 102 STEP 6 logo_yloop: ldx #34 ; FOR X=32 to 248 STEP 6 logo_xloop: stx XREG ; save X sty YREG ; save Y ; setup X and Y co-ords tya ; YPOS into A ldy #0 ; XHIGH always 0 jsr HPOSN ; X= (y,x) Y=(a) ldx LOGO_OFFSET asl desire_boxes,X bcc skip_xdraw ldx #shape_table lda #0 ; ROT=0 jsr XDRAW0 ; XDRAW 1 AT X,Y ; Both A and X are 0 at exit skip_xdraw: jsr RESTORE ; restore FLAGS/X/Y/A ; we saved X/Y earlier logo_nextx: ; NEXT X inc FRAME lda FRAME and #$7 bne no_inc_offset inc LOGO_OFFSET no_inc_offset: txa clc ; 1 adc #6 ; x+=6 ; 2 tax ;cmp #248 cmp #18 ; this is 272? bne logo_xloop logo_nexty: ; inc LOGO_OFFSET clc tya adc #6 ; y+=6 tay cpy #102 bne logo_yloop ; if so, loop ;======================================= ; delay a few seconds ;======================================= ldx #150 jsr long_wait lda #0 sta FRAME sta FRAMEH ;====================================== ; do the effect ;====================================== eloop: ldy #0 ; Y=0 to 180 STEP 6 yloop: ldx #0 stx XHIGH ldx #4 ; FOR X=4 to 278 STEP 6 xloop: lda #1 ; default is 1 sta HGR_SCALE cpy #54 bcc random_scale ; blt cpy #108 bcc done_scale ; bge random_scale: jsr random16 cmp #20 bcs done_scale ; bge lda SEEDL bmi done_scale inc HGR_SCALE done_scale: stx XREG ; save X sty YREG ; save Y ; setup X and Y co-ords tya ; YPOS into A ldy XHIGH ; Y always 0 ; XPOS already in X jsr HPOSN ; X= (y,x) Y=(a) ldx #shape_table lda #0 ; ROT=0 jsr XDRAW0 ; XDRAW 1 AT X,Y ; Both A and X are 0 at exit jsr text_credits jsr RESTORE ; restore FLAGS/X/Y/A ; we saved X/Y earlier nextx: ; NEXT X ; starting at 4 so hit 256, overflow to high bit ; finally end at 280 which is 24? txa clc ; 1 adc #6 ; x+=6 ; 2 tax beq xwrap cmp #24 bne xloop beq nexty xwrap: inc XHIGH jmp xloop nexty: ; carry always set if we get here? clc tya adc #6 ; y+=6 tay cpy #156 bne yloop ; if so, loop beq eloop shape_table: .byte 18,63,36,36,45,45,54,54,63,0 ; shape data (a square) ; 280/6= 48 roughly ; 36*6 wide = 216, 280-216/2=32 to 248 ; 160/6 = 26 roughly ; 42 high, 160-42/2 = 118/2=59, say 60? ;0123456701234567012345670123456701234567 ; # # ; # ; # #### #### # # ### #### ; ##### # # # # ## # # ; # # ###### ### # # ###### ; # # # # # # # ; #### #### #### # # #### ;0123456701234567012345670123456701234567 desire_boxes: .byte $02,$00,$04,$00,$00 .byte $02,$00,$00,$00,$00 .byte $02,$78,$F5,$73,$C0 .byte $3E,$85,$05,$84,$20 .byte $42,$FC,$E5,$07,$E0 .byte $42,$80,$15,$04,$00 .byte $3C,$79,$E5,$03,$C0 ;setup_text_credits: ; ; ; clear bottom of page2 and set split ; bit TEXTGR ; ; ldx #39 ; lda #' '|$80 ;clear_bottom_loop: ; sta $A50,X ; sta $AD0,X ; sta $B50,X ; sta $BD0,X ; dex ; bpl clear_bottom_loop ; set "done" ; lda #DONE ; sta command ; clear time ; lda #0 ; sta seconds ; sta ticks ; rts ;====================================== ;====================================== ; display credits ;====================================== ;====================================== text_credits: ; display music bars ; a bar lda A_VOLUME lsr lsr sta draw_a_bar_left_loop+1 lda #3 sec sbc draw_a_bar_left_loop+1 sta draw_a_bar_right_loop+1 ldx #4 lda #' '|$80 draw_a_bar_left_loop: cpx #$4 bne skip_al_bar eor #$80 skip_al_bar: sta $650,X ; A50 dex bpl draw_a_bar_left_loop ldx #4 lda #' ' draw_a_bar_right_loop: cpx #$4 bne skip_ar_bar eor #$80 skip_ar_bar: sta $650+35,X ; A50 dex bpl draw_a_bar_right_loop ; b bar lda B_VOLUME lsr lsr sta draw_b_bar_left_loop+1 lda #3 sec sbc draw_b_bar_left_loop+1 sta draw_b_bar_right_loop+1 ldx #4 lda #' '|$80 draw_b_bar_left_loop: cpx #$4 bne skip_bl_bar eor #$80 skip_bl_bar: sta $6D0,X ; $AD0 dex bpl draw_b_bar_left_loop ldx #4 lda #' ' draw_b_bar_right_loop: cpx #$4 bne skip_br_bar eor #$80 skip_br_bar: sta $6D0+35,X ; $AD0 dex bpl draw_b_bar_right_loop ; c lda C_VOLUME lsr lsr sta draw_c_bar_left_loop+1 lda #3 sec sbc draw_c_bar_left_loop+1 sta draw_c_bar_right_loop+1 ldx #4 lda #' '|$80 draw_c_bar_left_loop: cpx #$4 bne skip_cl_bar eor #$80 skip_cl_bar: sta $750,X ; $B50 dex bpl draw_c_bar_left_loop ldx #4 lda #' ' draw_c_bar_right_loop: cpx #$4 bne skip_cr_bar eor #$80 skip_cr_bar: sta $750+35,X ; $B50 dex bpl draw_c_bar_right_loop ;================ ; update frames ;================ inc FRAME lda FRAME cmp #100 bne not_fifty lda #0 sta FRAME inc FRAMEH not_fifty: ;================ ; write credits ;================ actual_credits: lda FRAME cmp #25 bne done_credits lda FRAMEH ; increment on multiples of 4 seconds and #$7 beq next_credit bne done_credits next_credit: ;======================== ; write the credits write_credits: lda which_credit cmp #9 beq done_credits ldx #4 outer_credit_loop: ; X is proper line ; point to start of proper output line lda credits_address,X sta credits_address_smc+1 lda credits_address+1,X sta credits_address_smc+2 ; load proper input location lda which_credit asl tay txa asl asl asl ; *16 (already *2) clc adc credits_table,Y sta write_credit_1_loop+1 lda credits_table+1,Y adc #0 sta write_credit_1_loop+2 ldy #0 write_credit_1_loop: lda $dede,Y ora #$80 credits_address_smc: sta $dede,Y iny cpy #16 bne write_credit_1_loop done_credit1_loop: dex dex bpl outer_credit_loop inc which_credit done_credits: rts credits_address: .word $650+12 .word $6d0+12 .word $750+12 credits_table: .word credits0 .word credits1 .word credits2 .word credits3 .word credits4 .word credits5 .word credits6 .word credits7 .word credits8 credits0: .byte " " .byte " " .byte " " credits1: .byte " CODE: " .byte " " .byte " DEATER " credits2: .byte " MUSIC: " .byte " " .byte " MA2E " credits3: .byte " EFFECTS: " .byte " J. WARWICK " .byte " D. MCKELLAR " credits4: .byte " MAGIC: " .byte " QKUMBA " .byte " 4 A.M. " credits5: .byte "GREETS: " .byte "--> FRENCH TOUCH" .byte "--> IMPHOBIA " credits6: .byte "--> GROUIK " .byte "--> FENARINARSA " .byte "--> WIZ21 " credits7: .byte "SCOTT MANLEY " .byte " " .byte " ",34,"FLY SAFE",34," " credits8: .byte " APPLE ][ " .byte " " .byte " FOREVER " which_credit: .byte $0