;colors.a02 - Atari 2600 Color/BW Assembly Language Routines ;getclr(mask, clr, bw) - Get Color Based on Color B&W Switch Position ;Args: A - Mask for Color Cycling (0=None) ; Y - Color/Luminance to use in Color Mode ; X - Color/Luminance to use in B&W Mode ;Returns: Color to Use GETCLR: STA TEMP2 ;Save Color Cycling Mask LDA SWCHB ;Read Console Switches AND #%00001000 ;Test TV Type Switch BNE GETCLC ;If Off TXA ; Load B&W Mode Color/Luminance EOR TEMP2 ; Apply Mask AND #$0F ; and Strip High Nybble RTS ;Else GETCLC: TYA ; Load Color Mode Color/Luminance EOR TEMP2 ; and Apply Apply Mask RTS ;Return Selected Color ;setclr(mask, &clrtbl) - Set Object Colors ;Args: X,Y = Pointer to 8-Byte Color Table Color Table ; Player0, Player1, Playfield, Background (Color) ; Player0, Player1, Playfield, Background (B&W) ;Sets: TEMP0,TEMP1 = Pointer to Color Table ;Affects: A,X,Y,N,Z SETCLR: STY TEMP1 ;Save Pointer to Color Table STX TEMP0 STA TEMP2 ;Save Color Cycling Mask LDX #3 ;Setting 4 colors (0-3) LDY #3 ;Refault to the color entries in the table (0-3) LDA SWCHB ;Read Console Switches AND #%00001000 ;Test TV Type Switch BNE SETCLL ;If On LDA #$0F ; Use Color Entries AND TEMP2 ;Else STA TEMP2 ; Strip High Nybble from Mask LDY #7 ; and Use B&W Entries SETCLL: LDA (TEMP0),Y ;Get Color/B&W Value EOR TEMP2 ;Apply Color Cycling Mask STA COLUP0,x ;and Set Object Color DEY ;Decrement Table Pointer DEX ;Decrement Register Pointer BPL SETCLL ;If >0, Loop RTS ;Return