#include <nitro/card.h>
void CARD_ReadRomAsync(
u32 dma,
const void *src,
void *dst,
u32 len,
MIDmaCallback callback,
void *arg);
This function asynchronously loads data from a device that has ROM. The access bus must be locked before using this function.
If a valid DMA channel is specified, this function uses that channel after explicitly stopping it with the MI_StopDma function.
If the previous access has not completed, this function waits until the previous access completes.
If this function explicitly specifies CPU transfer, it behaves the same as the synchronous version, the CARD_ReadRom function.
In the previous version of this function, the transfer source, transfer destination, and transfer size were restricted by hardware. This restriction no longer exists.
This function uses the IRQ handler to operate asynchronously only if the following conditions are True:
CARD_ROM_PAGE_SIZECARD_ROM_PAGE_SIZEIf any of these conditions are not met, CARD_ReadRomAsync uses an internal thread for asynchronous processing.
For more information on this thread, see the description in the CARD_GetThreadPriority function.
The following table shows the ROM access methods for each execution environment:
| Operating Environment | ROM device | Operation |
|---|---|---|
| TS | (Always game card) | Directly accesses the card using DMA. |
| TEG | Game Card | Because the main processor cannot access a card in the TEG environment, the transfer request is sent to the IO processor via PXI. |
| Game Pak | Directly access the game pak using DMA or CPU transfer. |
If a valid DMA channel is specified by this function, that DMA channel is not available until the transfer is complete.
Note: Because this function uses interrupts internally, the process does not complete if it attempts to run while interrupts are prohibited.
dma |
The DMA channel to be used for transfer. If a DMA channel that is out of range is specified for transfer, the CPU transfers. If a valid DMA channel is specified, that DMA channel is not available for any other task until the transfer is complete. |
src |
Transfer source CARD ROM address |
dst |
Transfer destination memory address |
len |
Length of the read data in bytes |
callback |
Completion-time callback function. Specify NULL when not needed. |
arg |
This is ignored if NULL is specified in the callback argument passed to the completion-time callback function. |
None.
CARD_ROM_PAGE_SIZE, CARD_LockRom, CARD_ReadRom, CARD_TryWaitRomAsync, CARD_WaitRomAsync, CARD_GetThreadPriority, MI_StopDma
11/02/2004 Corrected an argument name.
07/28/2004 Corrected the callback types and the GetThreadPriority link.
07/19/2004 Changed description of internal operation.
07/09/2004 Due to function format change, revised description / added description of internal operation.
07/05/2004 Initial version.