====== ROL Starfield using $D018 ====== By Richard Bayliss While I was programming a game called Hyper Duel. I wanted to do a simple star field. So I followed a note on one of the disks which had an example of the star field, and tried to implement one of my own. Here is the final result. ;The ROL Star Field animation by Richard/TND (From Hyper Duel) !to "starfield",cbm starcontrol = $0340 * = $0810 ;SYS2064 to start jsr $ff81 lda #$00 sta $d020 sta $d021 ;Draw starfield to screen $0400 ldx #$00 .copyscreen lda stardata,x sta $0400,x lda stardata+$100,x sta $0500,x lda stardata+$200,x sta $0600,x lda stardata+$2e8,x sta $06e8,x lda #$0f ;Light grey stars for now sta $d800,x sta $d900,x sta $da00,x sta $dae8,x inx bne .copyscreen lda #<.irq sta $0314 lda #>.irq sta $0315 lda #$7f sta $dc0d lda #$31 sta $d012 lda #$1b sta $d011 lda #$08 sta $d016 lda #$1c ;Char at $3000 sta $d018 lda #$01 sta $d01a ;Interrupt is on! cli jmp * ;Continuous loop to itself! .irq inc $d019 ;$D019 interrupt on lda #$fc ;Raster position 252 sta $d012 jsr .starfield jmp $ea7e ;Star field source: ;Starfield .starfield inc .starcontrol lda .starcontrol cmp #$03 beq .doscroll rts .doscroll lda #0 sta .starcontrol ldx #0 jsr .starscroll jsr .starscroll ldx #1 jsr .starscroll ldx #2 jsr .starscroll jsr .starscroll jsr .starscroll ldx #3 jsr .starscroll ldx #4 jsr .starscroll jsr .starscroll jsr .starscroll ldx #5 jsr .starscroll jsr .starscroll ldx #6 jsr .starscroll ldx #7 jsr .starscroll jsr .starscroll rts .starscroll lda $3220,x rol $3208,x rol $3210,x rol $3218,x rol $3220,x sta $3208,x rts ;The starfield char data here. Hell yeah! ;That's what we want :o) * = $3200 ;Shift + * (Blank it) !byte %00000000 ;Weird eh? Those are for the stars !byte %00000000 !byte %00000000 !byte %00000000 !byte %00000000 !byte %00000000 !byte %00000000 !byte %00000000 ;Shift + A !byte %00000000 !byte %00000000 !byte %00000000 !byte %00000000 !byte %00100000 !byte %00000000 !byte %00000000 !byte %00000000 !byte %01000000 ;Shift + B !byte %00000000 !byte %00000000 !byte %00010000 !byte %00000000 !byte %00000000 !byte %00000000 !byte %00000100 !byte %00000000 ;Shift + C !byte %00000000 !byte %01000000 !byte %00000000 !byte %00000000 !byte %00000000 !byte %00000000 !byte %00001000 !byte %00000000 ;Shift + D !byte %00000010 !byte %00000000 !byte %00000000 !byte %00010000 !byte %00000000 !byte %00000000 !byte %00000000 ;Now for the screen data *=$4000 stardata !scr"BCDABCDABCDABCDABCDABCDABCDABCDABCDABCDA" !scr"CDABCDABCDABCDABCDABCDABCDABCDABCDABCDAB" !scr"ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD" !scr"DABCDABCDABCDABCDABCDABCDABCDABCDABCDABC" !scr"BCDABCDABCDABCDABCDABCDABCDABCDABCDABCDA" !scr"CDABCDABCDABCDABCDABCDABCDABCDABCDABCDAB" !scr"ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD" !scr"DABCDABCDABCDABCDABCDABCDABCDABCDABCDABC" !scr"BCDABCDABCDABCDABCDABCDABCDABCDABCDABCDA" !scr"CDABCDABCDABCDABCDABCDABCDABCDABCDABCDAB" !scr"ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD" !scr"DABCDABCDABCDABCDABCDABCDABCDABCDABCDABC" !scr"BCDABCDABCDABCDABCDABCDABCDABCDABCDABCDA" !scr"CDABCDABCDABCDABCDABCDABCDABCDABCDABCDAB" !scr"ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD" !scr"DABCDABCDABCDABCDABCDABCDABCDABCDABCDABC" !scr"BCDABCDABCDABCDABCDABCDABCDABCDABCDABCDA" !scr"CDABCDABCDABCDABCDABCDABCDABCDABCDABCDAB" !scr"ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD" !scr"DABCDABCDABCDABCDABCDABCDABCDABCDABCDABC" !scr"BCDABCDABCDABCDABCDABCDABCDABCDABCDABCDA" !scr"CDABCDABCDABCDABCDABCDABCDABCDABCDABCDAB" !scr"ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD" !scr"DABCDABCDABCDABCDABCDABCDABCDABCDABCDABC" !scr"BCDABCDABCDABCDABCDABCDABCDABCDABCDABCDA" !scr"CDABCDABCDABCDABCDABCDABCDABCDABCDABCDAB" !scr"ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD" !scr"DABCDABCDABCDABCDABCDABCDABCDABCDABCDABC" !byte 0,0,0,0,00,0