mirror of
https://github.com/RevCurtisP/C02.git
synced 2024-11-22 01:31:33 +00:00
Moved memory access functions to module veramem
This commit is contained in:
parent
3b74138826
commit
7674e11b61
642
x16/include/vera-old.a02
Normal file
642
x16/include/vera-old.a02
Normal file
@ -0,0 +1,642 @@
|
|||||||
|
; C02 module vera.h02 assembly language subroutines
|
||||||
|
; Requires External Functions NYBCAT, NYBCUT
|
||||||
|
; and Variables TEMP0
|
||||||
|
|
||||||
|
;getadr() - Get Vera Address
|
||||||
|
;Args: A = Bank + Auto-Increment
|
||||||
|
; Y,X = Address
|
||||||
|
GETADR: LDX $9F20 ;Store Address LSB
|
||||||
|
LDY $9F21 ;Store Address MSB
|
||||||
|
LDA $9F22 ;Store Bank & Auto-Increment
|
||||||
|
RTS
|
||||||
|
|
||||||
|
;getvid() - Get Video Output Mode
|
||||||
|
;Returns: A = Video Mode
|
||||||
|
; Y = Chroma Disabled
|
||||||
|
; X = Current Field
|
||||||
|
GETVID: LDA #$00 ;Set Register Offset to Video Output
|
||||||
|
JSR GETDCR ;Read from Display Composer
|
||||||
|
LDY #$00 ;Set Chroma Disabled to FALSE
|
||||||
|
LDX #$00 ;Set Video Field to EVEN
|
||||||
|
BIT GETVIM ;Test Chroma Disabled Bit
|
||||||
|
BEQ GETVIE ;If Bit 3 is Set
|
||||||
|
DEY ; Set Chroma Disabled to TRUE
|
||||||
|
BIT GETVIM ;Test Chroma Disabled Bit
|
||||||
|
GETVIE: BCC GETVIF ;If Bit 7 is Set
|
||||||
|
DEX ; Set Video Field to ODD
|
||||||
|
GETVIF: AND #$03 ;Isolate Bits 0-2 (Video Output Mode)
|
||||||
|
RTS
|
||||||
|
GETVIM: .DC $04 ;Chroma Disable Bit Mask
|
||||||
|
|
||||||
|
;getbdr() - Get Get Border Color
|
||||||
|
;Returns: A = Border Color Palette Index
|
||||||
|
GETBDR: LDA #$03 ;Set Register Offset to Border Color
|
||||||
|
|
||||||
|
;getdcr() - Get Display Composer Register
|
||||||
|
;Args: A = Register Offset
|
||||||
|
;Affects: Y
|
||||||
|
;Returns: A = Contents of Register
|
||||||
|
; X = Current Data Port
|
||||||
|
GETDCR: LDY #$00 ;Set MSB to Display Composer Page
|
||||||
|
TAX ;Set LSB to Register Offset
|
||||||
|
;and Execute GETREG
|
||||||
|
;getreg(&addr);
|
||||||
|
;Args: Y,X = Address
|
||||||
|
;Returns: A = Mode
|
||||||
|
; X = Current Data Port
|
||||||
|
GETREG: LDA #$0F ;Set Bank to Registers
|
||||||
|
GETBYT: JSR SETADR ;Set Vera Address
|
||||||
|
LDX $9F25 ;Get Current Data Port
|
||||||
|
LDA $9F23,X ;Read LSB from Data Port
|
||||||
|
RTS
|
||||||
|
|
||||||
|
;getmem(count, &addr) - Read Array From Vera Memory
|
||||||
|
;Args: A = Number of Bytes to Read
|
||||||
|
; Y,X = Address of Array to Read Into
|
||||||
|
;Requires: setadr()
|
||||||
|
;Sets: DSTLO,DSTHI = Address of Array
|
||||||
|
; TEMP0 = Number of Bytes to Read
|
||||||
|
;Affects: A
|
||||||
|
;Returns: Y = Number of Bytes Read
|
||||||
|
; X = Current Data Port
|
||||||
|
GETMEM: JSR SETDST ;Save Destination Address
|
||||||
|
GETMEA: STA TEMP0 ;Save Number of Bytes
|
||||||
|
LDY #0 ;Initialize Counter
|
||||||
|
LDX $9F25 ;Get Current Data Port
|
||||||
|
GETMEL: LDA $9F23,X ;Read Byte from Data Port
|
||||||
|
STA (DSTLO),Y ;Store in Memory
|
||||||
|
INY ;Increment Counter
|
||||||
|
CPY TEMP0 ;If Limit Not Reached
|
||||||
|
BNE GETMEL ; Loop
|
||||||
|
|
||||||
|
;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
|
||||||
|
BNE GETREG ;and Read Register Contents
|
||||||
|
|
||||||
|
;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
|
||||||
|
BNE GETMEA ;and Read Bytes into Array
|
||||||
|
|
||||||
|
;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
|
||||||
|
BNE GETREI ;and Read Register Contents
|
||||||
|
|
||||||
|
|
||||||
|
;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
|
||||||
|
|
||||||
|
;getvsp() - Get Vertical Stop
|
||||||
|
;Affects: A
|
||||||
|
;Returns: Y,X = Vertical Stop
|
||||||
|
GETVSP: LDA #7 ;Set Reg Offset to Vertical Stop
|
||||||
|
JSR GETHVS ;Read Registers
|
||||||
|
LSR ;Shift Left One Bit
|
||||||
|
JMP GETVSS ;Then Four More Bits and Mask
|
||||||
|
|
||||||
|
;getvsr() - Get Vertical Start
|
||||||
|
;Affects: A
|
||||||
|
;Returns: Y,X = Vertical Start
|
||||||
|
GETVSR: LDA #6 ;Set Reg Offset to Vertical Start
|
||||||
|
JSR GETHVS ;Read Registers
|
||||||
|
GETVSS: LSR ;Shift Left Four Bit
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
AND #$01 ;Isolate Bit 0
|
||||||
|
TAY ;and Copy MSB to Y
|
||||||
|
RTS
|
||||||
|
|
||||||
|
;gethsp() - Get Horizontal Stop
|
||||||
|
;Affects: A
|
||||||
|
;Returns: Y,X = Horizontal Stop
|
||||||
|
GETHSP: LDA #5 ;Set Lookup Index to Horizontal Start
|
||||||
|
JSR GETHVS ;Read Registers
|
||||||
|
LSR ;Shift Left Two Bits
|
||||||
|
LSR
|
||||||
|
JMP GETHSS ;then Mask and Return
|
||||||
|
|
||||||
|
;gethsr() - Get Horizontal Start
|
||||||
|
;Affects: A
|
||||||
|
;Returns: Y,X = Horizontal Start
|
||||||
|
GETHSR: LDA #4 ;Set Lookup Index to Horizontal Start
|
||||||
|
JSR GETHVS ;Read Registers
|
||||||
|
;.dc $ff ;debug
|
||||||
|
GETHSS: AND #$03 ;Isolate Bit 0
|
||||||
|
TAY ;and Copy MSB to Y
|
||||||
|
RTS
|
||||||
|
|
||||||
|
;gethvs() - Get Start/Stop Low Byte and High Bits
|
||||||
|
;Args: X = Low Register
|
||||||
|
;Affects: Y
|
||||||
|
;Returns: A = High Bits
|
||||||
|
; X = Low Byte
|
||||||
|
GETHVS: JSR GETDCR ;Read LSB from Register
|
||||||
|
;.dc $ff ;debug
|
||||||
|
PHA ;and Save It
|
||||||
|
LDA #8 ;Load Register Offset for High Bits
|
||||||
|
STA $9F20 ;Set As Address LSB
|
||||||
|
LDA $9F23,X ;and Read High Bits into A
|
||||||
|
.DC $FA ;PLX ;Restore LSB into X
|
||||||
|
RTS
|
||||||
|
|
||||||
|
;getiql() - Get Interrupt Line
|
||||||
|
;Affects: A
|
||||||
|
;Returns: Y,X = Interrupt Line#
|
||||||
|
GETIQL: LDA #9 ;Set Register Offset to Interrupt Line
|
||||||
|
.DC $2C ;Skip to SETDCX (BIT Absolute)
|
||||||
|
|
||||||
|
;getscl() - Get Horizontal and Vertical Scale
|
||||||
|
;Returns: A,X = Horizontal Scale
|
||||||
|
; Y = Vertical Scale
|
||||||
|
GETSCL: LDA #1 ;Set Register Offset to HSCALE,VSCALE
|
||||||
|
.DC $2C ;Skip SETDCI (BIT Absolute)
|
||||||
|
|
||||||
|
;getdci() - Get Display Composer Register Pair
|
||||||
|
;Args: A = Register Offset
|
||||||
|
;Affects: Y
|
||||||
|
;Returns: A,X = Integer LSB
|
||||||
|
; Y = Integer LSB
|
||||||
|
GETDCI: LDY #$00 ;Set MSB to Display Composer Page
|
||||||
|
TAX ;Set LSB to Register Offset
|
||||||
|
;and Execute GETREI
|
||||||
|
|
||||||
|
;getrei(addr); Read Vera Register Pair
|
||||||
|
;Args: Y,X = Address
|
||||||
|
;Returns: A,X = Integer LSB
|
||||||
|
; Y = Integer LSB
|
||||||
|
GETREI: LDA #$0F ;Set Bank to Registers
|
||||||
|
|
||||||
|
;getint(addr); Read Integer from Vera Memory
|
||||||
|
;Args: A = Bank
|
||||||
|
; Y,X = Address
|
||||||
|
;Returns: A,X = Integer LSB
|
||||||
|
; Y = Integer LSB
|
||||||
|
GETINT: ORA #$10 ;Set Auto-Increment to 1
|
||||||
|
JSR SETADR ;Set Vera Address
|
||||||
|
LDX $9F25 ;Get Current Data Port
|
||||||
|
LDA $9F23,X ;Read LSB from Data Port
|
||||||
|
LDY $9F23,X ;Read MSB Data Port
|
||||||
|
TAX ;Copy LSB to X
|
||||||
|
RTS
|
||||||
|
|
||||||
|
;setvsp() - Set Horizontal Stop
|
||||||
|
;Args: Y,X = Horizontal Stop
|
||||||
|
;Affects: A,X,Y
|
||||||
|
SETVSP: TYA ;Convert MSB to High Bit
|
||||||
|
AND #$01
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
STA TEMP1 ;and Save
|
||||||
|
TXA ;Copy LSB to Accumlator
|
||||||
|
LDX #7 ;Set Register Offset to Horizontal Start
|
||||||
|
LDY #$DF ;Set High Bits Mask
|
||||||
|
JMP SETHST ;OR in High Bits and Write Back
|
||||||
|
|
||||||
|
;setvsr() - Set Horizontal Start
|
||||||
|
;Args: Y,X = Horizontal Start
|
||||||
|
;Affects: A,X,Y
|
||||||
|
SETVSR: TYA ;Convert MSB to High Bit
|
||||||
|
AND #$01
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
STA TEMP1 ;and Save
|
||||||
|
TXA ;Copy LSB to Accumlator
|
||||||
|
LDX #6 ;Set Register Offset to Horizontal Start
|
||||||
|
LDY #$EF ;Set High Bits Mask
|
||||||
|
JMP SETHST ;OR in High Bits and Write Back
|
||||||
|
|
||||||
|
;sethsp() - Set Horizontal Stop
|
||||||
|
;Args: Y,X = Horizontal Stop
|
||||||
|
;Affects: A,X,Y
|
||||||
|
SETHSP: TYA ;Convert MSB to High Bits
|
||||||
|
AND #$03
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
STA TEMP1 ;and Save
|
||||||
|
TXA ;Copy LSB to Accumlator
|
||||||
|
LDX #5 ;Set Register Offset to Horizontal Start
|
||||||
|
LDY #$F3 ;Set High Bits Mask
|
||||||
|
JMP SETHST ;OR in High Bits and Write Back
|
||||||
|
|
||||||
|
;sethsr() - Set Horizontal St7art
|
||||||
|
;Args: Y,X = Horizontal Start
|
||||||
|
;Destroys TEMP0,TEMP1,TEMP2
|
||||||
|
;Affects: A,X,Y
|
||||||
|
SETHSR: TYA ;Convert MSB to High Bits
|
||||||
|
AND #$03
|
||||||
|
STA TEMP1 ;and Save
|
||||||
|
TXA ;Copy LSB to Accumlator
|
||||||
|
LDX #4 ;Set Register Offset to Horizontal Start
|
||||||
|
LDY #$FC ;Set High Bits Mask
|
||||||
|
SETHST: STY TEMP2 ;Save
|
||||||
|
JSR SETHVS ;Write LSB and Get High Bits
|
||||||
|
AND TEMP2 ;Mask Start Stop High
|
||||||
|
ORA TEMP1 ;OR in High Bits
|
||||||
|
STA $9F23,X ;and Write back to Register
|
||||||
|
RTS
|
||||||
|
|
||||||
|
|
||||||
|
SETHVS: JSR SETDCX ;Write LSB
|
||||||
|
LDA #8 ;Load Register Offset for High Bits
|
||||||
|
STA $9F20 ;Set As Address LSB
|
||||||
|
LDA $9F23,X ;and Read High Bits into A
|
||||||
|
RTS
|
||||||
|
|
||||||
|
;setvid() - Set Video Output Mode
|
||||||
|
;Args: A = Video Mode
|
||||||
|
; Y = Chroma Disabled
|
||||||
|
;Destroys: TEMP0
|
||||||
|
SETVID: AND #3 ;Isolate Video Mode Bits
|
||||||
|
CPY #0 ;Set Chroma Mask to
|
||||||
|
BEQ SETVIF ; 0 if Y is Zero or
|
||||||
|
LDY #4 ; 4 if it is not
|
||||||
|
SETVIF: STY TEMP0 ;Save Chroma Bit
|
||||||
|
ORA TEMP0 ;Combine with Video Mode Bits
|
||||||
|
LDX #0 ;Set Register Offset to Video Mode
|
||||||
|
BEQ SETDCX ;Write to Register
|
||||||
|
|
||||||
|
;setbdr() - Set Border Color
|
||||||
|
;Args: A = Border Color Palette Index
|
||||||
|
SETBDR: LDX #3 ;Set Register Offset to Border Color
|
||||||
|
.DC $2C ;Skip to SETDCX (BIT Absolute)
|
||||||
|
|
||||||
|
;setdcr() - Set Display Composer Register
|
||||||
|
;Args: A = Register Offset
|
||||||
|
; Y = Value to Write
|
||||||
|
;Affects: Y
|
||||||
|
;Returns: A = Value Written
|
||||||
|
; X = Current Data Port
|
||||||
|
SETDCR: TAX ;Set LSB to Register Offset
|
||||||
|
TYA ;Move Write Value to Accumulator
|
||||||
|
SETDCX: LDY #$00 ;Set MSB to Display Composer Page
|
||||||
|
|
||||||
|
;setreg(addr) - Set Register
|
||||||
|
;Args: A = Value to Write
|
||||||
|
; Y,X = Address
|
||||||
|
;Sets: TEMP0 = Value to Write
|
||||||
|
;Affects: Y
|
||||||
|
;Returns: A = Value Written
|
||||||
|
; X = Current Data Port
|
||||||
|
SETREG: STA TEMP0 ;Save Value to Write
|
||||||
|
SETREH: LDA #$0F ;Set Bank, Auto-Increment
|
||||||
|
|
||||||
|
;setbyt(addr) - Write Byte to Vera Memory
|
||||||
|
;Args: A = Bank
|
||||||
|
; Y,X = Address
|
||||||
|
;Uses: TEMP0 = Value to Write
|
||||||
|
;Affects: Y
|
||||||
|
;Returns: A = Value Written
|
||||||
|
; X = Current Data Port
|
||||||
|
SETBYT: JSR SETADR ;Set Vera Address
|
||||||
|
LDA TEMP0 ;Retrieve Value to Write
|
||||||
|
LDX $9F25 ;Get Current Data Port
|
||||||
|
STA $9F23,X ;Write Value to Data Port
|
||||||
|
RTS
|
||||||
|
|
||||||
|
;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
|
||||||
|
BNE SETREI ;and Write Integer to Register
|
||||||
|
|
||||||
|
;setiql() - Set IRQ Line
|
||||||
|
;Args: Y,X = IRQ Line Number`
|
||||||
|
;Sets: TEMP1,TEMP2 = IRQ Line Number
|
||||||
|
;Affecta: A,Y,X
|
||||||
|
SETIQL: TXA ;Copy LSB to Accumulator
|
||||||
|
LDX #9 ;Set Register Offset to HSCALE,VSCALE
|
||||||
|
.DC $2C ;Skip to SETDCP (BIT Absolute)
|
||||||
|
|
||||||
|
;setscl() - Set Horizontal and Vertical Scale
|
||||||
|
;Args: A = Horizontal Scale
|
||||||
|
; Y = Vertical Scale
|
||||||
|
SETSCL: LDX #1 ;Set Register Offset to HSCALE,VSCALE
|
||||||
|
|
||||||
|
;setdcp() - Set Display Composer Register Pair
|
||||||
|
;Args: A = First Register Value
|
||||||
|
; Y = Second Register Value
|
||||||
|
; X = Register Offset
|
||||||
|
;Affects: A,Y
|
||||||
|
;Returns: X = Current Data Port
|
||||||
|
SETDCP: STA TEMP1 ;Store First Value as LSB
|
||||||
|
STY TEMP2 ;Store Second Value as MSB
|
||||||
|
LDY #$00 ;Set MSB to Display Composer Page
|
||||||
|
|
||||||
|
;setrei(addr); Set Vera Register to Integer
|
||||||
|
;Args: Y,X = Address
|
||||||
|
;Uses: TEMP1,TEMP2 = Integer Value
|
||||||
|
;Affects: A,Y
|
||||||
|
;Returns: X = Current Data Port
|
||||||
|
SETREI: LDA #$0F ;Set Bank to Registers
|
||||||
|
|
||||||
|
;setint(addr); Write Integer to Vera Memory
|
||||||
|
;Args: A = Bank
|
||||||
|
; Y,X = Address
|
||||||
|
;Uses: TEMP1,TEMP2 = Integer Value
|
||||||
|
;Affects: A,Y
|
||||||
|
;Returns: X = Current Data Port
|
||||||
|
SETINT: ORA #$10 ;Set Auto-Increment to 1
|
||||||
|
JSR SETADR ;Set Vera Address
|
||||||
|
LDX $9F25 ;Get Current Data Port
|
||||||
|
LDA TEMP1 ;Get LSB
|
||||||
|
STA $9F23,X ;Write to Data Port
|
||||||
|
LDA TEMP2 ;Get MSB
|
||||||
|
STA $9F23,X ;Write to Data Port
|
||||||
|
RTS
|
||||||
|
|
||||||
|
;setmem(count, &addr) - Write Array to Vera Memory
|
||||||
|
;Args: A = Number of Bytes to Write
|
||||||
|
; Y,X = Address of Array to Write From
|
||||||
|
;Requires: setadr()
|
||||||
|
;Sets: SRCLO,SRCHI = Address of Array
|
||||||
|
; TEMP0 = Number of Bytes to Write
|
||||||
|
;Affects: A
|
||||||
|
;Returns: Y = Number of Bytes Written
|
||||||
|
; X = Current Data Port
|
||||||
|
SETMEM: STA TEMP0 ;Save Number of Bytes
|
||||||
|
JSR SETSRC ;Save Destination Address
|
||||||
|
LDX $9F25 ;Get Current Data Port
|
||||||
|
LDY #0 ;Initialize Counter
|
||||||
|
SETMEL: LDA (SRCLO),Y ;Read Byte from Array
|
||||||
|
STA $9F23,X ;Write Byte to Data Port
|
||||||
|
INY ;Increment Counter
|
||||||
|
CPY TEMP0 ;If Limit Not Reached
|
||||||
|
BNE SETMEL ; Loop
|
||||||
|
RTS
|
||||||
|
|
||||||
|
;rgbclr(r,g,b) - Convert RGB Values to Palette Color
|
||||||
|
;Args: A = Red Value (0-15)
|
||||||
|
; Y = Green Value (0-15)
|
||||||
|
; X = Blue Value (0-15)
|
||||||
|
;Affects: A
|
||||||
|
;Returns: Y = Color MSB (0000RRRR)
|
||||||
|
; X = Color LSB (GGGGBBBB)
|
||||||
|
RGBCLR: PHA ;Save Red Value
|
||||||
|
TYA ;Copy Green Value to Left Nybble
|
||||||
|
.DC $DA ;PHX Copy Blue Value
|
||||||
|
.DC $7A ;PLY to Right Nybble
|
||||||
|
JSR NYBCAT ;Concatanate Green and Blue
|
||||||
|
TAX ;and Return as LSB
|
||||||
|
.DC $7A ;PLY Return Red as MSB
|
||||||
|
RTS
|
||||||
|
|
||||||
|
;clrrgb(c) - Convert Palette Color to RGB Values
|
||||||
|
;Args: Y = Color MSB (0000RRRR)
|
||||||
|
; X = Color LSB (GGGGBBBB)
|
||||||
|
;Returns: A = Red Value (0-15)
|
||||||
|
; Y = Green Value (0-15)
|
||||||
|
; X = Blue Value (0-15)
|
||||||
|
CLRRGB: .DC $5A ;PHY Save MSB
|
||||||
|
TXA ;Copy LSB into Accumulator
|
||||||
|
JSR NYBCUT ;and Split into Nybbles
|
||||||
|
.DC $5A ;PHY Return Blue Value
|
||||||
|
.DC $FA ;PLX in X Register
|
||||||
|
TAY ;Green Value in Y Register
|
||||||
|
PLA ;and Red Value in Accumulator
|
||||||
|
RTS
|
||||||
|
|
||||||
|
;getclr(idx) - Get Color Entry idx from Palette
|
||||||
|
;Args: A = Color Entry Index
|
||||||
|
;Affects: A
|
||||||
|
;Returns: Y = Color MSB (0000RRRR)
|
||||||
|
; X = Color LSB (GGGGBBBB)
|
||||||
|
GETCLR: JSR SETIDX ;Set Vera Address to Palette Index
|
||||||
|
LDX $9F25 ;Get Current Data Port
|
||||||
|
LDA $9F23,X ;Read LSB from Data Port
|
||||||
|
LDY $9F23,X ;Read MSB from Data Port
|
||||||
|
TAX ;Copy LSB to X Register
|
||||||
|
RTS
|
||||||
|
|
||||||
|
;setclr(idx) - Set Color Entry idx in Palette
|
||||||
|
;Args: A = Color Entry Index
|
||||||
|
; Y = Color MSB (0000RRRR)
|
||||||
|
; X = Color LSB (GGGGBBBB)
|
||||||
|
;Affects: A
|
||||||
|
;Returns: Y,X = Color Entry Address
|
||||||
|
SETCLR: JSR SAVRXY ;Save Color Value
|
||||||
|
JSR SETIDX ;Set Vera Address to Palette Index
|
||||||
|
LDX $9F25 ;Get Current Data Port
|
||||||
|
LDA TEMP1 ;Retrieve Color Value LSB
|
||||||
|
STA $9F23,X ;and Write to Data Port
|
||||||
|
LDA TEMP2 ;Retrieve Color Value MSB
|
||||||
|
STA $9F23,X ;Read MSB from Data Port
|
||||||
|
RTS
|
||||||
|
|
||||||
|
;setidx(idx) - Set Vera Address to Palette Index
|
||||||
|
;Args: A = Index
|
||||||
|
;Returns: A = Bank + Auto-Increment
|
||||||
|
; Y,X = Address
|
||||||
|
SETIDX: ASL ;Multiply Index by 2
|
||||||
|
TAX ;and Set as LSB
|
||||||
|
LDA #$10 ;Get Palette Page
|
||||||
|
ADC #$00 ;Add Carry from Multiply
|
||||||
|
TAY ;and Set as MSB
|
||||||
|
|
||||||
|
|
||||||
|
;regadr(opts,addr) - Set Vera Address to Internal Register
|
||||||
|
;Args: Y,X = Register Address
|
||||||
|
;Returns: A= Bank + Auto-Increment
|
||||||
|
REGADR: LDA #$1F ;Set Bank and Auto-Increment
|
||||||
|
|
||||||
|
;setadr(opts,addr) - Set Vera Address
|
||||||
|
;Args: A = Bank + Auto-Increment
|
||||||
|
; Y,X = Address
|
||||||
|
SETADR: STX $9F20 ;Store Address LSB
|
||||||
|
STY $9F21 ;Store Address MSB
|
||||||
|
STA $9F22 ;Store Bank & Auto-Increment
|
||||||
|
RTS
|
20
x16/include/vera-old.h02
Normal file
20
x16/include/vera-old.h02
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/***************************************************
|
||||||
|
* vera.h02 - Commander X16 Routines for Vera chip *
|
||||||
|
***************************************************/
|
||||||
|
|
||||||
|
/* Convert R, G, and B Values *
|
||||||
|
* to Palette Color Value *
|
||||||
|
* Args: r - Red Value (0-15) *
|
||||||
|
* g - Green Value (0-15) *
|
||||||
|
* b - Blue Value (0-15) *
|
||||||
|
* Returns: int c - Color Value */
|
||||||
|
char rgbclr();
|
||||||
|
|
||||||
|
/* Convert Palette Color Value *
|
||||||
|
* to R, G, and B Values *
|
||||||
|
* Args: int c - Color Value *
|
||||||
|
* Returns: Red Value (0-15) *
|
||||||
|
* Green Value (0-15) *
|
||||||
|
* Blue Value (0-15) */
|
||||||
|
char clrrgb();
|
||||||
|
|
@ -1,14 +1,4 @@
|
|||||||
; C02 module vera.h02 assembly language subroutines
|
; C02 module vera.h02 assembly language subroutines
|
||||||
; Requires External Functions NYBCAT, NYBCUT
|
|
||||||
; and Variables TEMP0
|
|
||||||
|
|
||||||
;getadr() - Get Vera Address
|
|
||||||
;Args: A = Bank + Auto-Increment
|
|
||||||
; Y,X = Address
|
|
||||||
GETADR: LDX $9F20 ;Store Address LSB
|
|
||||||
LDY $9F21 ;Store Address MSB
|
|
||||||
LDA $9F22 ;Store Bank & Auto-Increment
|
|
||||||
RTS
|
|
||||||
|
|
||||||
;getvid() - Get Video Output Mode
|
;getvid() - Get Video Output Mode
|
||||||
;Returns: A = Video Mode
|
;Returns: A = Video Mode
|
||||||
@ -27,7 +17,7 @@ GETVIE: BCC GETVIF ;If Bit 7 is Set
|
|||||||
GETVIF: AND #$03 ;Isolate Bits 0-2 (Video Output Mode)
|
GETVIF: AND #$03 ;Isolate Bits 0-2 (Video Output Mode)
|
||||||
RTS
|
RTS
|
||||||
GETVIM: .DC $04 ;Chroma Disable Bit Mask
|
GETVIM: .DC $04 ;Chroma Disable Bit Mask
|
||||||
|
|
||||||
;getbdr() - Get Get Border Color
|
;getbdr() - Get Get Border Color
|
||||||
;Returns: A = Border Color Palette Index
|
;Returns: A = Border Color Palette Index
|
||||||
GETBDR: LDA #$03 ;Set Register Offset to Border Color
|
GETBDR: LDA #$03 ;Set Register Offset to Border Color
|
||||||
@ -39,35 +29,7 @@ GETBDR: LDA #$03 ;Set Register Offset to Border Color
|
|||||||
; X = Current Data Port
|
; X = Current Data Port
|
||||||
GETDCR: LDY #$00 ;Set MSB to Display Composer Page
|
GETDCR: LDY #$00 ;Set MSB to Display Composer Page
|
||||||
TAX ;Set LSB to Register Offset
|
TAX ;Set LSB to Register Offset
|
||||||
;and Execute GETREG
|
JMP GETREG ;and Execute GETREG
|
||||||
;getreg(&addr);
|
|
||||||
;Args: Y,X = Address
|
|
||||||
;Returns: A = Mode
|
|
||||||
; X = Current Data Port
|
|
||||||
GETREG: LDA #$0F ;Set Bank to Registers
|
|
||||||
GETBYT: JSR SETADR ;Set Vera Address
|
|
||||||
LDX $9F25 ;Get Current Data Port
|
|
||||||
LDA $9F23,X ;Read LSB from Data Port
|
|
||||||
RTS
|
|
||||||
|
|
||||||
;getmem(count, &addr) - Read Array From Vera Memory
|
|
||||||
;Args: A = Number of Bytes to Read
|
|
||||||
; Y,X = Address of Array to Read Into
|
|
||||||
;Requires: setadr()
|
|
||||||
;Sets: DSTLO,DSTHI = Address of Array
|
|
||||||
; TEMP0 = Number of Bytes to Read
|
|
||||||
;Affects: A
|
|
||||||
;Returns: Y = Number of Bytes Read
|
|
||||||
; X = Current Data Port
|
|
||||||
GETMEM: JSR SETDST ;Save Destination Address
|
|
||||||
GETMEA: STA TEMP0 ;Save Number of Bytes
|
|
||||||
LDY #0 ;Initialize Counter
|
|
||||||
LDX $9F25 ;Get Current Data Port
|
|
||||||
GETMEL: LDA $9F23,X ;Read Byte from Data Port
|
|
||||||
STA (DSTLO),Y ;Store in Memory
|
|
||||||
INY ;Increment Counter
|
|
||||||
CPY TEMP0 ;If Limit Not Reached
|
|
||||||
BNE GETMEL ; Loop
|
|
||||||
|
|
||||||
;getmod() - Get Layer 0/1 Mode
|
;getmod() - Get Layer 0/1 Mode
|
||||||
;Args: A = Layer (0/1)
|
;Args: A = Layer (0/1)
|
||||||
@ -107,7 +69,7 @@ GETLRC: LDX #0 ;Set Offset to Control Register
|
|||||||
;Returns: A = Contents of Register
|
;Returns: A = Contents of Register
|
||||||
; X = Current Data Port
|
; X = Current Data Port
|
||||||
GETLRR: JSR GETLRP ;Get Layer Page in Y
|
GETLRR: JSR GETLRP ;Get Layer Page in Y
|
||||||
BNE GETREG ;and Read Register Contents
|
JMP GETREG ;and Read Register Contents
|
||||||
|
|
||||||
;getlrp() - Get Layer 0/1 Register Page
|
;getlrp() - Get Layer 0/1 Register Page
|
||||||
;Args: A = Layer (0/1)
|
;Args: A = Layer (0/1)
|
||||||
@ -146,7 +108,7 @@ GETCHD: JSR SETDST ;Store Address in Destination Pointer
|
|||||||
ORA #$10 ;Set Auto-Increment to 1
|
ORA #$10 ;Set Auto-Increment to 1
|
||||||
JSR SETADR ;and Set Vera Address
|
JSR SETADR ;and Set Vera Address
|
||||||
LDA #8 ;Set Byte Count to 8
|
LDA #8 ;Set Byte Count to 8
|
||||||
BNE GETMEA ;and Read Bytes into Array
|
JMP GETMEA ;and Read Bytes into Array
|
||||||
|
|
||||||
;gettba() - Get Layer 0/1 Tile Base Address
|
;gettba() - Get Layer 0/1 Tile Base Address
|
||||||
;Args: A = Layer (0/1)
|
;Args: A = Layer (0/1)
|
||||||
@ -206,8 +168,7 @@ GETMBS: LDX #2 ;Set Register Offset
|
|||||||
;Returns: A,X = Integer LSB
|
;Returns: A,X = Integer LSB
|
||||||
; Y = Integer LSB
|
; Y = Integer LSB
|
||||||
GETLRI: JSR GETLRP ;Get Layer Page in Y
|
GETLRI: JSR GETLRP ;Get Layer Page in Y
|
||||||
BNE GETREI ;and Read Register Contents
|
JMP GETREI ;and Read Register Contents
|
||||||
|
|
||||||
|
|
||||||
;mapsiz() - Convert Map Size Specifier to Pixels
|
;mapsiz() - Convert Map Size Specifier to Pixels
|
||||||
;Args: A = Map Size Specifier
|
;Args: A = Map Size Specifier
|
||||||
@ -302,7 +263,6 @@ GETIQL: LDA #9 ;Set Register Offset to Interrupt Line
|
|||||||
;Returns: A,X = Horizontal Scale
|
;Returns: A,X = Horizontal Scale
|
||||||
; Y = Vertical Scale
|
; Y = Vertical Scale
|
||||||
GETSCL: LDA #1 ;Set Register Offset to HSCALE,VSCALE
|
GETSCL: LDA #1 ;Set Register Offset to HSCALE,VSCALE
|
||||||
.DC $2C ;Skip to SETDCI (BIT Absolute)
|
|
||||||
|
|
||||||
;getdci() - Get Display Composer Register Pair
|
;getdci() - Get Display Composer Register Pair
|
||||||
;Args: A = Register Offset
|
;Args: A = Register Offset
|
||||||
@ -311,26 +271,7 @@ GETSCL: LDA #1 ;Set Register Offset to HSCALE,VSCALE
|
|||||||
; Y = Integer LSB
|
; Y = Integer LSB
|
||||||
GETDCI: LDY #$00 ;Set MSB to Display Composer Page
|
GETDCI: LDY #$00 ;Set MSB to Display Composer Page
|
||||||
TAX ;Set LSB to Register Offset
|
TAX ;Set LSB to Register Offset
|
||||||
;and Execute GETREG
|
JMP GETREI ;Get Vera Register Pair
|
||||||
|
|
||||||
;getrei(addr); Read Vera Register Pair
|
|
||||||
;Args: Y,X = Address
|
|
||||||
;Returns: A,X = Integer LSB
|
|
||||||
; Y = Integer LSB
|
|
||||||
GETREI: LDA #$0F ;Set Bank to Registers
|
|
||||||
|
|
||||||
;getint(addr); Read Integer from Vera Memory
|
|
||||||
;Args: A = Bank
|
|
||||||
; Y,X = Address
|
|
||||||
;Returns: A,X = Integer LSB
|
|
||||||
; Y = Integer LSB
|
|
||||||
GETINT: ORA #$10 ;Set Auto-Increment to 1
|
|
||||||
JSR SETADR ;Set Vera Address
|
|
||||||
LDX $9F25 ;Get Current Data Port
|
|
||||||
LDA $9F23,X ;Read LSB from Data Port
|
|
||||||
LDY $9F23,X ;Read MSB Data Port
|
|
||||||
TAX ;Copy LSB to X
|
|
||||||
RTS
|
|
||||||
|
|
||||||
;setvsp() - Set Horizontal Stop
|
;setvsp() - Set Horizontal Stop
|
||||||
;Args: Y,X = Horizontal Stop
|
;Args: Y,X = Horizontal Stop
|
||||||
@ -427,29 +368,7 @@ SETBDR: LDX #3 ;Set Register Offset to Border Color
|
|||||||
SETDCR: TAX ;Set LSB to Register Offset
|
SETDCR: TAX ;Set LSB to Register Offset
|
||||||
TYA ;Move Write Value to Accumulator
|
TYA ;Move Write Value to Accumulator
|
||||||
SETDCX: LDY #$00 ;Set MSB to Display Composer Page
|
SETDCX: LDY #$00 ;Set MSB to Display Composer Page
|
||||||
|
JMP SETREG ;Write to Register
|
||||||
;setreg(addr) - Set Register
|
|
||||||
;Args: A = Value to Write
|
|
||||||
; Y,X = Address
|
|
||||||
;Sets: TEMP0 = Value to Write
|
|
||||||
;Affects: Y
|
|
||||||
;Returns: A = Value Written
|
|
||||||
; X = Current Data Port
|
|
||||||
SETREG: STA TEMP0 ;Save Value to Write
|
|
||||||
SETREH: LDA #$0F ;Set Bank, Auto-Increment
|
|
||||||
|
|
||||||
;setbyt(addr) - Write Byte to Vera Memory
|
|
||||||
;Args: A = Bank
|
|
||||||
; Y,X = Address
|
|
||||||
;Uses: TEMP0 = Value to Write
|
|
||||||
;Affects: Y
|
|
||||||
;Returns: A = Value Written
|
|
||||||
; X = Current Data Port
|
|
||||||
SETBYT: JSR SETADR ;Set Vera Address
|
|
||||||
LDA TEMP0 ;Retrieve Value to Write
|
|
||||||
LDX $9F25 ;Get Current Data Port
|
|
||||||
STA $9F23,X ;Write Value to Data Port
|
|
||||||
RTS
|
|
||||||
|
|
||||||
;settbs() - Set Layer 0/1 Map Base
|
;settbs() - Set Layer 0/1 Map Base
|
||||||
;Args: A = Layer (0/1)
|
;Args: A = Layer (0/1)
|
||||||
@ -492,7 +411,7 @@ SETHSC: JSR SAVRXY ;Store Horizontal Scroll in TEMP1,TEMP2
|
|||||||
;Uses: TEMP1,TEMP2 = Integer Value
|
;Uses: TEMP1,TEMP2 = Integer Value
|
||||||
;Affecta: A,Y,X
|
;Affecta: A,Y,X
|
||||||
SETLRI: JSR GETLRP ;Get Layer Page in Y
|
SETLRI: JSR GETLRP ;Get Layer Page in Y
|
||||||
BNE SETREI ;and Write Integer to Register
|
JMP SETREI ;and Write Integer to Register
|
||||||
|
|
||||||
;setiql() - Set IRQ Line
|
;setiql() - Set IRQ Line
|
||||||
;Args: Y,X = IRQ Line Number`
|
;Args: Y,X = IRQ Line Number`
|
||||||
@ -515,49 +434,9 @@ SETSCL: LDX #1 ;Set Register Offset to HSCALE,VSCALE
|
|||||||
;Returns: X = Current Data Port
|
;Returns: X = Current Data Port
|
||||||
SETDCP: STA TEMP1 ;Store First Value as LSB
|
SETDCP: STA TEMP1 ;Store First Value as LSB
|
||||||
STY TEMP2 ;Store Second Value as MSB
|
STY TEMP2 ;Store Second Value as MSB
|
||||||
LDY #$00 ;Set MSB to Display Composer Page
|
LDY #$00 ;Set MSB to Display Composer Page
|
||||||
|
JMP SETREI ;Set Register to Integer
|
||||||
|
|
||||||
;setrei(addr); Set Vera Register to Integer
|
|
||||||
;Args: Y,X = Address
|
|
||||||
;Uses: TEMP1,TEMP2 = Integer Value
|
|
||||||
;Affects: A,Y
|
|
||||||
;Returns: X = Current Data Port
|
|
||||||
SETREI: LDA #$0F ;Set Bank to Registers
|
|
||||||
|
|
||||||
;setint(addr); Write Integer to Vera Memory
|
|
||||||
;Args: A = Bank
|
|
||||||
; Y,X = Address
|
|
||||||
;Uses: TEMP1,TEMP2 = Integer Value
|
|
||||||
;Affects: A,Y
|
|
||||||
;Returns: X = Current Data Port
|
|
||||||
SETINT: ORA #$10 ;Set Auto-Increment to 1
|
|
||||||
JSR SETADR ;Set Vera Address
|
|
||||||
LDX $9F25 ;Get Current Data Port
|
|
||||||
LDA TEMP1 ;Get LSB
|
|
||||||
STA $9F23,X ;Write to Data Port
|
|
||||||
LDA TEMP2 ;Get MSB
|
|
||||||
STA $9F23,X ;Write to Data Port
|
|
||||||
RTS
|
|
||||||
|
|
||||||
;setmem(count, &addr) - Write Array to Vera Memory
|
|
||||||
;Args: A = Number of Bytes to Write
|
|
||||||
; Y,X = Address of Array to Write From
|
|
||||||
;Requires: setadr()
|
|
||||||
;Sets: SRCLO,SRCHI = Address of Array
|
|
||||||
; TEMP0 = Number of Bytes to Write
|
|
||||||
;Affects: A
|
|
||||||
;Returns: Y = Number of Bytes Written
|
|
||||||
; X = Current Data Port
|
|
||||||
SETMEM: STA TEMP0 ;Save Number of Bytes
|
|
||||||
JSR SETSRC ;Save Destination Address
|
|
||||||
LDX $9F25 ;Get Current Data Port
|
|
||||||
LDY #0 ;Initialize Counter
|
|
||||||
SETMEL: LDA (SRCLO),Y ;Read Byte from Array
|
|
||||||
STA $9F23,X ;Write Byte to Data Port
|
|
||||||
INY ;Increment Counter
|
|
||||||
CPY TEMP0 ;If Limit Not Reached
|
|
||||||
BNE SETMEL ; Loop
|
|
||||||
RTS
|
|
||||||
|
|
||||||
;rgbclr(r,g,b) - Convert RGB Values to Palette Color
|
;rgbclr(r,g,b) - Convert RGB Values to Palette Color
|
||||||
;Args: A = Red Value (0-15)
|
;Args: A = Red Value (0-15)
|
||||||
@ -626,17 +505,4 @@ SETIDX: ASL ;Multiply Index by 2
|
|||||||
LDA #$10 ;Get Palette Page
|
LDA #$10 ;Get Palette Page
|
||||||
ADC #$00 ;Add Carry from Multiply
|
ADC #$00 ;Add Carry from Multiply
|
||||||
TAY ;and Set as MSB
|
TAY ;and Set as MSB
|
||||||
|
JMP REGADR ;and Set Address to Register
|
||||||
|
|
||||||
;regadr(opts,addr) - Set Vera Address to Internal Register
|
|
||||||
;Args: Y,X = Register Address
|
|
||||||
;Returns: A= Bank + Auto-Increment
|
|
||||||
REGADR: LDA #$1F ;Set Bank and Auto-Increment
|
|
||||||
|
|
||||||
;setadr(opts,addr) - Set Vera Address
|
|
||||||
;Args: A = Bank + Auto-Increment
|
|
||||||
; Y,X = Address
|
|
||||||
SETADR: STX $9F20 ;Store Address LSB
|
|
||||||
STY $9F21 ;Store Address MSB
|
|
||||||
STA $9F22 ;Store Bank & Auto-Increment
|
|
||||||
RTS
|
|
||||||
|
@ -2,14 +2,6 @@
|
|||||||
* vera.h02 - Commander X16 Routines for Vera chip *
|
* vera.h02 - Commander X16 Routines for Vera chip *
|
||||||
***************************************************/
|
***************************************************/
|
||||||
|
|
||||||
/* Convert R, G, and B Values *
|
|
||||||
* to Palette Color Value *
|
|
||||||
* Args: r - Red Value (0-15) *
|
|
||||||
* g - Green Value (0-15) *
|
|
||||||
* b - Blue Value (0-15) *
|
|
||||||
* Returns: int c - Color Value */
|
|
||||||
char rgbclr();
|
|
||||||
|
|
||||||
/* Convert Palette Color Value *
|
/* Convert Palette Color Value *
|
||||||
* to R, G, and B Values *
|
* to R, G, and B Values *
|
||||||
* Args: int c - Color Value *
|
* Args: int c - Color Value *
|
||||||
@ -18,3 +10,33 @@ char rgbclr();
|
|||||||
* Blue Value (0-15) */
|
* Blue Value (0-15) */
|
||||||
char clrrgb();
|
char clrrgb();
|
||||||
|
|
||||||
|
/* Read Color Value from Palette *
|
||||||
|
* Args: char i - Palette Index *
|
||||||
|
* Returns: int c - Color Value */
|
||||||
|
char getclr();
|
||||||
|
|
||||||
|
/* Read Display Controller Register *
|
||||||
|
* Args: char r - Register Offset *
|
||||||
|
* Returns: char v - Register Value */
|
||||||
|
char getdcr();
|
||||||
|
|
||||||
|
/* Read Video Output Mode *
|
||||||
|
* Returns: m - Output Mode *
|
||||||
|
* c - Chroma Disabled *
|
||||||
|
* f - Current Field */
|
||||||
|
char getvid();
|
||||||
|
|
||||||
|
/* Convert R, G, and B Values *
|
||||||
|
* to Palette Color Value *
|
||||||
|
* Args: r - Red Value (0-15) *
|
||||||
|
* g - Green Value (0-15) *
|
||||||
|
* b - Blue Value (0-15) *
|
||||||
|
* Returns: int c - Color Value */
|
||||||
|
char rgbclr();
|
||||||
|
|
||||||
|
/* Write Color Value to Palette *
|
||||||
|
* Args: i - Index into Palette *
|
||||||
|
* int c - Color Value *
|
||||||
|
* Returns: int d = Entry Address */
|
||||||
|
char setclr();
|
||||||
|
|
||||||
|
153
x16/include/veramem.a02
Normal file
153
x16/include/veramem.a02
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
; Vera Memory Access Assembly Language Routines for C02
|
||||||
|
; Requires External Routines RESRXY, SETDST, and SETSRC
|
||||||
|
; and External Variables TEMP0 and TEMP1
|
||||||
|
|
||||||
|
;getadr() - Get Vera Address
|
||||||
|
;Args: A = Bank + Auto-Increment
|
||||||
|
; Y,X = Address
|
||||||
|
GETADR: LDX $9F20 ;Store Address LSB
|
||||||
|
LDY $9F21 ;Store Address MSB
|
||||||
|
LDA $9F22 ;Store Bank & Auto-Increment
|
||||||
|
RTS
|
||||||
|
|
||||||
|
;getreg(&addr) - Read Vera Internal Register
|
||||||
|
;Args: Y,X = Address
|
||||||
|
;Returns: A = Mode
|
||||||
|
; X = Current Data Port
|
||||||
|
GETREG: LDA #$0F ;Set Bank to Registers
|
||||||
|
;and Execute GETBYT
|
||||||
|
|
||||||
|
;getbyt(&addr);
|
||||||
|
;Args: A = Bank
|
||||||
|
; Y,X = Address
|
||||||
|
;Affects: Y
|
||||||
|
;Returns: A = Contents of Memory
|
||||||
|
; X = Current Data Port
|
||||||
|
GETBYT: JSR SETADR ;Set Vera Address
|
||||||
|
LDX $9F25 ;Get Current Data Port
|
||||||
|
LDA $9F23,X ;Read LSB from Data Port
|
||||||
|
RTS
|
||||||
|
|
||||||
|
;getmem(count, &addr) - Read Array From Vera Memory
|
||||||
|
;Args: A = Number of Bytes to Read
|
||||||
|
; Y,X = Address of Array to Read Into
|
||||||
|
;Requires: setadr()
|
||||||
|
;Sets: DSTLO,DSTHI = Address of Array
|
||||||
|
; TEMP0 = Number of Bytes to Read
|
||||||
|
;Affects: A
|
||||||
|
;Returns: Y = Number of Bytes Read
|
||||||
|
; X = Current Data Port
|
||||||
|
GETMEM: JSR SETDST ;Save Destination Address
|
||||||
|
GETMEA: STA TEMP0 ;Save Number of Bytes
|
||||||
|
LDY #0 ;Initialize Counter
|
||||||
|
LDX $9F25 ;Get Current Data Port
|
||||||
|
GETMEL: LDA $9F23,X ;Read Byte from Data Port
|
||||||
|
STA (DSTLO),Y ;Store in Memory
|
||||||
|
INY ;Increment Counter
|
||||||
|
CPY TEMP0 ;If Limit Not Reached
|
||||||
|
BNE GETMEL ; Loop
|
||||||
|
|
||||||
|
;getrei(addr); Read Vera Register Pair
|
||||||
|
;Args: Y,X = Address
|
||||||
|
;Returns: A,X = Integer LSB
|
||||||
|
; Y = Integer LSB
|
||||||
|
GETREI: LDA #$0F ;Set Bank to Registers
|
||||||
|
|
||||||
|
;getint(addr); Read Integer from Vera Memory
|
||||||
|
;Args: A = Bank
|
||||||
|
; Y,X = Address
|
||||||
|
;Returns: A,X = Integer LSB
|
||||||
|
; Y = Integer LSB
|
||||||
|
GETINT: AND #$0F ;Set Auto-Increment to 1
|
||||||
|
ORA #$10
|
||||||
|
JSR SETADR ;Set Vera Address
|
||||||
|
LDX $9F25 ;Get Current Data Port
|
||||||
|
LDA $9F23,X ;Read LSB from Data Port
|
||||||
|
LDY $9F23,X ;Read MSB Data Port
|
||||||
|
TAX ;Copy LSB to X
|
||||||
|
RTS
|
||||||
|
|
||||||
|
;regadr(opts,addr) - Set Vera Address to Internal Register
|
||||||
|
;Args: Y,X = Register Address
|
||||||
|
;Returns: A= Bank + Auto-Increment
|
||||||
|
REGADR: LDA #$1F ;Set Bank and Auto-Increment
|
||||||
|
|
||||||
|
;setadr(opts,addr) - Set Vera Address
|
||||||
|
;Args: A = Bank + Auto-Increment
|
||||||
|
; Y,X = Address
|
||||||
|
SETADR: STX $9F20 ;Store Address LSB
|
||||||
|
STY $9F21 ;Store Address MSB
|
||||||
|
STA $9F22 ;Store Bank & Auto-Increment
|
||||||
|
RTS
|
||||||
|
|
||||||
|
;setreg(addr) - Set Register
|
||||||
|
;Args: A = Value to Write
|
||||||
|
; Y,X = Address
|
||||||
|
;Sets: TEMP0 = Value to Write
|
||||||
|
;Affects: Y
|
||||||
|
;Returns: A = Value Written
|
||||||
|
; X = Current Data Port
|
||||||
|
SETREG: STA TEMP0 ;Save Value to Write
|
||||||
|
SETREH: LDA #$0F ;Set Bank, Auto-Increment
|
||||||
|
|
||||||
|
;setbyt(addr) - Write Byte to Vera Memory
|
||||||
|
;Args: A = Bank
|
||||||
|
; Y,X = Address
|
||||||
|
;Uses: TEMP0 = Value to Write
|
||||||
|
;Affects: Y
|
||||||
|
;Returns: A = Value Written
|
||||||
|
; X = Current Data Port
|
||||||
|
SETBYT: JSR SETADR ;Set Vera Address
|
||||||
|
LDA TEMP0 ;Retrieve Value to Write
|
||||||
|
LDX $9F25 ;Get Current Data Port
|
||||||
|
STA $9F23,X ;Write Value to Data Port
|
||||||
|
RTS
|
||||||
|
|
||||||
|
;setrei(addr) - Set Vera Register to Integer
|
||||||
|
;Args: Y,X = Address
|
||||||
|
;Uses: TEMP1,TEMP2 = Integer Value
|
||||||
|
;Affects: A,Y
|
||||||
|
;Returns: X = Current Data Port
|
||||||
|
SETREI: LDA #$0F ;Set Bank to Registers
|
||||||
|
|
||||||
|
;setina(addr) - Write Integer to Vera Address
|
||||||
|
;Args: A = Bank
|
||||||
|
; Y,X = Address
|
||||||
|
;Uses: TEMP1,TEMP2 = Integer Value
|
||||||
|
;Affects: A,Y
|
||||||
|
;Returns: X = Current Data Port
|
||||||
|
SETINA: ORA #$10 ;Set Auto-Increment to 1
|
||||||
|
JSR SETADR ;Set Vera Address
|
||||||
|
JSR RESRXY ;Restore Integer into Y,X
|
||||||
|
|
||||||
|
;setint(addr) - Write Integer to Vera Memory
|
||||||
|
;Args: Y,X = Integer to Write
|
||||||
|
;Requires: setadr();
|
||||||
|
;Affects: A,Y
|
||||||
|
;Returns: X = Current Data Port
|
||||||
|
SETINT: TXA ;Copy LSB to Accumlator
|
||||||
|
LDX $9F25 ;Get Current Data Port
|
||||||
|
STA $9F23,X ;Write to Data Port
|
||||||
|
TYA ;Copy MSB to Accumlator
|
||||||
|
STA $9F23,X ;Write to Data Port
|
||||||
|
RTS
|
||||||
|
|
||||||
|
;setmem(count, &addr) - Write Array to Vera Memory
|
||||||
|
;Args: A = Number of Bytes to Write
|
||||||
|
; Y,X = Address of Array to Write From
|
||||||
|
;Requires: setadr()
|
||||||
|
;Sets: SRCLO,SRCHI = Address of Array
|
||||||
|
; TEMP0 = Number of Bytes to Write
|
||||||
|
;Affects: A
|
||||||
|
;Returns: Y = Number of Bytes Written
|
||||||
|
; X = Current Data Port
|
||||||
|
SETMEM: STA TEMP0 ;Save Number of Bytes
|
||||||
|
JSR SETSRC ;Save Destination Address
|
||||||
|
LDX $9F25 ;Get Current Data Port
|
||||||
|
LDY #0 ;Initialize Counter
|
||||||
|
SETMEL: LDA (SRCLO),Y ;Read Byte from Array
|
||||||
|
STA $9F23,X ;Write Byte to Data Port
|
||||||
|
INY ;Increment Counter
|
||||||
|
CPY TEMP0 ;If Limit Not Reached
|
||||||
|
BNE SETMEL ; Loop
|
||||||
|
RTS
|
54
x16/include/veramem.h02
Normal file
54
x16/include/veramem.h02
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/*********************************************
|
||||||
|
* veramem.h02 - Memory Access Functions for *
|
||||||
|
* Commander X16 VERA Chip *
|
||||||
|
*********************************************/
|
||||||
|
|
||||||
|
/* Get Vera Memory Address *
|
||||||
|
* Returns: char bank - Address Bits 16-19 *
|
||||||
|
* int addr - Address Bits 0-15 */
|
||||||
|
char getadr();
|
||||||
|
|
||||||
|
/* Read Byte from Vera Memory *
|
||||||
|
* Args: char bank - Address Bits 16-19 *
|
||||||
|
* int addr - Address Bits 0-15 *
|
||||||
|
* Returns: char byte - Contents of Memory */
|
||||||
|
char getbyt();
|
||||||
|
|
||||||
|
/* Read Integer from Vera Memory *
|
||||||
|
* Args: char bank - Address Bits 16-19 *
|
||||||
|
* int addr - Address Bits 0-15 *
|
||||||
|
* Returns: int byte - Contents of Memory */
|
||||||
|
char getint();
|
||||||
|
|
||||||
|
/* Read from Vera Memory into Array *
|
||||||
|
* Args: char opts - Bank | Auto-Increment *
|
||||||
|
* int addr - Address Bits 0-15 *
|
||||||
|
* Returns: char count - Bytes Written */
|
||||||
|
char getmem();
|
||||||
|
|
||||||
|
/* Read Vera Internal Register Pair *
|
||||||
|
* Args: int addr - Register Address *
|
||||||
|
* Returns: char byte - Register LSB *
|
||||||
|
* int word - Register Contents */
|
||||||
|
char getrei();
|
||||||
|
|
||||||
|
/* Set Vera Memory Address *
|
||||||
|
* Args: char opts - Bank | Auto-Increment *
|
||||||
|
* int addr - Address *
|
||||||
|
char setadr();
|
||||||
|
|
||||||
|
/* Write Byte to Vera Memory *
|
||||||
|
* Args: char byte - Byte to Write *
|
||||||
|
* Requires: setadr(bank,addr) */
|
||||||
|
char setbyt();
|
||||||
|
|
||||||
|
/* Write Integer to Vera Memory *
|
||||||
|
* Args: int word - Integer to Write *
|
||||||
|
* Requires: setadr(bank,addr) */
|
||||||
|
char setint();
|
||||||
|
|
||||||
|
/* Write from Array to Vera Memory *
|
||||||
|
* Args: int word - Integer to Write *
|
||||||
|
* Requires: setadr(bank,addr) *
|
||||||
|
* Returns: char count - Bytes Written */
|
||||||
|
char setmem();
|
@ -1,5 +1,5 @@
|
|||||||
/*****************************************************
|
/*****************************************************
|
||||||
* HELLO - Test/Demo program for C02 Standard Header *
|
* TESTVERA *
|
||||||
* Prints "HELLO WORLD" and exits *
|
* Prints "HELLO WORLD" and exits *
|
||||||
*****************************************************/
|
*****************************************************/
|
||||||
|
|
||||||
@ -11,6 +11,7 @@
|
|||||||
#include <stdiox.h02>
|
#include <stdiox.h02>
|
||||||
#include <memory.h02>
|
#include <memory.h02>
|
||||||
#include <nybble.h02>
|
#include <nybble.h02>
|
||||||
|
#include "include/veramem.h02"
|
||||||
#include "include/vera.h02"
|
#include "include/vera.h02"
|
||||||
|
|
||||||
const char abcdef = {1,2,3,4,5,6};
|
const char abcdef = {1,2,3,4,5,6};
|
||||||
@ -59,13 +60,6 @@ void prtadr() {
|
|||||||
|
|
||||||
void prtayx(aa,yy,xx) {prhex(aa); prhex(yy); prhex(xx); putspc(); putspc();}
|
void prtayx(aa,yy,xx) {prhex(aa); prhex(yy); prhex(xx); putspc(); putspc();}
|
||||||
|
|
||||||
void prthvs() {
|
|
||||||
setdst(hstart);printf("HSTART=%w, "); //$0000
|
|
||||||
setdst(hstop);printf("HSTOP=%w, "); //$0280 (640)
|
|
||||||
setdst(vstart);printf("VSTART=%w, "); //$0000
|
|
||||||
setdst(vstop);printf("VSTOP=%w%n"); //$01E0 (480)
|
|
||||||
}
|
|
||||||
|
|
||||||
void prttmp() {
|
void prttmp() {
|
||||||
printf(temp0, "TEMP0=$%h%n");
|
printf(temp0, "TEMP0=$%h%n");
|
||||||
printf(temp1, "TEMP1=$%h%n");
|
printf(temp1, "TEMP1=$%h%n");
|
||||||
@ -136,7 +130,7 @@ main:
|
|||||||
do {
|
do {
|
||||||
setscl(i,j);
|
setscl(i,j);
|
||||||
hscale,vscale = getscl();
|
hscale,vscale = getscl();
|
||||||
//prtscl();
|
//prtscl;
|
||||||
if (hscale<>i or vscale<>j) xerror("ERROR IN GETSCL()/SETSCL()");
|
if (hscale<>i or vscale<>j) xerror("ERROR IN GETSCL()/SETSCL()");
|
||||||
j<<;
|
j<<;
|
||||||
} while (j);
|
} while (j);
|
||||||
|
Loading…
Reference in New Issue
Block a user