mirror of
https://github.com/zeldaret/oot.git
synced 2024-12-01 15:26:01 +00:00
43 lines
1.1 KiB
C
43 lines
1.1 KiB
C
#ifndef _ULTRA64_MBI_H_
|
|
#define _ULTRA64_MBI_H_
|
|
|
|
/*
|
|
* Header file for the Media Binary Interface
|
|
*
|
|
* NOTE: This file is included by the RSP microcode, so any C-specific
|
|
* constructs must be bracketed by #ifdef _LANGUAGE_C
|
|
*
|
|
*/
|
|
|
|
|
|
/*
|
|
* the SHIFT macros are used to build display list commands, inserting
|
|
* bit-fields into a 32-bit word. They take a value, a shift amount,
|
|
* and a width.
|
|
*
|
|
* For the left shift, the lower bits of the value are masked,
|
|
* then shifted left.
|
|
*
|
|
* For the right shift, the value is shifted right, then the lower bits
|
|
* are masked.
|
|
*
|
|
* (NOTE: _SHIFTL(v, 0, 32) won't work, just use an assignment)
|
|
*
|
|
*/
|
|
#define _SHIFTL(v, s, w) \
|
|
((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s)))
|
|
#define _SHIFTR(v, s, w) \
|
|
((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1)))
|
|
|
|
#define G_ON (1)
|
|
#define G_OFF (0)
|
|
|
|
#include "ultra64/gbi.h"
|
|
#include "ultra64/abi.h"
|
|
|
|
#define NUM_SEGMENTS (16)
|
|
#define SEGMENT_OFFSET(a) ((u32)(a) & 0x00ffffff)
|
|
#define SEGMENT_NUMBER(a) (((u32)(a) << 4) >> 28)
|
|
#define SEGMENT_ADDR(num, off) (((num) << 24) + (off))
|
|
|
|
#endif
|