Re: [stella] Color test

Subject: Re: [stella] Color test
From: "Philipp Graf" <ut3h@xxxxxxxxxxxxxxxxxxx>
Date: Sun, 7 May 2000 23:40:42 +0200
So now here is the source for this demo. There is nothing very special to it
except maybe for the fact that the scanline loop is unrolled for 4 lines to
allow display of playfield graphics - the PFx registers are written
alternatively.

         Bye, Philipp.

----------------------------------------------------------------------------
------


;---------------------------
;--      color bars       --
;---------------------------
;- (C) Philipp "Spin" Graf -
;-   created 1. May 2000   -
;---------------------------
;-  compilable with as65   -
;---------------------------


   include "vcs.h"


   ;---- variable region

   bss
   org $80

Offset            ds 1



   ;---- code at $f000 instead of $1000 !?
   code
   org $f000


Start
   ;---- global system initialization

   sei           ;set irq disable
   cld           ;clear decimal mode

   ldx #$ff      ; Set stack to $ff
   txs


 lda #0
.loop
   sta 0,x
 dex
 bne .loop


   ldx #0        ;set all ports to input
   stx SWACNT
   stx SWBCNT



   ;---------------------------


Main

   ;-- reserved for init stuff
   lda #1
   sta CTRLPF        ;reflected playfield
   lda #0
   sta COLUPF        ;black playfield

MainLoop

   ;-  Enter VSYNC
   lda #2
   sta WSYNC
   sta VSYNC
   sta WSYNC
   sta WSYNC

   ;-- prepare VBLANK
 lda  #44
 sta  TIM64T
   lda  #0

   ;-- leave VSYNC
 sta  WSYNC ; Third line of VSYNC.
 sta  VSYNC ; (0)


   ;-- 'game logic' here in vblank

   ldy #192/4        ;line counter

   inc Offset        ;do 'scrolling'
   lda Offset
   and #$1f
   sta Offset
   tax

.vblwait
 lda INTIM         ;Wait for end of VBlank
 bne .vblwait

 sta WSYNC
 sta VBLANK  ;End VBLANK


.mainloop

   ;-- LINE 1
   inx               ;increment scroll value

   lda Box1,y
   sta PF0

   lda Table,x       ;get color

   sta COLUBK        ;and write them...
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$20
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$50
   sta COLUBK

   sty WSYNC         ;wait for next hsync


   ;-- LINE 2
   inx               ;increment scroll value

   lda Box1+4,y
   sta PF1
   sta PF1

   nop

   lda Table,x       ;get color

   sta COLUBK        ;and write them...
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$20
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$50
   sta COLUBK

   sty WSYNC         ;wait for next hsync


   ;-- LINE 3
   inx               ;increment scroll value

   lda Box1+8,y
   sta PF2
   sta PF2

   nop

   lda Table,x       ;get color

   sta COLUBK        ;and write them...
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$20
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$50
   sta COLUBK

   sty WSYNC         ;wait for next hsync


   ;-- LINE 4
   inx               ;increment scroll value
   txa
   and #$f
   tax

   nop
   nop
   nop

   lda Table,x       ;get color

   sta COLUBK        ;and write them...
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$20
   sta COLUBK
   adc #$10
   sta COLUBK
   adc #$50
   sta COLUBK

   dey
   sty WSYNC         ;wait for next hsync

   beq .out
   jmp .mainloop

.out
   ;enter overscan
 lda #2
 sta VBLANK

 ldx #30
.oloop
   sta WSYNC
 dex
 bne .oloop

   jmp MainLoop


   ;-- color table
   align 256
Table
   db $0,$2,$4,$6,$8,$A,$C,$E,$E,$C,$A,$8,$6,$4,$2,$0
   db $0,$2,$4,$6,$8,$A,$C,$E,$E,$C,$A,$8,$6,$4,$2,$0

Box1
   db %00011000
   db %00011000
   db %01111110
   db %01111110
   db %01000010
   db %01000010
   db %01000010
   db %00000000
   db %00000000
   db %01000010
   db %01000010
   db %01000010
   db %01111110
   db %01111110
   db %00011000
   db %00011000

   db %00011000
   db %00011000
   db %00000000
   db %00000000
   db %00111100
   db %00111100
   db %00100100
   db %00000000
   db %00000000
   db %00100100
   db %00111100
   db %00111100
   db %00000000
   db %00000000
   db %00011000
   db %00011000

   db %00011000
   db %00011000
   db %01111110
   db %01111110
   db %01000010
   db %01000010
   db %01000010
   db %00000000
   db %00000000
   db %01000010
   db %01000010
   db %01000010
   db %01111110
   db %01111110
   db %00011000
   db %00011000

   db %00011000
   db %00011000
   db %00000000
   db %00000000
   db %00111100
   db %00111100
   db %00100100
   db %00000000
   db %00000000
   db %00100100
   db %00111100
   db %00111100
   db %00000000
   db %00000000
   db %00011000
   db %00011000



;** OUT OF CYCLES



   ; end of rom: pointers to start. seems to be the reset vector and some
interrupt vector???
   org $fffc
   dw Start
   dw Start




--
Archives (includes files) at http://www.biglist.com/lists/stella/archives/
Unsub & more at http://www.biglist.com/lists/stella/

Current Thread