1
0
mirror of https://github.com/RevCurtisP/C02.git synced 2024-09-28 20:56:53 +00:00
C02/x16/include/vera.a02

215 lines
6.2 KiB
Plaintext
Raw Normal View History

2019-09-23 23:57:03 +00:00
; C02 module vera.h02 assembly language subroutines
2019-09-25 19:56:26 +00:00
;getmod() - Get Layer 0/1 Mode
;Args: A = Layer (0/1)
;Affects: Y
;Returns: A = Layer Mode
; X = Current Data Port
GETMOD: JSR GETLRC ;Read Register
LSR ;Shift Left Five Bits
LSR
LSR
LSR
RTS
;getenb() - Get Layer 0/1 Enabled
;Args: A = Layer (0/1)
;Affects: Y
;Returns: A = $FF - Layer Enabled
; $00 - Layer Disabled
; X = Current Data Port
GETENB: JSR GETLRC ;Read Register
AND #$01 ;Isolate Bit 1
BEQ GETENX ;If Set
LDA #$FF ; Return TRUE
GETENX: RTS ;Else Return FALSE
;getlrc() - Get Layer 0/1 Control Register
;Args: A = Layer (0/1)
;Affects: Y
;Returns: A = Control Register Contents
; X = Current Data Port
GETLRC: LDX #0 ;Set Offset to Control Register
;getlrr() - Get Layer 0/1 Register
;Args: A = Layer (0/1)
; X = Register Offset
;Affects: Y
;Returns: A = Contents of Register
; X = Current Data Port
GETLRR: JSR GETLRP ;Get Layer Page in Y
JMP GETREG ;and Read Register Contents
2019-09-25 19:56:26 +00:00
;getlrp() - Get Layer 0/1 Register Page
;Args: A = Layer (0/1)
;Returns: A,Y = Layer Register Page
GETLRP: AND #$01 ;Isolate Bit 1
ASL ;Move to Left Nybble
ASL
ASL
ASL
ORA #$20 ;And Add to 2
TAY ;Return Page in Y
RTS
;getchd(index, &array) - Read Character Data into Array
;Args: A = Character Index
; Y,X = Address of Array to Read into
;Destroys: TEMP0,TEMP1,TEMP2
;Returns: A = Number of Bytes Read
GETCHD: JSR SETDST ;Store Address in Destination Pointer
STA 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
JSR GETLRI ;Get Tile Base
TXA ;Add Offset To Tile Base
CLC
ADC TEMP0
STA TEMP0
TYA
ADC TEMP1
STA TEMP1
LDA #0
ADC #0
JSR GETMBX ;Multiply by 4
ORA #$10 ;Set Auto-Increment to 1
JSR SETADR ;and Set Vera Address
LDA #8 ;Set Byte Count to 8
JMP GETMEA ;and Read Bytes into Array
2019-09-25 19:56:26 +00:00
;gettba() - Get Layer 0/1 Tile Base Address
;Args: A = Layer (0/1)
;Destroys: TEMP1,TEMP2
;Returns: A = Tile Base Bank
; Y,X = Tile Base Address
GETTBA: LDX #4 ;Set Register Offset
.DC $2C ;Read Register Pair and Rotate
;getmba() - Get Layer 0/1 Map Base Address
;Args: A = Layer (0/1)
;Destroys: TEMP1,TEMP2
;Returns: A = Map Base Bank
; Y,X = Map Base Address
GETMBA: LDX #2 ;Set Register Offset
JSR GETLRI ;Read Register Pair as Integer
LDA #0 ;Initialize Page to 0
JSR SAVRXY ;Save Integer in TEMP1,TEMP2
GETMBX: LDX #2 ;Do Twice
GETMBL: ASL TEMP1 ; Rotate LSB
ROL TEMP2 ; MSB and
ROL ; Bank Left
DEX
BNE GETMBL
JMP RESRXY ;Load LSB, MSB and Return
;getvsc() - Get Layer 0/1 Vertical Scroll
;Args: A = Layer (0/1)
;Returns: A,X = Vertical Scroll LSB
; Y = Vertical Scroll MSB
GETVSC: LDX #8 ;Set Register Offset
.DC $2C ;Skip to GETLRI (BIT Absolute)
;gethsc() - Get Layer 0/1 Horizontal Scroll
;Args: A = Layer (0/1)
;Returns: A,X = Horizontal Scroll LSB
; Y = Horizontal Scroll MSB
GETHSC: LDX #6 ;Set Register Offset
.DC $2C ;Skip to GETLRI (BIT Absolute)
;gettbs() - Get Layer 0/1 Tile Base
;Args: A = Layer (0/1)
;Returns: A,X = Tile Base LSB
; Y = Tile Base MSB
GETTBS: LDX #4 ;Set Register Offset
.DC $2C ;Skip to GETLRI (BIT Absolute)
;getmbs() - Get Layer 0/1 Map Base
;Args: A = Layer (0/1)
;Returns: A,X = Map Base LSB
; Y = Map Base MSB
GETMBS: LDX #2 ;Set Register Offset
;getlri() - Get Layer 0/1 Register Pair as Integer
;Args: A = Layer (0/1)
; X = Register Offset
;Returns: A,X = Integer LSB
; Y = Integer LSB
GETLRI: JSR GETLRP ;Get Layer Page in Y
JMP GETREI ;and Read Register Contents
2019-09-25 19:56:26 +00:00
;mapsiz() - Convert Map Size Specifier to Pixels
;Args: A = Map Size Specifier
;Affects: A
;Returns: Y,X Map Size in Pixels
MAPSIZ: TAX ;Copy Map Size Specifier to X
LDA MAPSIH,X ;Load Pixels MSB from Table
TAY ;and Return in Y
LDA MAPSIL,X ;Load Pixels LSB from Table
TAX ;and Return in X
MAPSIL: .DC $20,$40,$80,$00
MAPSIH: .DC $00,$00,$00,$01
;tilsiz() - Convert Tile Size Specifier to Pixels
;Args: A = Tile Size Specifier
;Affects: A
;Returns: A Tile Size in Pixels
TILSIZ: TAX ;Copy Map Size Specifier to X
LDA TILSIT,X ;Load Pixels MSB from Table
RTS
TILSIT: .DC $08,$10
;gettsz() - Get Layer 0/1 Tile Size
;getmsz() - Get Layer 0/1 Map Size
;Args: A = Layer (0/1)
;Affects: X
;Returns: A = Map Width Specifier
; Y = Map Height Specifier
;settbs() - Set Layer 0/1 Map Base
;Args: A = Layer (0/1)
; Y,X = Map Base
;Sets: TEMP1,TEMP2 = Map Base
;Affecta: A,Y,X
SETTBS: JSR SAVRXY ;Store Map Base in TEMP1,TEMP2
LDX #4 ;Set Register Offset
BNE SETLRI ;Write to Layer Register
;setmbs() - Set Layer 0/1 Map Base
;Args: A = Layer (0/1)
; Y,X = Map Base
;Sets: TEMP1,TEMP2 = Map Base
;Affecta: A,Y,X
SETMBS: JSR SAVRXY ;Store Map Base in TEMP1,TEMP2
LDX #2 ;Set Register Offset
BNE SETLRI ;Write to Layer Register
;setvsc() - Set Layer 0/1 Vertical Scroll
;Args: A = Layer (0/1)
; Y,X = Map Base
;Sets: TEMP1,TEMP2 = Vertical Scroll
;Affecta: A,Y,X
SETVSC: JSR SAVRXY ;Store Vertical Scroll in TEMP1,TEMP2
LDX #8 ;Set Register Offset
BNE SETLRI ;Write to Layer Register
;sethsc() - Set Layer 0/1 Horizontal Scroll
;Args: A = Layer (0/1)
; Y,X = Map Base
;Sets: TEMP1,TEMP2 = Horizontal Scroll
;Affecta: A,Y,X
SETHSC: JSR SAVRXY ;Store Horizontal Scroll in TEMP1,TEMP2
LDX #6 ;Set Register Offset
;setlri() - Write Integer to Get Layer 0/1 Register
;Args: A = Layer (0/1)
; X = Register Offset
;Uses: TEMP1,TEMP2 = Integer Value
;Affecta: A,Y,X
SETLRI: JSR GETLRP ;Get Layer Page in Y
JMP SETREI ;and Write Integer to Register
2019-09-23 23:57:03 +00:00