sm64

A Super Mario 64 decompilation
Log | Files | Refs | README | LICENSE

sptask.h (2978B)


      1 #ifndef _ULTRA64_SPTASK_H_
      2 #define _ULTRA64_SPTASK_H_
      3 
      4 /* Task Types */
      5 #define M_GFXTASK 1
      6 #define M_AUDTASK 2
      7 #define M_VIDTASK 3
      8 #define M_HVQTASK 6
      9 #define M_HVQMTASK 7
     10 
     11 #if (defined(F3DEX_GBI) || defined(F3DLP_GBI) || defined(F3DEX_GBI_2))
     12 #define OS_YIELD_DATA_SIZE 0xc00
     13 #else
     14 #define OS_YIELD_DATA_SIZE 0x900
     15 #endif
     16 #define OS_YIELD_AUDIO_SIZE 0x400
     17 
     18 /* Flags  */
     19 #define M_TASK_FLAG0 1
     20 #define M_TASK_FLAG1 2
     21 #if defined(VERSION_SH) || defined(VERSION_CN)
     22 #define M_TASK_FLAG2 4
     23 #endif
     24 
     25 /* SpStatus */
     26 #define SPSTATUS_CLEAR_HALT 0x00000001
     27 #define SPSTATUS_SET_HALT 0x00000002
     28 #define SPSTATUS_CLEAR_BROKE 0x00000004
     29 #define SPSTATUS_CLEAR_INTR 0x00000008
     30 #define SPSTATUS_SET_INTR 0x00000010
     31 #define SPSTATUS_CLEAR_SSTEP 0x00000020
     32 #define SPSTATUS_SET_SSTEP 0x00000040
     33 #define SPSTATUS_CLEAR_INTR_ON_BREAK 0x00000080
     34 #define SPSTATUS_SET_INTR_ON_BREAK 0x00000100
     35 #define SPSTATUS_CLEAR_SIGNAL0 0x00000200
     36 #define SPSTATUS_SET_SIGNAL0 0x00000400
     37 #define SPSTATUS_CLEAR_SIGNAL1 0x00000800
     38 #define SPSTATUS_SET_SIGNAL1 0x00001000
     39 #define SPSTATUS_CLEAR_SIGNAL2 0x00002000
     40 #define SPSTATUS_SET_SIGNAL2 0x00004000
     41 #define SPSTATUS_CLEAR_SIGNAL3 0x00008000
     42 #define SPSTATUS_SET_SIGNAL3 0x00010000
     43 #define SPSTATUS_CLEAR_SIGNAL4 0x00020000
     44 #define SPSTATUS_SET_SIGNAL4 0x00040000
     45 #define SPSTATUS_CLEAR_SIGNAL5 0x00080000
     46 #define SPSTATUS_SET_SIGNAL5 0x00100000
     47 #define SPSTATUS_CLEAR_SIGNAL6 0x00200000
     48 #define SPSTATUS_SET_SIGNAL6 0x00800000
     49 #define SPSTATUS_CLEAR_SIGNAL7 0x01000000
     50 #define SPSTATUS_SET_SIGNAL7 0x02000000
     51 
     52 #define SPSTATUS_HALT 0x0001
     53 #define SPSTATUS_BROKE 0x0002
     54 #define SPSTATUS_DMA_BUSY 0x0004
     55 #define SPSTATUS_DMA_FULL 0x0008
     56 #define SPSTATUS_IO_FULL 0x0010
     57 #define SPSTATUS_SINGLE_STEP 0x0020
     58 #define SPSTATUS_INTERRUPT_ON_BREAK 0x0040
     59 #define SPSTATUS_SIGNAL0_SET 0x0080
     60 #define SPSTATUS_SIGNAL1_SET 0x0100
     61 #define SPSTATUS_SIGNAL2_SET 0x0200
     62 #define SPSTATUS_SIGNAL3_SET 0x0400
     63 #define SPSTATUS_SIGNAL4_SET 0x0800
     64 #define SPSTATUS_SIGNAL5_SET 0x1000
     65 #define SPSTATUS_SIGNAL6_SET 0x2000
     66 #define SPSTATUS_SIGNAL7_SET 0x4000
     67 
     68 /* Types */
     69 /* Types */
     70 
     71 typedef struct
     72 {
     73     /*0x00*/ u32 type;
     74     /*0x04*/ u32 flags;
     75 
     76     /*0x08*/ u64 *ucode_boot;
     77     /*0x0C*/ u32 ucode_boot_size;
     78 
     79     /*0x10*/ u64 *ucode;
     80     /*0x14*/ u32 ucode_size;
     81 
     82     /*0x18*/ u64 *ucode_data;
     83     /*0x1C*/ u32 ucode_data_size;
     84 
     85     /*0x20*/ u64 *dram_stack;
     86     /*0x24*/ u32 dram_stack_size;
     87 
     88     /*0x28*/ u64 *output_buff;
     89     /*0x2C*/ u64 *output_buff_size;
     90 
     91     /*0x30*/ u64 *data_ptr;
     92     /*0x34*/ u32 data_size;
     93 
     94     /*0x38*/ u64 *yield_data_ptr;
     95     /*0x3C*/ u32 yield_data_size;
     96 } OSTask_t; // size = 0x40
     97 
     98 typedef union {
     99     OSTask_t t;
    100     long long int force_structure_alignment;
    101 } OSTask;
    102 
    103 typedef u32 OSYieldResult;
    104 
    105 /* Functions */
    106 
    107 #define osSpTaskStart(p) \
    108     osSpTaskLoad(p);     \
    109     osSpTaskStartGo(p);
    110 
    111 void osSpTaskLoad(OSTask *task);
    112 void osSpTaskStartGo(OSTask *task);
    113 void osSpTaskYield(void);
    114 OSYieldResult osSpTaskYielded(OSTask *task);
    115 
    116 #endif