; Vera Layer Control Assembly Language Routines for C02 ; Requires External Routines GETMEA, GETMBX, GETTBS, ; and External Variables TEMP0,TEMP1,TEMP2 ;getvca(layer, index) - Get Vera Character Address ;Args: A = Layer (0/1) ; Y = Character Index ;Sets: TEMP0 = Bank ; TEMP1 = Address LSB ; TEMP2 = Address MSB ;Returns: A = Bank ; Y = Address LSB ; X = Address MSB GETVCA: PHA ;Save Layer Number STY TEMP1 ;Set Offset LSB to Index LDA #0 ;Set Offset MSB to Zero ASL TEMP1 ;Multiple Offset by 2 ROL STA TEMP2 ;and Store MSB PLA ;Restore Layer Number JSR GETTBS ;Get Tile Base TXA ;Add Tile Base LSB CLC ADC TEMP1 ;to Offset LSB STA TEMP1 TYA ;Add Tile Base MSB ADC TEMP2 ;to Offset MSB STA TEMP2 LDA #0 ;Set Bank ADC #0 ;to Carry STA TEMP0 LDX #2 ;Set Count to 2 JMP ASLADR ;and Shift Address Left ;getvcd(layer, index) - Read Vera Character Data to Array ;Args: A = Layer (0/1) ; Y = Character Index ;Uses: DSTLO,DSTHI = Address of Array ;Destroys: TEMP0,TEMP1,TEMP2 ;Returns: A = Number of Bytes Read GETVCD: JSR SETVAC ;Set Vera Address to Character Address LDA #8 ;Set Byte Count to 8 JMP GETMEA ;and Read Bytes into Array ;setvac(layer, index) - Set Vera Address to Character Address ;Args: A = Layer (0/1) ; Y = Character Index ;Sets: TEMP0 = Bank ; TEMP1 = Address LSB ; TEMP2 = Address MSB ;Returns: A = Bank + Auto-Increment ; Y = Address LSB ; X = Address MSB SETVAC: JSR GETVCA ORA #$10 ;Set Auto-Increment to 1 JMP SETADR ;and Set Vera Address ;setvcd(layer, index) - Write Vera Character Data from Array ;Args: A = Layer (0/1) ; Y = Character Index ;Uses: SRCLO,SRCHI = Address of Array ;Destroys: TEMP0,TEMP1,TEMP2 ;Returns: A = Number of Bytes Read GETVCD: JSR SETVAC ;Set Vera Address to Character Address LDA #8 ;Set Byte Count to 8 JMP SETMEA ;and Read Bytes into Array