;C02 VCS Library - Assembly Language Subroutines 

;addbcd(addend, &varble) - Add Number to BCD variable
;adcbcd(addend, &varble) - Add Number w/Carry to BCD variable
;Args:  A = Number to Add
;       X,Y = Pointer to Variable to Add To
;Sets: TEMP0,TEMP1 = Pointer to Color Table
;Affects: A,Y,C,N,Z
;Updates: Variable Pointed to by X,Y
;Returns: A = Result of Addition
ADDBCD: CLC             ;Clear Carry - Regular Add
ADCBCD: STX TEMP0       ;Save Pointer to Variable
        STY TEMP1
        LDY #0
        SED             ;Set Decimal Mode
        ADC (TEMP0),Y   ;Add Accumulator to Variable
        STA (TEMP0),Y   ;Store Result in Variable
        CLD             ;Clear Decimal Mode
        RTS             ;Return

;posobj(hrzpos, object) - Position Object
;Args: A = Horizontal Position
;      Y = Object (0=Player0, 1=Player1, 2=Missile0, 3=Missle1, 4=Ball)
;Affects: A,C,Z
POSOBJ: SEC
        STA WSYNC      ;Wait for Beginning of Scanline
POSOBL: SBC #15        ;2  2 - each time thru this loop takes 5 cycles, which is 
        BCS POSOBL     ;2  4 - the same amount of time it takes to draw 15 pixels
        EOR #7         ;2  6 - The EOR & ASL statements convert the remainder
        ASL            ;2  8 - of position/15 to the value needed to fine tune
        ASL            ;2 10 - the X position
        ASL            ;2 12
        ASL            ;2 14
        STA.WY HMP0,Y  ;5 19 - store fine tuning of X
        STA RESP0,Y    ;4 23 - set coarse X position of object
        RTS            ;6 29

