mirror of
https://github.com/RevCurtisP/C02.git
synced 2025-02-19 19:31:04 +00:00
Added Functions for Layer Registers
This commit is contained in:
parent
303263e915
commit
3b74138826
@ -2,6 +2,14 @@
|
|||||||
; Requires External Functions NYBCAT, NYBCUT
|
; Requires External Functions NYBCAT, NYBCUT
|
||||||
; and Variables TEMP0
|
; 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
|
||||||
; Y = Chroma Disabled
|
; Y = Chroma Disabled
|
||||||
@ -32,7 +40,7 @@ GETBDR: LDA #$03 ;Set Register Offset to Border Color
|
|||||||
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
|
;and Execute GETREG
|
||||||
;getreg(addr);
|
;getreg(&addr);
|
||||||
;Args: Y,X = Address
|
;Args: Y,X = Address
|
||||||
;Returns: A = Mode
|
;Returns: A = Mode
|
||||||
; X = Current Data Port
|
; X = Current Data Port
|
||||||
@ -42,6 +50,194 @@ GETBYT: JSR SETADR ;Set Vera Address
|
|||||||
LDA $9F23,X ;Read LSB from Data Port
|
LDA $9F23,X ;Read LSB from Data Port
|
||||||
RTS
|
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
|
;getvsp() - Get Vertical Stop
|
||||||
;Affects: A
|
;Affects: A
|
||||||
;Returns: Y,X = Vertical Stop
|
;Returns: Y,X = Vertical Stop
|
||||||
@ -99,13 +295,14 @@ GETHVS: JSR GETDCR ;Read LSB from Register
|
|||||||
;getiql() - Get Interrupt Line
|
;getiql() - Get Interrupt Line
|
||||||
;Affects: A
|
;Affects: A
|
||||||
;Returns: Y,X = Interrupt Line#
|
;Returns: Y,X = Interrupt Line#
|
||||||
GETIQL: LDA #9 ;Set Register Offset to HSCALE,VSCALE
|
GETIQL: LDA #9 ;Set Register Offset to Interrupt Line
|
||||||
.DC $2C ;Skip to SETDCX (BIT Absolute)
|
.DC $2C ;Skip to SETDCX (BIT Absolute)
|
||||||
|
|
||||||
;getscl() - Get Horizontal and Vertical Scale
|
;getscl() - Get Horizontal and Vertical Scale
|
||||||
;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
|
||||||
@ -135,31 +332,64 @@ GETINT: ORA #$10 ;Set Auto-Increment to 1
|
|||||||
TAX ;Copy LSB to X
|
TAX ;Copy LSB to X
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
;sethsr() - Get Horizontal Start
|
;setvsp() - Set Horizontal Stop
|
||||||
;Affects: A
|
;Args: Y,X = Horizontal Stop
|
||||||
;Returns: Y,X = Horizontal Start
|
;Affects: A,X,Y
|
||||||
SETHSR: TYA ;Convert MSB to High Bits
|
SETVSP: TYA ;Convert MSB to High Bit
|
||||||
AND #$03
|
AND #$01
|
||||||
ASL
|
ASL
|
||||||
ASL
|
ASL
|
||||||
STA TEMP0 ;and Save
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
STA TEMP1 ;and Save
|
||||||
TXA ;Copy LSB to Accumlator
|
TXA ;Copy LSB to Accumlator
|
||||||
LDX #5 ;Set Register Offset to Horizontal Start
|
LDX #7 ;Set Register Offset to Horizontal Start
|
||||||
JSR SETHVS ;Write LSB and Get High Bits
|
LDY #$DF ;Set High Bits Mask
|
||||||
AND #$F3 ;Mask Start Stop High
|
|
||||||
JMP SETHST ;OR in High Bits and Write Back
|
JMP SETHST ;OR in High Bits and Write Back
|
||||||
|
|
||||||
;sethsr() - Get Horizontal Start
|
;setvsr() - Set Horizontal Start
|
||||||
;Affects: A
|
;Args: Y,X = Horizontal Start
|
||||||
;Returns: 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
|
SETHSR: TYA ;Convert MSB to High Bits
|
||||||
AND #$03
|
AND #$03
|
||||||
STA TEMP0 ;and Save
|
STA TEMP1 ;and Save
|
||||||
TXA ;Copy LSB to Accumlator
|
TXA ;Copy LSB to Accumlator
|
||||||
LDX #4 ;Set Register Offset to Horizontal Start
|
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
|
JSR SETHVS ;Write LSB and Get High Bits
|
||||||
AND #$FC ;Mask Start Stop High
|
AND TEMP2 ;Mask Start Stop High
|
||||||
SETHST: ORA TEMP0 ;OR in High Bits
|
ORA TEMP1 ;OR in High Bits
|
||||||
STA $9F23,X ;and Write back to Register
|
STA $9F23,X ;and Write back to Register
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
@ -221,6 +451,48 @@ SETBYT: JSR SETADR ;Set Vera Address
|
|||||||
STA $9F23,X ;Write Value to Data Port
|
STA $9F23,X ;Write Value to Data Port
|
||||||
RTS
|
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
|
;setiql() - Set IRQ Line
|
||||||
;Args: Y,X = IRQ Line Number`
|
;Args: Y,X = IRQ Line Number`
|
||||||
@ -267,6 +539,25 @@ SETINT: ORA #$10 ;Set Auto-Increment to 1
|
|||||||
STA $9F23,X ;Write to Data Port
|
STA $9F23,X ;Write to Data Port
|
||||||
RTS
|
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)
|
||||||
|
@ -2,30 +2,6 @@
|
|||||||
* vera.h02 - Commander X16 Routines for Vera chip *
|
* vera.h02 - Commander X16 Routines for Vera chip *
|
||||||
***************************************************/
|
***************************************************/
|
||||||
|
|
||||||
/* 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();
|
|
||||||
|
|
||||||
/* 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 *
|
/* Convert R, G, and B Values *
|
||||||
* to Palette Color Value *
|
* to Palette Color Value *
|
||||||
* Args: r - Red Value (0-15) *
|
* Args: r - Red Value (0-15) *
|
||||||
@ -34,9 +10,11 @@ char getvid();
|
|||||||
* Returns: int c - Color Value */
|
* Returns: int c - Color Value */
|
||||||
char rgbclr();
|
char rgbclr();
|
||||||
|
|
||||||
/* Write Color Value to Palette *
|
/* Convert Palette Color Value *
|
||||||
* Args: i - Index into Palette *
|
* to R, G, and B Values *
|
||||||
* int c - Color Value *
|
* Args: int c - Color Value *
|
||||||
* Returns: int d = Entry Address */
|
* Returns: Red Value (0-15) *
|
||||||
char setclr();
|
* Green Value (0-15) *
|
||||||
|
* Blue Value (0-15) */
|
||||||
|
char clrrgb();
|
||||||
|
|
||||||
|
157
x16/testvera.c02
157
x16/testvera.c02
@ -9,24 +9,52 @@
|
|||||||
#include <intlib.h02>
|
#include <intlib.h02>
|
||||||
#include <stdio.h02>
|
#include <stdio.h02>
|
||||||
#include <stdiox.h02>
|
#include <stdiox.h02>
|
||||||
|
#include <memory.h02>
|
||||||
#include <nybble.h02>
|
#include <nybble.h02>
|
||||||
#include "include/vera.h02"
|
#include "include/vera.h02"
|
||||||
|
|
||||||
|
const char abcdef = {1,2,3,4,5,6};
|
||||||
|
char buffer[255]; //Buffer for getmem
|
||||||
|
|
||||||
char hscale,vscale; //Video Scaling
|
char hscale,vscale; //Video Scaling
|
||||||
|
char hrzvrt[5]; //Horizontal and Vertical Register Contents
|
||||||
char index; //Color Palette Index
|
char index; //Color Palette Index
|
||||||
char mode,mono,field; //Video Output Mode, Monochrome Flag, Current Field
|
char mode,mono,field; //Video Output Mode, Monochrome Flag, Current Field
|
||||||
char red,green,blue; //Color Components
|
char red,green,blue; //Color Components
|
||||||
|
char enabld; //Layer Enabled
|
||||||
char i,j,k,l;
|
char i,j,k,l;
|
||||||
|
|
||||||
int c,d,s;
|
int color,colour;
|
||||||
int hstart,hstop; //Horizontal Start and Stop
|
int hstart,hstop; //Horizontal Start and Stop
|
||||||
int vstart,vstop; //Vertical Start and Stop
|
int vstart,vstop; //Vertical Start and Stop
|
||||||
int irqlin; //IRQ Line#
|
int irqlin; //IRQ Line#
|
||||||
|
|
||||||
|
/* Layer 0/1 */
|
||||||
|
|
||||||
|
char layer; //Layer Number
|
||||||
|
char layer0[9]; //Layer 0 Register Contents
|
||||||
|
char layer1[9]; //Layer 1 Register Contents
|
||||||
|
int mbase0,mbase1; //Map Base, Layer 0 and 1
|
||||||
|
int tbase0,tbase1; //Tile Base, Layer 0 and 1
|
||||||
|
int mbaddr,tbaddr; //Map and Tile Base Address
|
||||||
|
int hscrl0,hscrl1; //Horizontal Scroll, Layer 0 and 1
|
||||||
|
int vscrl0,vscrl1; //Vertical Scroll, Layer 0 and 1
|
||||||
|
|
||||||
char aa,xx,yy;
|
char aa,xx,yy;
|
||||||
|
|
||||||
|
void failed() {
|
||||||
|
putln(" FAILED");
|
||||||
|
}
|
||||||
|
|
||||||
void passed() {
|
void passed() {
|
||||||
putln(" PASSED");
|
putln(" PASSED");
|
||||||
newlin();
|
//newlin();
|
||||||
|
}
|
||||||
|
|
||||||
|
void prtadr() {
|
||||||
|
aa, yy, xx = getadr();
|
||||||
|
puts("ADDRESS=");
|
||||||
|
prbyte(aa); prbyte(yy); prbyte(xx); newlin();
|
||||||
}
|
}
|
||||||
|
|
||||||
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();}
|
||||||
@ -72,7 +100,13 @@ void xerror() {
|
|||||||
main:
|
main:
|
||||||
newlin();
|
newlin();
|
||||||
|
|
||||||
putln("TESTING GETVID() AND SETVID()");
|
puts("TESTING GETMEM() AND SETMEM()");
|
||||||
|
setadr($20,&0); setmem(@abcdef,&abcdef);
|
||||||
|
setadr($20,&0); getmem(@abcdef,&buffer);
|
||||||
|
setdst(&abcdef); if (memcmp(@abcdef,&buffer)) xerror();
|
||||||
|
passed();
|
||||||
|
|
||||||
|
puts("TESTING GETVID() AND SETVID()");
|
||||||
for (i=0;i<4;i++) {
|
for (i=0;i<4;i++) {
|
||||||
for (j=1;j:+;j--) {
|
for (j=1;j:+;j--) {
|
||||||
//inline $ff;
|
//inline $ff;
|
||||||
@ -84,7 +118,7 @@ main:
|
|||||||
}
|
}
|
||||||
passed();
|
passed();
|
||||||
|
|
||||||
putln("TESTING GETBDR() AND SETBDR()");
|
puts("TESTING GETBDR() AND SETBDR()");
|
||||||
i = 0;
|
i = 0;
|
||||||
do {
|
do {
|
||||||
setbdr(i);
|
setbdr(i);
|
||||||
@ -95,7 +129,7 @@ main:
|
|||||||
} while(i);
|
} while(i);
|
||||||
passed();
|
passed();
|
||||||
|
|
||||||
putln("TESTING GETSCL() AND SETSCL()");
|
puts("TESTING GETSCL() AND SETSCL()");
|
||||||
i=1;
|
i=1;
|
||||||
do {
|
do {
|
||||||
j=1;
|
j=1;
|
||||||
@ -110,15 +144,35 @@ main:
|
|||||||
} while (i);
|
} while (i);
|
||||||
passed();
|
passed();
|
||||||
|
|
||||||
putln("TESTING GETHSR(), GETHSP(), GETVSR(), GETVSP()");
|
//putln("SAVING START AND STOP REGISTERS");
|
||||||
hstart = gethsr();
|
setadr($1F, &$0004); getmem(5, &hrzvrt);
|
||||||
hstop = gethsp();
|
//for (i=0;i<5;i++) printf(hrzvrt[i], "%h "); newlin();
|
||||||
vstart = getvsr();
|
|
||||||
vstop = getvsp();
|
puts("TESTING GETHSR() AND SETHSR()");
|
||||||
prthvs();
|
sethsr(&$024C);
|
||||||
newlin();
|
hstart = gethsr();
|
||||||
|
//setdst(hstart);printf("HSTART=%w%n");
|
||||||
|
if (>hstart<>$02 or <hstart<>$4C) xerror(); else passed();
|
||||||
|
|
||||||
putln("TESTING GETIRL() AND SETIRL()");
|
puts("TESTING GETHSP() AND SETHSP()");
|
||||||
|
sethsp(&$025D); hstop = gethsp();
|
||||||
|
//setdst(hstop);printf("HSTOP=%w%n");
|
||||||
|
if (>hstop<>$02 or <hstop<>$5D) xerror(); else passed();
|
||||||
|
|
||||||
|
puts("TESTING GETVSR() AND SETVSR()");
|
||||||
|
setvsr(&$016E); vstart = getvsr();
|
||||||
|
//setdst(vstart);printf("VSTART=%w%n");
|
||||||
|
if (>vstart<>$01 or <vstart<>$6E) xerror(); else passed();
|
||||||
|
|
||||||
|
puts("TESTING GETVSP() AND SETVSP()");
|
||||||
|
setvsp(&$017F); vstop = getvsp();
|
||||||
|
//setdst(vstop);printf("VSTOP=%w%n");
|
||||||
|
if (>vstop<>$01 or <vstop<>$7F) xerror(); else passed();
|
||||||
|
|
||||||
|
//putln("RESTORING START AND STOP REGISTERS");
|
||||||
|
setadr($1F, &$0004); setmem(5, &hrzvrt);
|
||||||
|
|
||||||
|
puts("TESTING GETIRL() AND SETIRL()");
|
||||||
for (i=0;i<2;i++) {
|
for (i=0;i<2;i++) {
|
||||||
j=0;
|
j=0;
|
||||||
do {
|
do {
|
||||||
@ -131,13 +185,13 @@ main:
|
|||||||
}
|
}
|
||||||
passed();
|
passed();
|
||||||
|
|
||||||
putln("TESTING RGBCLR() AND CLRRGB()");
|
puts("TESTING RGBCLR() AND CLRRGB()");
|
||||||
for (red=0;red<16;red++) {
|
for (red=0;red<16;red++) {
|
||||||
for (green=0;green<16;green++) {
|
for (green=0;green<16;green++) {
|
||||||
for (blue=0;blue<16;blue++) {
|
for (blue=0;blue<16;blue++) {
|
||||||
//prtayx(red,green,blue);
|
//prtayx(red,green,blue);
|
||||||
c = rgbclr(red,green,blue);
|
color = rgbclr(red,green,blue);
|
||||||
//putwrd(c); putspc();
|
//putwrd(color); putspc();
|
||||||
i,j,k = clrrgb();
|
i,j,k = clrrgb();
|
||||||
//prtayx(i,j,k);
|
//prtayx(i,j,k);
|
||||||
if (i<>red or j<>green or blue<>k) xerror();
|
if (i<>red or j<>green or blue<>k) xerror();
|
||||||
@ -147,30 +201,79 @@ main:
|
|||||||
}
|
}
|
||||||
passed();
|
passed();
|
||||||
|
|
||||||
putln("TESTING GETCLR()");
|
puts("TESTING GETCLR() AND SETCLR()");
|
||||||
for (i=16; i<32; i++) {
|
for (i=16; i<32; i++) {
|
||||||
//puthex(i); putspc();
|
//puthex(i); putspc();
|
||||||
c = getclr(i);
|
color = getclr(i);
|
||||||
//putwrd(c); putspc();
|
//putwrd(color); putspc();
|
||||||
if (i&15<>>c or nybdup(i)<><c) xerror();
|
if (i&15<>>color or nybdup(i)<><color) xerror();
|
||||||
//if (i&7==7) newlin();
|
//if (i&7==7) newlin();
|
||||||
}
|
}
|
||||||
passed();
|
//passed();
|
||||||
|
|
||||||
putln("TESTING SETCLR()");
|
//puts("TESTING SETCLR()");
|
||||||
for (i=128; i<144; i++) {
|
for (i=128; i<144; i++) {
|
||||||
//puthex(i); putspc();
|
//puthex(i); putspc();
|
||||||
red = i+8&15;
|
red = i+8&15;
|
||||||
green = 144-i;
|
green = 144-i;
|
||||||
blue = i&15;
|
blue = i&15;
|
||||||
//prhex(red); prhex(green); prhex(blue); putspc(); putspc();
|
//prhex(red); prhex(green); prhex(blue); putspc(); putspc();
|
||||||
c = rgbclr(red,green,blue);
|
color = rgbclr(red,green,blue);
|
||||||
setclr(i,c);
|
setclr(i,color);
|
||||||
d = getclr(i);
|
colour = getclr(i);
|
||||||
//putwrd(d); putspc();
|
//putwrd(colour); putspc();
|
||||||
if (<d<><c or >d<>>c) xerror();
|
if (<colour<><color or >colour<>>color) xerror();
|
||||||
//if (i&7==7) newlin();
|
//if (i&7==7) newlin();
|
||||||
}
|
}
|
||||||
passed();
|
passed();
|
||||||
|
|
||||||
|
//putln("SAVING LAYER REGISTERS");
|
||||||
|
setadr($1F,&$2000); getmem(@layer0,&layer0);
|
||||||
|
setadr($1F,&$3000); getmem(@layer1,&layer1);
|
||||||
|
|
||||||
|
printf(layer, "TESTING GETMBS() AND SETMBS()");
|
||||||
|
setmbs(0,&$1234); mbase0 = getmbs(0);
|
||||||
|
setmbs(1,&$5678); mbase1 = getmbs(1);
|
||||||
|
//setdst(mbase0); printf("%nMBASE0=$%w, "); setdst(mbase1); printf("MBASE1=$%w%n");
|
||||||
|
if (>mbase0<>$12 or <mbase0<>$34) xerror();
|
||||||
|
if (>mbase1<>$56 or <mbase1<>$78) xerror();
|
||||||
|
passed();
|
||||||
|
|
||||||
|
printf(layer, "TESTING GETTBS() AND SETTBS()");
|
||||||
|
settbs(0,&$90AB); tbase0 = gettbs(0);
|
||||||
|
settbs(1,&$CDEF); tbase1 = gettbs(1);
|
||||||
|
//setdst(tbase0); printf("%nTBASE0=$%w, "); setdst(tbase1); printf("TBASE1=$%w%n");
|
||||||
|
if (>tbase0<>$90 or <tbase0<>$AB) xerror();
|
||||||
|
if (>tbase1<>$CD or <tbase1<>$EF) xerror();
|
||||||
|
passed();
|
||||||
|
|
||||||
|
printf(layer, "TESTING GETMBA() AND GETTBA()");
|
||||||
|
i,j,k = getmba(0); if (i<>$00 or j<>$48 or k<>$D0) xerror();
|
||||||
|
i,j,k = getmba(1); if (i<>$01 or j<>$59 or k<>$E0) xerror();
|
||||||
|
i,j,k = gettba(0); if (i<>$02 or j<>$42 or k<>$AC) xerror();
|
||||||
|
i,j,k = gettba(1); if (i<>$03 or j<>$37 or k<>$BC) xerror();
|
||||||
|
passed();
|
||||||
|
|
||||||
|
printf(layer, "TESTING GETHSC() AND SETHSC()");
|
||||||
|
sethsc(0,&$1357); hscrl0 = gethsc(0);
|
||||||
|
sethsc(1,&$2468); hscrl1 = gethsc(1);
|
||||||
|
//setdst(hscrl0); printf("%nHSCRL0=$%w, "); setdst(hscrl1); printf("HSCRL1=$%w%n");
|
||||||
|
if (>hscrl0<>$13 or <hscrl0<>$57) xerror();
|
||||||
|
if (>hscrl1<>$24 or <hscrl1<>$68) xerror();
|
||||||
|
passed();
|
||||||
|
|
||||||
|
printf(layer, "TESTING GETVSC() AND SETVSC()");
|
||||||
|
setvsc(0,&$9BDF); vscrl0 = getvsc(0);
|
||||||
|
setvsc(1,&$0ACE); vscrl1 = getvsc(1);
|
||||||
|
//setdst(vscrl0); printf("%nVSCRL0=$%w, "); setdst(hscrl1); printf("VSCRL1=$%w%n");
|
||||||
|
if (>vscrl0<>$9B or <vscrl0<>$DF) xerror();
|
||||||
|
if (>vscrl1<>$0A or <vscrl1<>$CE) xerror();
|
||||||
|
passed();
|
||||||
|
|
||||||
|
//putln("RESTORING LAYER REGISTERS");
|
||||||
|
setadr($1F, &$2000); setmem(@layer0, &layer0);
|
||||||
|
setadr($1F, &$3000); setmem(@layer1, &layer1);
|
||||||
|
|
||||||
|
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user