; Not quite a raster-bar, but why not .include "zp.inc" ;=========== ; CONSTANTS ;=========== ELEMENTS EQU 64 NUM_ROWS EQU 20 ;===================== ; Rasterbars ;===================== ;================================ ; Clear screen and setup graphics ;================================ jsr clear_screens ; clear top/bottom of page 0/1 jsr set_gr_page0 ;=============== ; Init Variables ;=============== lda #0 ; 2 sta DRAW_PAGE ; 3 sta SCREEN_Y ; 3 ;=========================== ;=========================== ; Main Loop ;=========================== ;=========================== raster_loop: jsr clear_top ; clear screen ; clear rows ldy #(NUM_ROWS-1) ; 2 lda #0 ; 2 init_rows: sta row_color,Y ; 5 dey ; 2 bpl init_rows ; 2nt/3 ;================ ; set colors lda #COLOR_BOTH_AQUA ; aqua ldy SCREEN_Y jsr set_row_color lda #COLOR_BOTH_MEDIUMBLUE ; medium blue jsr set_row_color lda #COLOR_BOTH_LIGHTGREEN ; light green jsr set_row_color lda #COLOR_BOTH_DARKGREEN ; green jsr set_row_color lda #COLOR_BOTH_YELLOW ; yellow jsr set_row_color lda #COLOR_BOTH_ORANGE ; orange jsr set_row_color lda #COLOR_BOTH_PINK ; pink jsr set_row_color lda #COLOR_BOTH_RED ; red jsr set_row_color ;================= ; draw rows ldy #(NUM_ROWS-1) ; 2 draw_rows_loop: lda row_color,Y ; 5 beq draw_rows_skip ; skip if black ; 2nt/3 sta COLOR ; 3 tya ; 2 pha ; 3 asl ; 2 ldy #39 ; 2 sty V2 ; 3 ldy #0 ; 2 jsr hlin_double ; hlin y,V2 at A ; 63+(X*16) pla ; 4 tay ; 2 draw_rows_skip: dey ; 2 bpl draw_rows_loop ; 2 ;================== ; flip pages ;================== jsr page_flip ; 6 ;================== ; delay? ;================== lda #100 jsr WAIT ;================== ; update y pointer ;================== ldy SCREEN_Y iny cpy #ELEMENTS bne not_there ldy #0 not_there: sty SCREEN_Y ;================== ; loop forever ;================== jmp raster_loop ; 3 ;=================== ;=================== ; set_row_color ;=================== ;=================== ; color in A ; Y=offset ; Y incremented ; A, X trashed set_row_color: sta COLOR tya ; wrap y offset and #(ELEMENTS-1) tax lda fine_sine,X ; lookup sine value ; pre-shifted right by 4, sign-extended clc adc #18 ; add in 18 to center on screen sin_no_more: pha ; save row value jsr put_color ; put color at row pla ; restore row value clc ; increment row value adc #1 jsr put_color ; put color at row iny ; increment for next time rts ;================== ; put_color ;================== ; A = row to set color of ; A trashed put_color: clc ror ; row/2, with even/odd in carry tax ; put row/2 in X bcc even_line ; if even, skip to even odd_line: lda #$f0 ; load mask for odd bcs finish_line even_line: lda #$0f ; load mask for even finish_line: sta MASK and COLOR ; mask off color sta COLOR2 ; store for later lda MASK eor #$ff ; invert mask and row_color,X ; load existing color ora COLOR2 ; combine sta row_color,X ; store back rts ;=============================================== ; External modules ;=============================================== .include "../asm_routines/pageflip.s" .include "../asm_routines/gr_setpage.s" .include "../asm_routines/gr_offsets.s" .include "../asm_routines/gr_fast_clear.s" .include "../asm_routines/gr_hlin.s" ;====================== ; some arrays ;====================== row_color: .byte $00,$00,$00,$00,$00, $00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00, $00,$00,$00,$00,$00 ; arithmatically shifted right by 4 ; FIXME: exploit symmetry and get rid of 3/4 of this table ; possibly not worth the extra code fine_sine: .byte $00 ; 0.000000 .byte $01 ; 0.098017 .byte $03 ; 0.195090 .byte $04 ; 0.290285 .byte $06 ; 0.382683 .byte $07 ; 0.471397 .byte $08 ; 0.555570 .byte $0A ; 0.634393 .byte $0B ; 0.707107 .byte $0C ; 0.773010 .byte $0D ; 0.831470 .byte $0E ; 0.881921 .byte $0E ; 0.923880 .byte $0F ; 0.956940 .byte $0F ; 0.980785 .byte $0F ; 0.995185 .byte $0F ; 1.000000 .byte $0F ; 0.995185 .byte $0F ; 0.980785 .byte $0F ; 0.956940 .byte $0E ; 0.923880 .byte $0E ; 0.881921 .byte $0D ; 0.831470 .byte $0C ; 0.773010 .byte $0B ; 0.707107 .byte $0A ; 0.634393 .byte $08 ; 0.555570 .byte $07 ; 0.471397 .byte $06 ; 0.382683 .byte $04 ; 0.290285 .byte $03 ; 0.195090 .byte $01 ; 0.098017 .byte $00 ; 0.000000 .byte $FE ; -0.098017 .byte $FC ; -0.195090 .byte $FB ; -0.290285 .byte $F9 ; -0.382683 .byte $F8 ; -0.471397 .byte $F7 ; -0.555570 .byte $F5 ; -0.634393 .byte $F4 ; -0.707107 .byte $F3 ; -0.773010 .byte $F2 ; -0.831470 .byte $F1 ; -0.881921 .byte $F1 ; -0.923880 .byte $F0 ; -0.956940 .byte $F0 ; -0.980785 .byte $F0 ; -0.995185 .byte $F0 ; -1.000000 .byte $F0 ; -0.995185 .byte $F0 ; -0.980785 .byte $F0 ; -0.956940 .byte $F1 ; -0.923880 .byte $F1 ; -0.881921 .byte $F2 ; -0.831470 .byte $F3 ; -0.773010 .byte $F4 ; -0.707107 .byte $F5 ; -0.634393 .byte $F7 ; -0.555570 .byte $F8 ; -0.471397 .byte $F9 ; -0.382683 .byte $FB ; -0.290285 .byte $FC ; -0.195090 .byte $FE ; -0.098017