SPORT stands for Serial PORT, and refers specifically to the VRAM's serial port, not to an external RS-232 serial port. VRAM has special hardware that lets you copy pages of memory, clear pages of memory, and replicate pages of memory at an amazing rate. The SPORT device provides access to these capabilities. It is ideal for clearing a display to a specific color, or setting a display to a static background picture.
GetPageSize(MEMTYPE_VRAM)
function call. All operations performed by the SPORT device must start on an even page boundary and be a multiple of the page size length. The current VRAM page size is 2 KB, but you must not rely on this fact. Always use the GetPageSize()
function to get the actual page size.Communicating with the SPORT device is done with the standard Portfolio I/O commands. The SPORT device only has a single unit, unit 0. To send commands to the SPORT device, you must complete the following steps:
OpenNamedDevice()
function.
CreateIOReq()
function.
DoIO()
or SendIO().
SPORTCMD_COPY
command copies pages of VRAM to other pages of VRAM. The copy operation always occurs during vertical blanking because the serial port on the VRAM is always in use when video is displayed. When vertical blanking occurs, the serial port becomes available for other duties such as copying and cloning pages.
To use SPORTCMD_COPY
, initialize an IOInfo structure such as:
IOInfo ioInfo;
The
memset(&ioInfo,0,sizeof(ioInfo));
ioInfo.ioi_Command = SPORTCMD_COPY;
ioInfo.ioi_Offset = mask;
ioInfo.ioi_Send.iob_Buffer = sourceAddress;
ioInfo.ioi_Send.iob_Len = numBytes;
ioInfo.ioi_Recv.iob_Buffer = destinationAddress;
ioInfo.ioi_Recv.iob_Len = numBytes;
sourceAddress
field points to the source data to be copied, while the destinationAddress
field points to the address where the data is copied. Both of these addresses must be in VRAM, and both must fall on even VRAM page boundaries. numBytes
indicates the number of bytes to copy. This value must be an even multiple of the VRAM page size. Finally, mask
is a 32-bit value that determines which bits of each word of data are copied. Every on bit indicates a bit that will be copied to the destination. Every off bit indicates that the corresponding bit in the destination will remain unchanged.
Don't use a mask value other than 0xffffffff because future hardware implementations may impose serious performance penalties for using masks with other values.
SPORTCMD_CLONE
command replicates a page of VRAM to a series of other pages. This is useful when creating wallpaper backgrounds. The cloning operation always occurs during vertical blanking because the serial port on the VRAM is always in use when video is being displayed. When vertical blanking occurs, the serial port becomes available for other duties such as copying and cloning pages.
To use SPORTCMD_CLONE
, you must initialize an IOInfo structure such as:
The
IOInfo ioInfo;
memset(&ioInfo,0,sizeof(ioInfo));
ioInfo.ioi_Command = SPORTCMD_CLONE;
ioInfo.ioi_Offset = mask;
ioInfo.ioi_Send.iob_Buffer = sourcePageAddress;
ioInfo.ioi_Send.iob_Len = pageSize;
ioInfo.ioi_Recv.iob_Buffer = destinationAddress;
ioInfo.ioi_Recv.iob_Len = numBytes;
sourcePageAddress
points to the source page to be replicated, while the destinationAddress
field points to the address where the data is copied. Both of these addresses must be in VRAM, and both must fall on even VRAM page boundaries. pageSize
is the size of a single VRAM page, as returned by GetPageSize(MEMTYPE_VRAM)
. numBytes
indicates the number of bytes to replicate. This value is typically calculated as (numPages * pageSize
). This value must be an even multiple of the VRAM page size. Finally, mask
is a 32-bit value that determines which bits of each word of data are put on the destination pages. Every on bit indicates a bit that will be copied to the destination. Every off bit indicates that the corresponding bit in the destination will remain unchanged.
Don't use a mask value other than 0xffffffff because future hardware implementations may impose serious performance penalties for using masks with other values.
FLASHWRITE_CMD
command sets the value of a range of VRAM pages. Unlike the copy and clone operations described above, this command does not operate in the vertical blank area and occurs immediately.
To use FLASHWRITE_CMD
, you must initialize an IOInfo structure such as:
IOInfo ioInfo;
The
memset(&ioInfo,0,sizeof(ioInfo));
ioInfo.ioi_Command = FLASHCMD_WRITE;
ioInfo.ioi_CmdOptions = mask;
ioInfo.ioi_Offset = value;
ioInfo.ioi_Send.iob_Buffer = pageAddress;
ioInfo.ioi_Send.iob_Len = numBytes;
ioInfo.ioi_Recv.iob_Buffer = pageAddress;
ioInfo.ioi_Recv.iob_Len = numBytes;
pageAddress
field points to the pages of VRAM to be set to a fixed value. This address must be in VRAM, and must fall on an even VRAM page boundary. The numBytes
field indicates the number of bytes to affect. This value must be an even multiple of the VRAM page size. value
is the value to which the words of data within the pages should be set. Finally, mask
is a 32-bit value that determines which bits of each word of data are affected. Every on bit indicates a bit that will be affected. Every off bit indicates that the corresponding bit will remain unchanged.
Don't use a mask value other than 0xffffffff because future hardware implementations may impose serious performance penalties for using masks with other values.