Chapter 22 - Scheduling Audio and Graphics

The Nintendo 64 audio and graphics chores are shared between the host CPU and the RCP. The work to be performed is expressed using an array of primitives called a command list.

The host CPU is responsible for command list generation. Audio command lists are generated by calling alAudioFrame(). Graphics command lists are generated by calling the various graphics macros defined in gbi.h. In addition, the host CPU is responsible for assembling command lists into RCP tasks (which consist of command lists, RCP microcode and execution state information), and for downloading the task at the appropriate time to the RCP.

The RCP is responsible for command list processing. The RCP microcode loaded by the host CPU parses the command list, executes the appropriate core rendering routines, and writes the results to the video frame or audio buffer.

Since the video frame buffer must be updated at a regular rate (usually 30 frames per second) and the audio buffers must be updated before they are emptied by the audio DAC to prevent clicks and pops, the application must make schedule the command list generation and processing chores so that they happen in a "timely manner" This chapter identifies the relevant scheduling issues and describes the libultra Scheduler that addresses them.

22.1 Scheduling Issues
22.1.1 Command List Generation
22.1.2 Command List Processing
22.2 Using the Scheduler
22.2.1 Creating the Scheduler: osCreateScheduler()
22.2.2 Adding Clients to the Scheduler: osScAddClient()
22.2.3 Creating Scheduler Tasks: OSScTask structure
22.2.4 Sending Tasks to the Scheduler: osScGetTaskQ()