summaryrefslogtreecommitdiff
path: root/include/PR
diff options
context:
space:
mode:
authorKiritoDv <kiritodev01@gmail.com>2024-05-01 10:09:49 -0600
committerKiritoDv <kiritodev01@gmail.com>2024-05-01 10:09:49 -0600
commita2c3feb67a2f8afb1cebd0e77e4a3e23db2c28c4 (patch)
tree4250a53478f87b8b07e16481a634ef16550ddb43 /include/PR
parentd5264825f0a7ab67f53fca8857cbd24dd86ee86d (diff)
WIP Compilation
Diffstat (limited to 'include/PR')
-rw-r--r--include/PR/R4300.h453
-rw-r--r--include/PR/abi.h999
-rw-r--r--include/PR/gbi.h4750
-rw-r--r--include/PR/gs2dex.h392
-rw-r--r--include/PR/gu.h55
-rw-r--r--include/PR/libaudio.h2
-rw-r--r--include/PR/libultra.h18
-rw-r--r--include/PR/mbi.h101
-rw-r--r--include/PR/os.h800
-rw-r--r--include/PR/os_ai.h92
-rw-r--r--include/PR/os_cache.h96
-rw-r--r--include/PR/os_cont.h207
-rw-r--r--include/PR/os_eeprom.h107
-rw-r--r--include/PR/os_exception.h119
-rw-r--r--include/PR/os_internal.h18
-rw-r--r--include/PR/os_libc.h10
-rw-r--r--include/PR/os_message.h164
-rw-r--r--include/PR/os_misc.h11
-rw-r--r--include/PR/os_pi.h80
-rw-r--r--include/PR/os_rdp.h92
-rw-r--r--include/PR/os_thread.h75
-rw-r--r--include/PR/os_time.h27
-rw-r--r--include/PR/os_tlb.h107
-rw-r--r--include/PR/os_vi.h117
-rw-r--r--include/PR/rcp.h881
-rw-r--r--include/PR/sptask.h230
-rw-r--r--include/PR/ucode.h27
-rw-r--r--include/PR/ultratypes.h47
28 files changed, 1 insertions, 10076 deletions
diff --git a/include/PR/R4300.h b/include/PR/R4300.h
deleted file mode 100644
index 932694d3f..000000000
--- a/include/PR/R4300.h
+++ /dev/null
@@ -1,453 +0,0 @@
-/**************************************************************************
- * *
- * Copyright (C) 1995, Silicon Graphics, Inc. *
- * *
- * These coded instructions, statements, and computer programs contain *
- * unpublished proprietary information of Silicon Graphics, Inc., and *
- * are protected by Federal copyright law. They may not be disclosed *
- * to third parties or copied or duplicated in any form, in whole or *
- * in part, without the prior written consent of Silicon Graphics, Inc. *
- * *
- **************************************************************************/
-
-/**************************************************************************
- *
- * $Revision: 1.13 $
- * $Date: 1997/02/11 08:15:34 $
- * $Source: /disk6/Master/cvsmdev2/PR/include/R4300.h,v $
- *
- **************************************************************************/
-
-#ifndef __R4300_H__
-#define __R4300_H__
-
-#include <PR/ultratypes.h>
-
-/*
- * Segment base addresses and sizes
- */
-#define KUBASE 0
-#define KUSIZE 0x80000000
-#define K0BASE 0x80000000
-#define K0SIZE 0x20000000
-#define K1BASE 0xA0000000
-#define K1SIZE 0x20000000
-#define K2BASE 0xC0000000
-#define K2SIZE 0x20000000
-
-/*
- * Exception vectors
- */
-#define SIZE_EXCVEC 0x80 /* Size of an exc. vec */
-#define UT_VEC K0BASE /* utlbmiss vector */
-#define R_VEC (K1BASE+0x1fc00000) /* reset vector */
-#define XUT_VEC (K0BASE+0x80) /* extended address tlbmiss */
-#define ECC_VEC (K0BASE+0x100) /* Ecc exception vector */
-#define E_VEC (K0BASE+0x180) /* Gen. exception vector */
-
-/*
- * Address conversion macros
- */
-#ifdef _LANGUAGE_ASSEMBLY
-
-#define K0_TO_K1(x) ((x)|0xA0000000) /* kseg0 to kseg1 */
-#define K1_TO_K0(x) ((x)&0x9FFFFFFF) /* kseg1 to kseg0 */
-#define K0_TO_PHYS(x) ((x)&0x1FFFFFFF) /* kseg0 to physical */
-#define K1_TO_PHYS(x) ((x)&0x1FFFFFFF) /* kseg1 to physical */
-#define KDM_TO_PHYS(x) ((x)&0x1FFFFFFF) /* direct mapped to physical */
-#define PHYS_TO_K0(x) ((x)|0x80000000) /* physical to kseg0 */
-#define PHYS_TO_K1(x) ((x)|0xA0000000) /* physical to kseg1 */
-
-#else /* _LANGUAGE_C */
-
-#define K0_TO_K1(x) ((u32)(x)|0xA0000000) /* kseg0 to kseg1 */
-#define K1_TO_K0(x) ((u32)(x)&0x9FFFFFFF) /* kseg1 to kseg0 */
-#define K0_TO_PHYS(x) ((u32)(x)&0x1FFFFFFF) /* kseg0 to physical */
-#define K1_TO_PHYS(x) ((u32)(x)&0x1FFFFFFF) /* kseg1 to physical */
-#define KDM_TO_PHYS(x) ((u32)(x)&0x1FFFFFFF) /* direct mapped to physical */
-#define PHYS_TO_K0(x) ((u32)(x)|0x80000000) /* physical to kseg0 */
-#define PHYS_TO_K1(x) ((u32)(x)|0xA0000000) /* physical to kseg1 */
-
-#endif /* _LANGUAGE_ASSEMBLY */
-
-/*
- * Address predicates
- */
-#define IS_KSEG0(x) ((u32)(x) >= K0BASE && (u32)(x) < K1BASE)
-#define IS_KSEG1(x) ((u32)(x) >= K1BASE && (u32)(x) < K2BASE)
-#define IS_KSEGDM(x) ((u32)(x) >= K0BASE && (u32)(x) < K2BASE)
-#define IS_KSEG2(x) ((u32)(x) >= K2BASE && (u32)(x) < KPTE_SHDUBASE)
-#define IS_KPTESEG(x) ((u32)(x) >= KPTE_SHDUBASE)
-#define IS_KUSEG(x) ((u32)(x) < K0BASE)
-
-/*
- * TLB size constants
- */
-
-#define NTLBENTRIES 31 /* entry 31 is reserved by rdb */
-
-#define TLBHI_VPN2MASK 0xffffe000
-#define TLBHI_VPN2SHIFT 13
-#define TLBHI_PIDMASK 0xff
-#define TLBHI_PIDSHIFT 0
-#define TLBHI_NPID 255 /* 255 to fit in 8 bits */
-
-#define TLBLO_PFNMASK 0x3fffffc0
-#define TLBLO_PFNSHIFT 6
-#define TLBLO_CACHMASK 0x38 /* cache coherency algorithm */
-#define TLBLO_CACHSHIFT 3
-#define TLBLO_UNCACHED 0x10 /* not cached */
-#define TLBLO_NONCOHRNT 0x18 /* Cacheable non-coherent */
-#define TLBLO_EXLWR 0x28 /* Exclusive write */
-#define TLBLO_D 0x4 /* writeable */
-#define TLBLO_V 0x2 /* valid bit */
-#define TLBLO_G 0x1 /* global access bit */
-
-#define TLBINX_PROBE 0x80000000
-#define TLBINX_INXMASK 0x3f
-#define TLBINX_INXSHIFT 0
-
-#define TLBRAND_RANDMASK 0x3f
-#define TLBRAND_RANDSHIFT 0
-
-#define TLBWIRED_WIREDMASK 0x3f
-
-#define TLBCTXT_BASEMASK 0xff800000
-#define TLBCTXT_BASESHIFT 23
-#define TLBCTXT_BASEBITS 9
-
-#define TLBCTXT_VPNMASK 0x7ffff0
-#define TLBCTXT_VPNSHIFT 4
-
-#define TLBPGMASK_4K 0x0
-#define TLBPGMASK_16K 0x6000
-#define TLBPGMASK_64K 0x1e000
-
-/*
- * Status register
- */
-#define SR_CUMASK 0xf0000000 /* coproc usable bits */
-
-#define SR_CU3 0x80000000 /* Coprocessor 3 usable */
-#define SR_CU2 0x40000000 /* Coprocessor 2 usable */
-#define SR_CU1 0x20000000 /* Coprocessor 1 usable */
-#define SR_CU0 0x10000000 /* Coprocessor 0 usable */
-#define SR_RP 0x08000000 /* Reduced power (quarter speed) */
-#define SR_FR 0x04000000 /* MIPS III FP register mode */
-#define SR_RE 0x02000000 /* Reverse endian */
-#define SR_ITS 0x01000000 /* Instruction trace support */
-#define SR_BEV 0x00400000 /* Use boot exception vectors */
-#define SR_TS 0x00200000 /* TLB shutdown */
-#define SR_SR 0x00100000 /* Soft reset occured */
-#define SR_CH 0x00040000 /* Cache hit for last 'cache' op */
-#define SR_CE 0x00020000 /* Create ECC */
-#define SR_DE 0x00010000 /* ECC of parity does not cause error */
-
-/*
- * Interrupt enable bits
- * (NOTE: bits set to 1 enable the corresponding level interrupt)
- */
-#define SR_IMASK 0x0000ff00 /* Interrupt mask */
-#define SR_IMASK8 0x00000000 /* mask level 8 */
-#define SR_IMASK7 0x00008000 /* mask level 7 */
-#define SR_IMASK6 0x0000c000 /* mask level 6 */
-#define SR_IMASK5 0x0000e000 /* mask level 5 */
-#define SR_IMASK4 0x0000f000 /* mask level 4 */
-#define SR_IMASK3 0x0000f800 /* mask level 3 */
-#define SR_IMASK2 0x0000fc00 /* mask level 2 */
-#define SR_IMASK1 0x0000fe00 /* mask level 1 */
-#define SR_IMASK0 0x0000ff00 /* mask level 0 */
-
-#define SR_IBIT8 0x00008000 /* bit level 8 */
-#define SR_IBIT7 0x00004000 /* bit level 7 */
-#define SR_IBIT6 0x00002000 /* bit level 6 */
-#define SR_IBIT5 0x00001000 /* bit level 5 */
-#define SR_IBIT4 0x00000800 /* bit level 4 */
-#define SR_IBIT3 0x00000400 /* bit level 3 */
-#define SR_IBIT2 0x00000200 /* bit level 2 */
-#define SR_IBIT1 0x00000100 /* bit level 1 */
-
-#define SR_IMASKSHIFT 8
-
-#define SR_KX 0x00000080 /* extended-addr TLB vec in kernel */
-#define SR_SX 0x00000040 /* xtended-addr TLB vec supervisor */
-#define SR_UX 0x00000020 /* xtended-addr TLB vec in user mode */
-#define SR_KSU_MASK 0x00000018 /* mode mask */
-#define SR_KSU_USR 0x00000010 /* user mode */
-#define SR_KSU_SUP 0x00000008 /* supervisor mode */
-#define SR_KSU_KER 0x00000000 /* kernel mode */
-#define SR_ERL 0x00000004 /* Error level, 1=>cache error */
-#define SR_EXL 0x00000002 /* Exception level, 1=>exception */
-#define SR_IE 0x00000001 /* interrupt enable, 1=>enable */
-
-/*
- * Cause Register
- */
-#define CAUSE_BD 0x80000000 /* Branch delay slot */
-#define CAUSE_CEMASK 0x30000000 /* coprocessor error */
-#define CAUSE_CESHIFT 28
-
-/* Interrupt pending bits */
-#define CAUSE_IP8 0x00008000 /* External level 8 pending - COMPARE */
-#define CAUSE_IP7 0x00004000 /* External level 7 pending - INT4 */
-#define CAUSE_IP6 0x00002000 /* External level 6 pending - INT3 */
-#define CAUSE_IP5 0x00001000 /* External level 5 pending - INT2 */
-#define CAUSE_IP4 0x00000800 /* External level 4 pending - INT1 */
-#define CAUSE_IP3 0x00000400 /* External level 3 pending - INT0 */
-#define CAUSE_SW2 0x00000200 /* Software level 2 pending */
-#define CAUSE_SW1 0x00000100 /* Software level 1 pending */
-
-#define CAUSE_IPMASK 0x0000FF00 /* Pending interrupt mask */
-#define CAUSE_IPSHIFT 8
-
-#define CAUSE_EXCMASK 0x0000007C /* Cause code bits */
-
-#define CAUSE_EXCSHIFT 2
-
-/* Cause register exception codes */
-
-#define EXC_CODE(x) ((x)<<2)
-
-/* Hardware exception codes */
-#define EXC_INT EXC_CODE(0) /* interrupt */
-#define EXC_MOD EXC_CODE(1) /* TLB mod */
-#define EXC_RMISS EXC_CODE(2) /* Read TLB Miss */
-#define EXC_WMISS EXC_CODE(3) /* Write TLB Miss */
-#define EXC_RADE EXC_CODE(4) /* Read Address Error */
-#define EXC_WADE EXC_CODE(5) /* Write Address Error */
-#define EXC_IBE EXC_CODE(6) /* Instruction Bus Error */
-#define EXC_DBE EXC_CODE(7) /* Data Bus Error */
-#define EXC_SYSCALL EXC_CODE(8) /* SYSCALL */
-#define EXC_BREAK EXC_CODE(9) /* BREAKpoint */
-#define EXC_II EXC_CODE(10) /* Illegal Instruction */
-#define EXC_CPU EXC_CODE(11) /* CoProcessor Unusable */
-#define EXC_OV EXC_CODE(12) /* OVerflow */
-#define EXC_TRAP EXC_CODE(13) /* Trap exception */
-#define EXC_VCEI EXC_CODE(14) /* Virt. Coherency on Inst. fetch */
-#define EXC_FPE EXC_CODE(15) /* Floating Point Exception */
-#define EXC_WATCH EXC_CODE(23) /* Watchpoint reference */
-#define EXC_VCED EXC_CODE(31) /* Virt. Coherency on data read */
-
-/* C0_PRID Defines */
-#define C0_IMPMASK 0xff00
-#define C0_IMPSHIFT 8
-#define C0_REVMASK 0xff
-#define C0_MAJREVMASK 0xf0
-#define C0_MAJREVSHIFT 4
-#define C0_MINREVMASK 0xf
-
-/*
- * Coprocessor 0 operations
- */
-#define C0_READI 0x1 /* read ITLB entry addressed by C0_INDEX */
-#define C0_WRITEI 0x2 /* write ITLB entry addressed by C0_INDEX */
-#define C0_WRITER 0x6 /* write ITLB entry addressed by C0_RAND */
-#define C0_PROBE 0x8 /* probe for ITLB entry addressed by TLBHI */
-#define C0_RFE 0x10 /* restore for exception */
-
-/*
- * 'cache' instruction definitions
- */
-
-/* Target cache */
-#define CACH_PI 0x0 /* specifies primary inst. cache */
-#define CACH_PD 0x1 /* primary data cache */
-#define CACH_SI 0x2 /* secondary instruction cache */
-#define CACH_SD 0x3 /* secondary data cache */
-
-/* Cache operations */
-#define C_IINV 0x0 /* index invalidate (inst, 2nd inst) */
-#define C_IWBINV 0x0 /* index writeback inval (d, sd) */
-#define C_ILT 0x4 /* index load tag (all) */
-#define C_IST 0x8 /* index store tag (all) */
-#define C_CDX 0xc /* create dirty exclusive (d, sd) */
-#define C_HINV 0x10 /* hit invalidate (all) */
-#define C_HWBINV 0x14 /* hit writeback inv. (d, sd) */
-#define C_FILL 0x14 /* fill (i) */
-#define C_HWB 0x18 /* hit writeback (i, d, sd) */
-#define C_HSV 0x1c /* hit set virt. (si, sd) */
-
-/*
- * Cache size definitions
- */
-#define ICACHE_SIZE 0x4000 /* 16K */
-#define ICACHE_LINESIZE 32 /* 8 words */
-#define ICACHE_LINEMASK (ICACHE_LINESIZE-1)
-
-#define DCACHE_SIZE 0x2000 /* 8K */
-#define DCACHE_LINESIZE 16 /* 4 words */
-#define DCACHE_LINEMASK (DCACHE_LINESIZE-1)
-
-/*
- * C0_CONFIG register definitions
- */
-#define CONFIG_CM 0x80000000 /* 1 == Master-Checker enabled */
-#define CONFIG_EC 0x70000000 /* System Clock ratio */
-#define CONFIG_EC_1_1 0x6 /* System Clock ratio 1 :1 */
-#define CONFIG_EC_3_2 0x7 /* System Clock ratio 1.5 :1 */
-#define CONFIG_EC_2_1 0x0 /* System Clock ratio 2 :1 */
-#define CONFIG_EC_3_1 0x1 /* System Clock ratio 3 :1 */
-#define CONFIG_EP 0x0f000000 /* Transmit Data Pattern */
-#define CONFIG_SB 0x00c00000 /* Secondary cache block size */
-
-#define CONFIG_SS 0x00200000 /* Split scache: 0 == I&D combined */
-#define CONFIG_SW 0x00100000 /* scache port: 0==128, 1==64 */
-#define CONFIG_EW 0x000c0000 /* System Port width: 0==64, 1==32 */
-#define CONFIG_SC 0x00020000 /* 0 -> 2nd cache present */
-#define CONFIG_SM 0x00010000 /* 0 -> Dirty Shared Coherency enabled*/
-#define CONFIG_BE 0x00008000 /* Endian-ness: 1 --> BE */
-#define CONFIG_EM 0x00004000 /* 1 -> ECC mode, 0 -> parity */
-#define CONFIG_EB 0x00002000 /* Block order:1->sequent,0->subblock */
-
-#define CONFIG_IC 0x00000e00 /* Primary Icache size */
-#define CONFIG_DC 0x000001c0 /* Primary Dcache size */
-#define CONFIG_IB 0x00000020 /* Icache block size */
-#define CONFIG_DB 0x00000010 /* Dcache block size */
-#define CONFIG_CU 0x00000008 /* Update on Store-conditional */
-#define CONFIG_K0 0x00000007 /* K0SEG Coherency algorithm */
-
-#define CONFIG_UNCACHED 0x00000002 /* K0 is uncached */
-#define CONFIG_NONCOHRNT 0x00000003
-#define CONFIG_COHRNT_EXLWR 0x00000005
-#define CONFIG_SB_SHFT 22 /* shift SB to bit position 0 */
-#define CONFIG_IC_SHFT 9 /* shift IC to bit position 0 */
-#define CONFIG_DC_SHFT 6 /* shift DC to bit position 0 */
-#define CONFIG_BE_SHFT 15 /* shift BE to bit position 0 */
-
-/*
- * C0_TAGLO definitions for setting/getting cache states and physaddr bits
- */
-#define SADDRMASK 0xFFFFE000 /* 31..13 -> scache paddr bits 35..17 */
-#define SVINDEXMASK 0x00000380 /* 9..7: prim virt index bits 14..12 */
-#define SSTATEMASK 0x00001c00 /* bits 12..10 hold scache line state */
-#define SINVALID 0x00000000 /* invalid --> 000 == state 0 */
-#define SCLEANEXCL 0x00001000 /* clean exclusive --> 100 == state 4 */
-#define SDIRTYEXCL 0x00001400 /* dirty exclusive --> 101 == state 5 */
-#define SECC_MASK 0x0000007f /* low 7 bits are ecc for the tag */
-#define SADDR_SHIFT 4 /* shift STagLo (31..13) to 35..17 */
-
-#define PADDRMASK 0xFFFFFF00 /* PTagLo31..8->prim paddr bits35..12 */
-#define PADDR_SHIFT 4 /* roll bits 35..12 down to 31..8 */
-#define PSTATEMASK 0x00C0 /* bits 7..6 hold primary line state */
-#define PINVALID 0x0000 /* invalid --> 000 == state 0 */
-#define PCLEANEXCL 0x0080 /* clean exclusive --> 10 == state 2 */
-#define PDIRTYEXCL 0x00C0 /* dirty exclusive --> 11 == state 3 */
-#define PPARITY_MASK 0x0001 /* low bit is parity bit (even). */
-
-/*
- * C0_CACHE_ERR definitions.
- */
-#define CACHERR_ER 0x80000000 /* 0: inst ref, 1: data ref */
-#define CACHERR_EC 0x40000000 /* 0: primary, 1: secondary */
-#define CACHERR_ED 0x20000000 /* 1: data error */
-#define CACHERR_ET 0x10000000 /* 1: tag error */
-#define CACHERR_ES 0x08000000 /* 1: external ref, e.g. snoop*/
-#define CACHERR_EE 0x04000000 /* error on SysAD bus */
-#define CACHERR_EB 0x02000000 /* complicated, see spec. */
-#define CACHERR_EI 0x01000000 /* complicated, see spec. */
-#define CACHERR_SIDX_MASK 0x003ffff8 /* secondary cache index */
-#define CACHERR_PIDX_MASK 0x00000007 /* primary cache index */
-#define CACHERR_PIDX_SHIFT 12 /* bits 2..0 are paddr14..12 */
-
-/* R4000 family supports hardware watchpoints:
- * C0_WATCHLO:
- * bits 31..3 are bits 31..3 of physaddr to watch
- * bit 2: reserved; must be written as 0.
- * bit 1: when set causes a watchpoint trap on load accesses to paddr.
- * bit 0: when set traps on stores to paddr;
- * C0_WATCHHI
- * bits 31..4 are reserved and must be written as zeros.
- * bits 3..0 are bits 35..32 of the physaddr to watch
- */
-#define WATCHLO_WTRAP 0x00000001
-#define WATCHLO_RTRAP 0x00000002
-#define WATCHLO_ADDRMASK 0xfffffff8
-#define WATCHLO_VALIDMASK 0xfffffffb
-#define WATCHHI_VALIDMASK 0x0000000f
-
-/*
- * Coprocessor 0 registers
- */
-#ifdef _LANGUAGE_ASSEMBLY
-#define C0_INX $0
-#define C0_RAND $1
-#define C0_ENTRYLO0 $2
-#define C0_ENTRYLO1 $3
-#define C0_CONTEXT $4
-#define C0_PAGEMASK $5 /* page mask */
-#define C0_WIRED $6 /* # wired entries in tlb */
-#define C0_BADVADDR $8
-#define C0_COUNT $9 /* free-running counter */
-#define C0_ENTRYHI $10
-#define C0_SR $12
-#define C0_CAUSE $13
-#define C0_EPC $14
-#define C0_PRID $15 /* revision identifier */
-#define C0_COMPARE $11 /* counter comparison reg. */
-#define C0_CONFIG $16 /* hardware configuration */
-#define C0_LLADDR $17 /* load linked address */
-#define C0_WATCHLO $18 /* watchpoint */
-#define C0_WATCHHI $19 /* watchpoint */
-#define C0_ECC $26 /* S-cache ECC and primary parity */
-#define C0_CACHE_ERR $27 /* cache error status */
-#define C0_TAGLO $28 /* cache operations */
-#define C0_TAGHI $29 /* cache operations */
-#define C0_ERROR_EPC $30 /* ECC error prg. counter */
-
-# else /* ! _LANGUAGE_ASSEMBLY */
-
-#define C0_INX 0
-#define C0_RAND 1
-#define C0_ENTRYLO0 2
-#define C0_ENTRYLO1 3
-#define C0_CONTEXT 4
-#define C0_PAGEMASK 5 /* page mask */
-#define C0_WIRED 6 /* # wired entries in tlb */
-#define C0_BADVADDR 8
-#define C0_COUNT 9 /* free-running counter */
-#define C0_ENTRYHI 10
-#define C0_SR 12
-#define C0_CAUSE 13
-#define C0_EPC 14
-#define C0_PRID 15 /* revision identifier */
-#define C0_COMPARE 11 /* counter comparison reg. */
-#define C0_CONFIG 16 /* hardware configuration */
-#define C0_LLADDR 17 /* load linked address */
-#define C0_WATCHLO 18 /* watchpoint */
-#define C0_WATCHHI 19 /* watchpoint */
-#define C0_ECC 26 /* S-cache ECC and primary parity */
-#define C0_CACHE_ERR 27 /* cache error status */
-#define C0_TAGLO 28 /* cache operations */
-#define C0_TAGHI 29 /* cache operations */
-#define C0_ERROR_EPC 30 /* ECC error prg. counter */
-
-#endif /* _LANGUAGE_ASSEMBLY */
-
-/*
- * floating-point status register
- */
-#define FPCSR_FS 0x01000000 /* flush denorm to zero */
-#define FPCSR_C 0x00800000 /* condition bit */
-#define FPCSR_CE 0x00020000 /* cause: unimplemented operation */
-#define FPCSR_CV 0x00010000 /* cause: invalid operation */
-#define FPCSR_CZ 0x00008000 /* cause: division by zero */
-#define FPCSR_CO 0x00004000 /* cause: overflow */
-#define FPCSR_CU 0x00002000 /* cause: underflow */
-#define FPCSR_CI 0x00001000 /* cause: inexact operation */
-#define FPCSR_EV 0x00000800 /* enable: invalid operation */
-#define FPCSR_EZ 0x00000400 /* enable: division by zero */
-#define FPCSR_EO 0x00000200 /* enable: overflow */
-#define FPCSR_EU 0x00000100 /* enable: underflow */
-#define FPCSR_EI 0x00000080 /* enable: inexact operation */
-#define FPCSR_FV 0x00000040 /* flag: invalid operation */
-#define FPCSR_FZ 0x00000020 /* flag: division by zero */
-#define FPCSR_FO 0x00000010 /* flag: overflow */
-#define FPCSR_FU 0x00000008 /* flag: underflow */
-#define FPCSR_FI 0x00000004 /* flag: inexact operation */
-#define FPCSR_RM_MASK 0x00000003 /* rounding mode mask */
-#define FPCSR_RM_RN 0x00000000 /* round to nearest */
-#define FPCSR_RM_RZ 0x00000001 /* round to zero */
-#define FPCSR_RM_RP 0x00000002 /* round to positive infinity */
-#define FPCSR_RM_RM 0x00000003 /* round to negative infinity */
-
-#endif /* __R4300_H */
diff --git a/include/PR/abi.h b/include/PR/abi.h
deleted file mode 100644
index 551426951..000000000
--- a/include/PR/abi.h
+++ /dev/null
@@ -1,999 +0,0 @@
-#ifndef _ABI_H_
-#define _ABI_H_
-
-/**************************************************************************
- * *
- * Copyright (C) 1994, Silicon Graphics, Inc. *
- * *
- * These coded instructions, statements, and computer programs contain *
- * unpublished proprietary information of Silicon Graphics, Inc., and *
- * are protected by Federal copyright law. They may not be disclosed *
- * to third parties or copied or duplicated in any form, in whole or *
- * in part, without the prior written consent of Silicon Graphics, Inc. *
- * *
- **************************************************************************/
-
-/**************************************************************************
- *
- * $Revision: 1.32 $
- * $Date: 1997/02/11 08:16:37 $
- * $Source: /exdisk2/cvs/N64OS/Master/cvsmdev2/PR/include/abi.h,v $
- *
- **************************************************************************/
-
-/*
- * Header file for the Audio Binary Interface.
- * This is included in the Media Binary Interface file
- * mbi.h.
- *
- * This file follows the framework used for graphics.
- *
- */
-
-/* Audio commands: */
-#define A_SPNOOP 0
-#define A_ADPCM 1
-#define A_CLEARBUFF 2
-#define A_RESAMPLE 5
-#define A_SETBUFF 8
-#define A_DMEMMOVE 10
-#define A_LOADADPCM 11
-#define A_MIXER 12
-#define A_INTERLEAVE 13
-#define A_SETLOOP 15
-
-#if !(defined(VERSION_SH) || defined(VERSION_US) || defined(VERSION_EU))
-
-#define A_ENVMIXER 3
-#define A_LOADBUFF 4
-#define A_RESAMPLE 5
-#define A_SAVEBUFF 6
-#define A_SEGMENT 7
-#define A_SETVOL 9
-#define A_POLEF 14
-
-#else
-
-#define A_ADDMIXER 4
-#define A_RESAMPLE_ZOH 6
-#define A_SEGMENT 7
-#define A_DMEMMOVE2 16
-#define A_DOWNSAMPLE_HALF 17
-#define A_ENVSETUP1 18
-#define A_ENVMIXER 19
-#define A_LOADBUFF 20
-#define A_SAVEBUFF 21
-#define A_ENVSETUP2 22
-#define A_S8DEC 23
-#define A_HILOGAIN 24
-#define A_UNK_25 25
-#define A_DUPLICATE 26
-#define A_FILTER 27
-
-#endif
-
-#define ACMD_SIZE 32
-/*
- * Audio flags
- */
-
-#define A_INIT 0x01
-#define A_CONTINUE 0x00
-#define A_LOOP 0x02
-#define A_OUT 0x02
-#define A_LEFT 0x02
-#define A_RIGHT 0x00
-#define A_VOL 0x04
-#define A_RATE 0x00
-#define A_AUX 0x08
-#define A_NOAUX 0x00
-#define A_MAIN 0x00
-#define A_MIX 0x10
-
-/*
- * BEGIN C-specific section: (typedef's)
- */
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/*
- * Data Structures.
- */
-
-typedef struct {
- unsigned int cmd:8;
- unsigned int flags:8;
- unsigned int gain:16;
- unsigned int addr;
-} Aadpcm;
-
-typedef struct {
- unsigned int cmd:8;
- unsigned int flags:8;
- unsigned int gain:16;
- unsigned int addr;
-} Apolef;
-
-typedef struct {
- unsigned int cmd:8;
- unsigned int flags:8;
- unsigned int pad1:16;
- unsigned int addr;
-} Aenvelope;
-
-typedef struct {
- unsigned int cmd:8;
- unsigned int pad1:8;
- unsigned int dmem:16;
- unsigned int pad2:16;
- unsigned int count:16;
-} Aclearbuff;
-
-typedef struct {
- unsigned int cmd:8;
- unsigned int pad1:8;
- unsigned int pad2:16;
- unsigned int inL:16;
- unsigned int inR:16;
-} Ainterleave;
-
-typedef struct {
- unsigned int cmd:8;
- unsigned int pad1:24;
- unsigned int addr;
-} Aloadbuff;
-
-typedef struct {
- unsigned int cmd:8;
- unsigned int flags:8;
- unsigned int pad1:16;
- unsigned int addr;
-} Aenvmixer;
-
-typedef struct {
- unsigned int cmd:8;
- unsigned int flags:8;
- unsigned int gain:16;
- unsigned int dmemi:16;
- unsigned int dmemo:16;
-} Amixer;
-
-typedef struct {
- unsigned int cmd:8;
- unsigned int flags:8;
- unsigned int dmem2:16;
- unsigned int addr;
-} Apan;
-
-typedef struct {
- unsigned int cmd:8;
- unsigned int flags:8;
- unsigned int pitch:16;
- unsigned int addr;
-} Aresample;
-
-typedef struct {
- unsigned int cmd:8;
- unsigned int flags:8;
- unsigned int pad1:16;
- unsigned int addr;
-} Areverb;
-
-typedef struct {
- unsigned int cmd:8;
- unsigned int pad1:24;
- unsigned int addr;
-} Asavebuff;
-
-typedef struct {
- unsigned int cmd:8;
- unsigned int pad1:24;
- unsigned int pad2:2;
- unsigned int number:4;
- unsigned int base:24;
-} Asegment;
-
-typedef struct {
- unsigned int cmd:8;
- unsigned int flags:8;
- unsigned int dmemin:16;
- unsigned int dmemout:16;
- unsigned int count:16;
-} Asetbuff;
-
-typedef struct {
- unsigned int cmd:8;
- unsigned int flags:8;
- unsigned int vol:16;
- unsigned int voltgt:16;
- unsigned int volrate:16;
-} Asetvol;
-
-typedef struct {
- unsigned int cmd:8;
- unsigned int pad1:8;
- unsigned int dmemin:16;
- unsigned int dmemout:16;
- unsigned int count:16;
-} Admemmove;
-
-typedef struct {
- unsigned int cmd:8;
- unsigned int pad1:8;
- unsigned int count:16;
- unsigned int addr;
-} Aloadadpcm;
-
-typedef struct {
- unsigned int cmd:8;
- unsigned int pad1:8;
- unsigned int pad2:16;
- unsigned int addr;
-} Asetloop;
-
-/*
- * Generic Acmd Packet
- */
-
-typedef struct {
- uintptr_t w0;
- uintptr_t w1;
-} Awords;
-
-typedef union {
- Awords words;
-#if IS_BIG_ENDIAN && !IS_64_BIT
- Aadpcm adpcm;
- Apolef polef;
- Aclearbuff clearbuff;
- Aenvelope envelope;
- Ainterleave interleave;
- Aloadbuff loadbuff;
- Aenvmixer envmixer;
- Aresample resample;
- Areverb reverb;
- Asavebuff savebuff;
- Asegment segment;
- Asetbuff setbuff;
- Asetvol setvol;
- Admemmove dmemmove;
- Aloadadpcm loadadpcm;
- Amixer mixer;
- Asetloop setloop;
-#endif
- long long int force_union_align; /* dummy, force alignment */
-} Acmd;
-
-/*
- * ADPCM State
- */
-typedef short ADPCM_STATE[16];
-
-/*
- * Pole filter state
- */
-typedef short POLEF_STATE[4];
-
-/*
- * Resampler state
- */
-typedef short RESAMPLE_STATE[16];
-
-/*
- * Resampler constants
- */
-#define UNITY_PITCH 0x8000
-#define MAX_RATIO 1.99996 /* within .03 cents of +1 octave */
-
-/*
- * Enveloper/Mixer state
- */
-typedef short ENVMIX_STATE[40];
-
-/*
- * Macros to assemble the audio command list
- */
-
-/*
- * Info about parameters:
- *
- * A "count" in the following macros is always measured in bytes.
- *
- * All volumes/gains are in Q1.15 signed fixed point numbers:
- * 0x8000 is the minimum volume (-100%), negating the audio curve.
- * 0x0000 is silent.
- * 0x7fff is maximum volume (99.997%).
- *
- * All DRAM addresses refer to segmented addresses. A segment table shall
- * first be set up by calling aSegment for each segment. When a DRAM
- * address is later used as parameter, the 8 high bits will be an index
- * to the segment table and the lower 24 bits are added to the base address
- * stored in the segment table for this entry. The result is the physical address.
- * With the newer rsp audio code, this segment table is not used. The address is
- * used directly instead.
- *
- * Transfers to/from DRAM are executed using DMA and hence follow these restrictions:
- * All DRAM addresses should be aligned by 8 bytes, or they will be
- * rounded down to the nearest multiple of 8 bytes.
- * All DRAM lengths should be aligned by 8 bytes, or they will be
- * rounded up to the nearest multiple of 8 bytes.
- */
-
-/*
- * Decompresses ADPCM data.
- * Possible flags: A_INIT and A_LOOP.
- *
- * First set up internal data in DMEM:
- * aLoadADPCM(cmd++, nEntries * 16, physicalAddressOfBook)
- * aSetLoop(cmd++, physicalAddressOfLoopState) (if A_LOOP is set)
- *
- * Then before this command, call:
- * aSetBuffer(cmd++, 0, in, out, count)
- *
- * Note: count will be rounded up to the nearest multiple of 32 bytes.
- *
- * ADPCM decompression works on a block of 16 (uncompressed) samples.
- * The previous 2 samples and 9 bytes of input are decompressed to
- * 16 new samples using the code book previously loaded.
- *
- * Before the algorithm starts, the previous 16 samples are loaded according to flag:
- * A_INIT: all zeros
- * A_LOOP: the address set by aSetLoop
- * no flags: the DRAM address in the s parameter
- * These 16 samples are immediately copied to the destination address.
- *
- * The result of "count" bytes will be written after these 16 initial samples.
- * The last 16 samples written to the destination will also be written to
- * the state address in DRAM.
- */
-#define aADPCMdec(pkt, f, s) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_ADPCM, 24, 8) | _SHIFTL(f, 16, 8); \
- _a->words.w1 = (uintptr_t)(s); \
-}
-
-/*
- * Not used in SM64.
- */
-#define aPoleFilter(pkt, f, g, s) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = (_SHIFTL(A_POLEF, 24, 8) | _SHIFTL(f, 16, 8) | \
- _SHIFTL(g, 0, 16)); \
- _a->words.w1 = (uintptr_t)(s); \
-}
-
-/*
- * Clears DMEM data, where d is address and c is count, by writing zeros.
- *
- * Note: c is rounded up to the nearest multiple of 16 bytes.
- */
-#define aClearBuffer(pkt, d, c) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_CLEARBUFF, 24, 8) | _SHIFTL(d, 0, 24); \
- _a->words.w1 = (uintptr_t)(c); \
-}
-
-/*
- * Mixes an envelope with mono sound into 2 or 4 channels.
- * Possible flags: A_INIT, A_AUX (indicates that 4 channels should be used).
- *
- * Before this command, call:
- * aSetBuffer(cmd++, 0, inBuf, dryLeft, count)
- * aSetBuffer(cmd++, A_AUX, dryRight, wetLeft, wetRight)
- *
- * The first time (A_INIT is set), volume also needs to be set:
- * aSetVolume(cmd++, A_VOL | A_LEFT, initialVolumeLeft, 0, 0)
- * aSetVolume(cmd++, A_VOL | A_RIGHT, initialVolumeRight, 0, 0)
- * aSetVolume32(cmd++, A_RATE | A_LEFT, targetVolumeLeft, rampLeft)
- * aSetVolume32(cmd++, A_RATE | A_RIGHT, targetVolumeRight, rampRight)
- * aSetVolume(cmd++, A_AUX, dryVolume, 0, wetVolume)
- *
- * This command will now mix samples in inBuf into the destination buffers (dry and wet),
- * but with the volume increased (or decreased) from initial volumes to target volumes,
- * with the specified ramp rate. Once the target volume is reached, the volume stays
- * at that level. Before the samples are finally mixed (added) into the destination
- * buffers (dry and wet), the volume is changed according to dryVolume and wetVolume.
- *
- * Note: count will be rounded up to the nearest multiple of 16 bytes.
- * Note: the wet channels are used for reverb.
- *
- */
-#define aEnvMixer(pkt, f, s) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_ENVMIXER, 24, 8) | _SHIFTL(f, 16, 8); \
- _a->words.w1 = (uintptr_t)(s); \
-}
-
-/*
- * Interleaves two mono channels into stereo.
- *
- * First call:
- * aSetBuffer(cmd++, 0, 0, output, count)
- *
- * The count refers to the size of each input. Hence 2 * count bytes will be written out.
- * A left sample will be placed before the right sample.
- *
- * Note: count will be rounded up to the nearest multiple of 16 bytes.
- */
-#define aInterleave(pkt, l, r) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_INTERLEAVE, 24, 8); \
- _a->words.w1 = _SHIFTL(l, 16, 16) | _SHIFTL(r, 0, 16); \
-}
-
-/*
- * Loads a buffer from DRAM to DMEM.
- *
- * First call:
- * aSetBuffer(cmd++, 0, in, 0, count)
- *
- * The in parameter to aSetBuffer is the destination in DMEM and the
- * s parameter to this command is the source in DRAM.
- */
-#define aLoadBuffer(pkt, s) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_LOADBUFF, 24, 8); \
- _a->words.w1 = (uintptr_t)(s); \
-}
-
-/*
- * Mixes audio.
- * Possible flags: no flags used, although parameter present.
- *
- * First call:
- * aSetBuffer(cmd++, 0, 0, 0, count)
- *
- * Input and output addresses are taken from the i and o parameters.
- * The volume with which the input is changed is taken from the g parameter.
- * After the volume of the input samples have been changed, the result
- * is added to the output.
- *
- * Note: count will be rounded up to the nearest multiple of 32 bytes.
- */
-#define aMix(pkt, f, g, i, o) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = (_SHIFTL(A_MIXER, 24, 8) | _SHIFTL(f, 16, 8) | \
- _SHIFTL(g, 0, 16)); \
- _a->words.w1 = _SHIFTL(i,16, 16) | _SHIFTL(o, 0, 16); \
-}
-
-// Not present in the audio microcode.
-#define aPan(pkt, f, d, s) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = (_SHIFTL(A_PAN, 24, 8) | _SHIFTL(f, 16, 8) | \
- _SHIFTL(d, 0, 16)); \
- _a->words.w1 = (uintptr_t)(s); \
-}
-
-/*
- * Resamples audio.
- * Possible flags: A_INIT, A_OUT? (not used in SM64).
- *
- * First call:
- * aSetBuffer(cmd++, 0, in, out, count)
- *
- * This command resamples the audio using the given frequency ratio (pitch)
- * using a filter that uses a window of 4 source samples. This can be used
- * either for just resampling audio to be able to be played back at a different
- * sample rate, or to change the pitch if the result is played back at
- * the same sample rate as the input.
- *
- * The frequency ratio is given in UQ1.15 fixed point format.
- * For no change in frequency, use pitch 0x8000.
- * For 1 octave up or downsampling to (roughly) half number of samples, use pitch 0xffff.
- * For 1 octave down or upsampling to double as many samples, use pitch 0x4000.
- *
- * Note: count represents the number of output sample bytes and is rounded up to
- * the nearest multiple of 16 bytes.
- *
- * The state consists of the four following source samples when the algorithm stopped as
- * well as a fractional position, and is initialized to all zeros if A_INIT is given.
- * Otherwise it is loaded from DRAM at address s.
- *
- * The algorithm starts by writing the four source samples from the state (or zero)
- * to just before the input address given. It then creates one output sample by examining
- * the four next source samples and then moving the source position zero or more
- * samples forward. The first output sample (when A_INIT is given) is always 0.
- *
- * When "count" bytes have been written, the following four source samples
- * are written to the state in DRAM as well as a fractional position.
- */
-#define aResample(pkt, f, p, s) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = (_SHIFTL(A_RESAMPLE, 24, 8) | _SHIFTL(f, 16, 8) |\
- _SHIFTL(p, 0, 16)); \
- _a->words.w1 = (uintptr_t)(s); \
-}
-
-/*
- * Stores a buffer in DMEM to DRAM.
- *
- * First call:
- * aSetBuffer(cmd++, 0, 0, out, count)
- *
- * The out parameter to aSetBuffer is the source in DMEM and the
- * s parameter to this command is the destination in DRAM.
- */
-#define aSaveBuffer(pkt, s) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_SAVEBUFF, 24, 8); \
- _a->words.w1 = (uintptr_t)(s); \
-}
-
-/*
- * Sets up an entry in the segment table.
- *
- * The s parameter is a segment index, 0 to 15.
- * The b parameter is the base offset.
- */
-#define aSegment(pkt, s, b) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_SEGMENT, 24, 8); \
- _a->words.w1 = _SHIFTL(s, 24, 8) | _SHIFTL(b, 0, 24); \
-}
-
-/*
- * Sets internal DMEM buffer addresses used for later commands.
- * See each command for how to use aSetBuffer.
- */
-#define aSetBuffer(pkt, f, i, o, c) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = (_SHIFTL(A_SETBUFF, 24, 8) | _SHIFTL(f, 16, 8) | \
- _SHIFTL(i, 0, 16)); \
- _a->words.w1 = _SHIFTL(o, 16, 16) | _SHIFTL(c, 0, 16); \
-}
-
-/*
- * Sets internal volume parameters.
- * See aEnvMixer for more info.
- */
-#define aSetVolume(pkt, f, v, t, r) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = (_SHIFTL(A_SETVOL, 24, 8) | _SHIFTL(f, 16, 16) | \
- _SHIFTL(v, 0, 16)); \
- _a->words.w1 = _SHIFTL(t, 16, 16) | _SHIFTL(r, 0, 16); \
-}
-
-/*
- * Sets the address to ADPCM loop state.
- *
- * The a parameter is a DRAM address.
- * See aADPCMdec for more info.
- */
-#define aSetLoop(pkt, a) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- _a->words.w0 = _SHIFTL(A_SETLOOP, 24, 8); \
- _a->words.w1 = (uintptr_t)(a); \
-}
-
-/*
- * Copies memory in DMEM.
- *
- * Copies c bytes from address i to address o.
- *
- * Note: count is rounded up to the nearest multiple of 16 bytes.
- *
- * Note: This acts as memcpy where 16 bytes are moved at a time, therefore
- * if input and output overlap, output address should be less than input address.
- */
-#define aDMEMMove(pkt, i, o, c) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_DMEMMOVE, 24, 8) | _SHIFTL(i, 0, 24); \
- _a->words.w1 = _SHIFTL(o, 16, 16) | _SHIFTL(c, 0, 16); \
-}
-
-/*
- * Loads ADPCM book from DRAM into DMEM.
- *
- * This command loads ADPCM table entries from DRAM to DMEM.
- *
- * The count parameter c should be a multiple of 16 bytes.
- * The d parameter is a DRAM address.
- */
-#define aLoadADPCM(pkt, c, d) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_LOADADPCM, 24, 8) | _SHIFTL(c, 0, 24); \
- _a->words.w1 = (uintptr_t) (d); \
-}
-
-// This is a version of aSetVolume which takes a single 32-bit parameter
-// instead of two 16-bit ones. According to AziAudio, it is used to set
-// ramping values when neither bit 4 nor bit 8 is set in the flags parameter.
-// It does not appear in the official abi.h header.
-/*
- * Sets internal volume parameters.
- * See aEnvMixer for more info.
- */
-#define aSetVolume32(pkt, f, v, tr) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = (_SHIFTL(A_SETVOL, 24, 8) | _SHIFTL(f, 16, 16) | \
- _SHIFTL(v, 0, 16)); \
- _a->words.w1 = (uintptr_t)(tr); \
-}
-
-#if defined(VERSION_SH) || defined(VERSION_US) || defined (VERSION_EU)
-#undef aLoadBuffer
-#undef aSaveBuffer
-#undef aMix
-#undef aEnvMixer
-// #undef aInterleave
-
-// New or modified operations in the new audio microcode below
-
-/**
- * Decompresses S8 data.
- * Possible flags: A_INIT and A_LOOP.
- *
- * First set up internal data in DMEM:
- * aSetLoop(cmd++, physicalAddressOfLoopState) (if A_LOOP is set)
- *
- * Then before this command, call:
- * aSetBuffer(cmd++, 0, in, out, count)
- *
- * Note: count will be rounded up to the nearest multiple of 32 bytes.
- *
- * S8 decompression works by expanding s8 bytes into s16 numbers,
- * by performing a left shift of 8 steps.
- *
- * Before the algorithm starts, the previous 16 samples are loaded according to flag:
- * A_INIT: all zeros
- * A_LOOP: the address set by aSetLoop
- * no flags: the DRAM address in the s parameter
- * These 16 samples are immediately copied to the destination address.
- *
- * The result of "count" bytes will be written after these 16 initial samples.
- * The last 16 samples written to the destination will also be written to
- * the state address in DRAM.
- */
-#define aS8Dec(pkt, f, s) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_S8DEC, 24, 8) | _SHIFTL(f, 16, 8); \
- _a->words.w1 = (uintptr_t)(s); \
-}
-
-/*
- * Mix two tracks by simple clamped addition.
- *
- * s: DMEM source track 1
- * d: DMEM source track 2 and destination
- * c: number of bytes to write
- *
- * Note: count is first rounded down to the nearest multiple of 16 bytes
- * and then rounded up to the nearest multiple of 64 bytes.
- */
-#define aAddMixer(pkt, s, d, c) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = (_SHIFTL(A_ADDMIXER, 24, 8) | \
- _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(0x7fff, 0, 16)); \
- _a->words.w1 = (_SHIFTL(s, 16, 16) | _SHIFTL(d, 0, 16)); \
-}
-
-/*
- * Loads a buffer from DRAM to DMEM.
- *
- * s: DRAM source
- * d: DMEM destination
- * c: number of bytes to copy (rounded down to 16 byte alignment)
- */
-#define aLoadBuffer(pkt, s, d, c) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_LOADBUFF, 24, 8) | \
- _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(d, 0, 16); \
- _a->words.w1 = (uintptr_t)(s); \
-}
-
-/*
- * Stores a buffer from DMEM to DRAM.
- *
- * s: DMEM source
- * d: DRAM destination
- * c: number of bytes to copy (rounded down to 16 byte alignment)
- */
-#define aSaveBuffer(pkt, s, d, c) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_SAVEBUFF, 24, 8) | \
- _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(s, 0, 16); \
- _a->words.w1 = (uintptr_t)(d); \
-}
-
-/*
- * Duplicates 128 bytes of data a number of times.
- *
- * 128 bytes are read from source DMEM address s.
- * Then c identical copies of these bytes are written to DMEM address d.
- */
-#define aDuplicate(pkt, s, d, c) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = (_SHIFTL(A_DUPLICATE, 24, 8) | \
- _SHIFTL(c, 16, 8) | _SHIFTL(s, 0, 16)); \
- _a->words.w1 = (_SHIFTL(d, 16, 16) | _SHIFTL(0x80, 0, 16)); \
-}
-
-/*
- * Copies memory in DMEM, second version.
- *
- * Copies t * c bytes from address i to address o.
- *
- * Note: count is first rounded up to the nearest multiple of 32 bytes,
- * before the multiplication by t.
- *
- * Note: This acts as memcpy where 32 bytes are moved at a time, therefore
- * if input and output overlap, output address should be less than input address.
- *
- * Not used in SM64.
- */
-#define aDMEMMove2(pkt, t, i, o, c) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_DMEMMOVE2, 24, 8) | \
- _SHIFTL(t, 16, 8) | _SHIFTL(i, 0, 16); \
- _a->words.w1 = _SHIFTL(o, 16, 16) | _SHIFTL(c, 0, 16); \
-}
-
-/*
- * Fast resample.
- *
- * Before this command, call:
- * aSetBuffer(cmd++, 0, in, out, count)
- *
- * This works like the other resample command but just takes the "nearest" sample,
- * instead of a function of the four nearest samples.
- *
- * Initially the current position is calculated as (in << 16) + startFract.
- * For every sample to create, the value is simply taken from the sample
- * at address ((position >> 17) << 1). Then the current position is incremented
- * by (pitch << 2).
- *
- * Note: count represents the number of output bytes to create, and is
- * rounded up to the nearest multiple of 8 bytes.
- */
-#define aResampleZoh(pkt, pitch, startFract) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = (_SHIFTL(A_RESAMPLE_ZOH, 24, 8) | \
- _SHIFTL(pitch, 0, 16)); \
- _a->words.w1 = _SHIFTL(startFract, 0, 16); \
-}
-
-/*
- * Fast downsampling by taking every other sample, discarding others.
- *
- * Note: nSamples refers to the number of output samples to create, and
- * is first rounded up to the nearest multiple of 8.
- */
-#define aDownsampleHalf(pkt, nSamples, i, o) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = (_SHIFTL(A_DOWNSAMPLE_HALF, 24, 8) | \
- _SHIFTL(nSamples, 0, 16)); \
- _a->words.w1 = _SHIFTL(i, 16, 16) | _SHIFTL(o, 0, 16); \
-}
-
-/*
- * Mixes audio.
- *
- * Input and output addresses are taken from the i and o parameters.
- * The volume with which the input is changed is taken from the g parameter.
- * After the volume of the input samples have been changed, the result
- * is added to the output.
- *
- * Note: count is first rounded down to the nearest multiple of 16 bytes
- * and then rounded up to the nearest multiple of 32 bytes.
- */
-#define aMix(pkt, g, i, o, c) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = (_SHIFTL(A_MIXER, 24, 8) | \
- _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(g, 0, 16)); \
- _a->words.w1 = _SHIFTL(i, 16, 16) | _SHIFTL(o, 0, 16); \
-}
-
-/*
- * See aEnvMixer for more info.
- */
-#define aEnvSetup1(pkt, initialVolReverb, rampReverb, rampLeft, rampRight) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = (_SHIFTL(A_ENVSETUP1, 24, 8) | \
- _SHIFTL(initialVolReverb, 16, 8) | \
- _SHIFTL(rampReverb, 0, 16)); \
- _a->words.w1 = _SHIFTL(rampLeft, 16, 16) | \
- _SHIFTL(rampRight, 0, 16); \
-}
-
-/*
- * See aEnvMixer for more info.
- */
-#define aEnvSetup2(pkt, initialVolLeft, initialVolRight) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_ENVSETUP2, 24, 8); \
- _a->words.w1 = _SHIFTL(initialVolLeft, 16, 16) | \
- _SHIFTL(initialVolRight, 0, 16); \
-}
-
-/*
- * Mixes an envelope with mono sound into 4 channels.
- *
- * To allow for many parameters, a sequence of aEnvSetup1, aEnvSetup2,
- * aEnvMixer shall always be called.
- *
- * The function works in blocks of 8 samples.
- * However, nSamples is rounded up to the nearest multiple of 16 samples.
- *
- * For each sample in a block:
- * 1. sampleLeft = in * volLeft * (negLeft ? -1 : 1)
- * 2. sampleRight = in * volRight * (negRight ? -1 : 1)
- * 3. dryLeft += sampleLeft
- * 4. dryRight += sampleRight
- * 5. if swapReverb: swap sampleLeft and sampleRight
- * 6. wetLeft += sampleLeft * volReverb
- * 7. wetRight += sampleRight * volReverb
- *
- * After each block, all vol variables are added by their corresponding
- * ramp value.
- *
- * Each volume variable is treated as a UQ0.16 number. Make sure
- * the ramp additions don't overflow, or wrapping will occur.
- * The initialVolReverb parameter is only 8 bits, but will be left
- * shifted 8 bits by the rsp.
- */
-#define aEnvMixer(pkt, inBuf, nSamples, swapReverb, negLeft, negRight, \
- dryLeft, dryRight, wetLeft, wetRight) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = (_SHIFTL(A_ENVMIXER, 24, 8) | \
- _SHIFTL((inBuf) >> 4, 16, 8) | \
- _SHIFTL(nSamples, 8, 8)) | \
- _SHIFTL(swapReverb, 2, 1) | _SHIFTL(negLeft, 1, 1) |\
- _SHIFTL(negRight, 0, 1); \
- _a->words.w1 = _SHIFTL((dryLeft) >> 4, 24, 8) | \
- _SHIFTL((dryRight) >> 4, 16, 8) | \
- _SHIFTL((wetLeft) >> 4, 8, 8) | \
- _SHIFTL((wetRight) >> 4, 0, 8); \
-}
-
-/*
- * Interleaves two mono channels into stereo.
- *
- * The count refers to the size of each input. Hence 2 * count bytes
- * will be written out.
- *
- * A left sample will be placed before the right sample.
- * All addresses (output, left, right) are DMEM addresses.
- *
- * Note: count will be rounded up to the nearest multiple of 8 bytes.
- * The previous version of this function rounded up to the nearest
- * multiple of 16 bytes.
- */
-/*
-#define aInterleave(pkt, o, l, r, c) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_INTERLEAVE, 24, 8) | \
- _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(o, 0, 16); \
- _a->words.w1 = _SHIFTL(l, 16, 16) | _SHIFTL(r, 0, 16); \
-}
-*/
-
-/*
- * Linear filter function.
- *
- * Calculates out[i] = sum all elements in the vector in[i..i-7] * filter[0..7],
- * where "*" represents dot multiplication. The input/output contains s16
- * samples and filter contains Q1.15 signed fixed point numbers.
- * Every result sample is rounded and clamped.
- *
- * First initiate by calling with the flag f set to 2, countOrBuf contains
- * the length in bytes that shall be processed in the next call. The addr
- * parameter shall contain the DRAM address to the filter table (16 bytes).
- * The count will be rounded up to the nearest multiple of 16 bytes.
- *
- * The aFilter function shall then be called in direct succession, with flag
- * set to either 0 or 1. The countOrBuf parameter shall contain the DMEM
- * address for the input/output. The addr parameter shall contain the DRAM
- * address for the state, containing the last previous 8 input samples.
- * The state is always written to upon exit, but is only read at entry if
- * the flag is 0 (otherwise all-zero samples are used instead).
- */
-#define aFilter(pkt, f, countOrBuf, addr) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_FILTER, 24, 8) | _SHIFTL((f), 16, 8) | \
- _SHIFTL((countOrBuf), 0, 16); \
- _a->words.w1 = (uintptr_t)(addr); \
-}
-
-/*
- * Modifies the volume of samples using a simple UQ4.4 gain multiplier.
- *
- * Performs the following:
- *
- * 1. Count c is rounded up to 32 byte alignment
- * 2. g is a u8 that contains a UQ4.4 number
- * 3. Modify each sample s, so that s = clamp_s16(s * g >> 4)
- */
-#define aHiLoGain(pkt, g, buflen, i) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_HILOGAIN, 24, 8) | \
- _SHIFTL((g), 16, 8) | _SHIFTL((buflen), 0, 16); \
- _a->words.w1 = _SHIFTL((i), 16, 16); \
-}
-
-/*
- * Performs the following:
- *
- * 1. Count c is rounded up to 64 byte alignment
- * 2. f is added to i
- * 3. i and o are from now treated as s16 pointers
- * 4. 32 s16 samples are loaded from i to tbl
- * 5. for (u32 idx = 0; idx * sizeof(s16) < c; idx++)
- * o[idx] = clamp_s16((s32)o[idx] * (s32)tbl[idx % 32]);
- */
-#define aUnknown25(pkt, f, c, o, i) \
-{ \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = (_SHIFTL(A_UNK_25, 24, 8) | \
- _SHIFTL((f), 16, 8) | _SHIFTL((c), 0, 16)); \
- _a->words.w1 = _SHIFTL((o), 16, 16) | _SHIFTL((i), 0, 16); \
-}
-
-#endif
-
-#endif /* _LANGUAGE_C */
-
-#endif /* !_ABI_H_ */
diff --git a/include/PR/gbi.h b/include/PR/gbi.h
deleted file mode 100644
index a1b8eb0c0..000000000
--- a/include/PR/gbi.h
+++ /dev/null
@@ -1,4750 +0,0 @@
-/**************************************************************************
- * *
- * Copyright (C) 1994, Silicon Graphics, Inc. *
- * *
- * These coded instructions, statements, and computer programs contain *
- * unpublished proprietary information of Silicon Graphics, Inc., and *
- * are protected by Federal copyright law. They may not be disclosed *
- * to third parties or copied or duplicated in any form, in whole or *
- * in part, without the prior written consent of Silicon Graphics, Inc. *
- * *
- **************************************************************************/
-/**************************************************************************
- *
- * $Revision: 1.141 $
- * $Date: 1999/09/03 03:43:08 $
- * $Source: /exdisk2/cvs/N64OS/Master/cvsmdev2/PR/include/gbi.h,v $
- *
- **************************************************************************/
-
-#ifndef _GBI_H_
-#define _GBI_H_
-
-#include <PR/ultratypes.h>
-
-/*
- * To use the F3DEX ucodes, define F3DEX_GBI before include this file.
- *
- * #define F3DEX_GBI
- * #include <ultra64.h>
- *
- * or
- *
- * cc -c -DF3DEX_GBI -I.... foo.c
- *
- */
-
-/**************************************************************************
- *
- * Graphics Binary Interface
- *
- **************************************************************************/
-
-/*
- * Graphics Commands, 'xxx' parts may be generated from ucode
- *
- * The command format is
- *
- * |00xxxxxx| = DMA 0,..,127
- * |10xxxxxx| = Immediate Mode -65,..,-128
- * |11xxxxxx| = RDP cmds -1,..,-64
- *
- * Note: in order for the RSP microcode to process RDP commands opaquely,
- * we need to further identify those RDP commands that need DRAM address
- * "fixup". To do this, we have the dummy command G_RDP_ADDR_FIXUP, and
- * all |RDP commands| less than this are commands with embedded DRAM
- * addresses. Further, the format of these commands should be similar so
- * only one fixup routine is needed.
- *
- * Further explanation:
- * The names of the commands are somewhat misleading. Here is clarification:
- *
- * - a 'DMA' type command has a pointer to additional data and
- * causes a DMA transfer to bring that into DMEM.
- *
- * - an 'Immediate' type command isn't really 'immediate', in the
- * traditional sense. This just means that the entire command fits
- * in the 64-bit word, and the ucode can execute it 'immediately'
- * without additional memory transfers.
- *
- * - an 'RDP' command is identified as such because the RDP
- * commands can be passed-thru the RSP and sent to the RDP
- * directly. One further confusing thing, is that some 'DP'
- * macros below actually generate immediate commands, not
- * not direct DP commands.
- *
- * IMPLEMENTATION NOTE:
- * There is another group of RDP commands that includes the triangle commands
- * generated by the RSP code. These are the raw commands the rasterizer
- * hardware chews on, with slope info, etc. They will follow the RDP
- * ordering...
- *
- * IMPLEMENTATION NOTE:
- * The RDP hardware has some of these bit patterns wired up. If the hardware
- * changes, we must adjust this table, likewise we can't change/add things
- * once the hardware is frozen. (actually, the RDP hardware only looks at
- * the lower 6 bits of the command byte)
- *
- */
-
-#ifdef F3DEX_GBI_2
-# ifndef F3DEX_GBI
-# define F3DEX_GBI
-# endif
-#define G_NOOP 0x00
-#define G_RDPHALF_2 0xf1
-#define G_SETOTHERMODE_H 0xe3
-#define G_SETOTHERMODE_L 0xe2
-#define G_RDPHALF_1 0xe1
-#define G_SPNOOP 0xe0
-#define G_ENDDL 0xdf
-#define G_DL 0xde
-#define G_LOAD_UCODE 0xdd
-#define G_MOVEMEM 0xdc
-#define G_MOVEWORD 0xdb
-#define G_MTX 0xda
-#define G_GEOMETRYMODE 0xd9
-#define G_POPMTX 0xd8
-#define G_TEXTURE 0xd7
-#define G_DMA_IO 0xd6
-#define G_SPECIAL_1 0xd5
-#define G_SPECIAL_2 0xd4
-#define G_SPECIAL_3 0xd3
-
-#define G_VTX 0x01
-#define G_MODIFYVTX 0x02
-#define G_CULLDL 0x03
-#define G_BRANCH_Z 0x04
-#define G_TRI1 0x05
-#define G_TRI2 0x06
-#define G_QUAD 0x07
-#define G_LINE3D 0x08
-#else /* F3DEX_GBI_2 */
-
-/* DMA commands: */
-#define G_SPNOOP 0 /* handle 0 gracefully */
-#define G_MTX 1
-#define G_RESERVED0 2 /* not implemeted */
-#define G_MOVEMEM 3 /* move a block of memory (up to 4 words) to dmem */
-#define G_VTX 4
-#define G_RESERVED1 5 /* not implemeted */
-#define G_DL 6
-#define G_RESERVED2 7 /* not implemeted */
-#define G_RESERVED3 8 /* not implemeted */
-#define G_SPRITE2D_BASE 9 /* sprite command */
-
-/* IMMEDIATE commands: */
-#define G_IMMFIRST -65
-#define G_TRI1 (G_IMMFIRST-0)
-#define G_CULLDL (G_IMMFIRST-1)
-#define G_POPMTX (G_IMMFIRST-2)
-#define G_MOVEWORD (G_IMMFIRST-3)
-#define G_TEXTURE (G_IMMFIRST-4)
-#define G_SETOTHERMODE_H (G_IMMFIRST-5)
-#define G_SETOTHERMODE_L (G_IMMFIRST-6)
-#define G_ENDDL (G_IMMFIRST-7)
-#define G_SETGEOMETRYMODE (G_IMMFIRST-8)
-#define G_CLEARGEOMETRYMODE (G_IMMFIRST-9)
-#define G_LINE3D (G_IMMFIRST-10)
-#define G_RDPHALF_1 (G_IMMFIRST-11)
-#define G_RDPHALF_2 (G_IMMFIRST-12)
-#define G_RDPHALF_CONT (G_IMMFIRST-13) // From F3D_OLD used to render lap & timer UI.
-#if (defined(F3DEX_GBI)||defined(F3DLP_GBI))
-#ifndef F3D_OLD
-# define G_MODIFYVTX (G_IMMFIRST-13) // older versions of f3dex still used G_RDPHALF_CONT
-#endif
-# define G_TRI2 (G_IMMFIRST-14)
-# define G_BRANCH_Z (G_IMMFIRST-15)
-# define G_LOAD_UCODE (G_IMMFIRST-16)
-# define G_QUAD (G_IMMFIRST-10)
-#endif
-
-/* We are overloading 2 of the immediate commands
- to keep the byte alignment of dmem the same */
-
-#define G_SPRITE2D_SCALEFLIP (G_IMMFIRST-1)
-#define G_SPRITE2D_DRAW (G_IMMFIRST-2)
-
-/* RDP commands: */
-#define G_NOOP 0xc0 /* 0 */
-
-#endif /* F3DEX_GBI_2 */
-
-/* RDP commands: */
-#define G_SETCIMG 0xff /* -1 */
-#define G_SETZIMG 0xfe /* -2 */
-#define G_SETTIMG 0xfd /* -3 */
-#define G_SETCOMBINE 0xfc /* -4 */
-#define G_SETENVCOLOR 0xfb /* -5 */
-#define G_SETPRIMCOLOR 0xfa /* -6 */
-#define G_SETBLENDCOLOR 0xf9 /* -7 */
-#define G_SETFOGCOLOR 0xf8 /* -8 */
-#define G_SETFILLCOLOR 0xf7 /* -9 */
-#define G_FILLRECT 0xf6 /* -10 */
-#define G_SETTILE 0xf5 /* -11 */
-#define G_LOADTILE 0xf4 /* -12 */
-#define G_LOADBLOCK 0xf3 /* -13 */
-#define G_SETTILESIZE 0xf2 /* -14 */
-#define G_LOADTLUT 0xf0 /* -16 */
-#define G_RDPSETOTHERMODE 0xef /* -17 */
-#define G_SETPRIMDEPTH 0xee /* -18 */
-#define G_SETSCISSOR 0xed /* -19 */
-#define G_SETCONVERT 0xec /* -20 */
-#define G_SETKEYR 0xeb /* -21 */
-#define G_SETKEYGB 0xea /* -22 */
-#define G_RDPFULLSYNC 0xe9 /* -23 */
-#define G_RDPTILESYNC 0xe8 /* -24 */
-#define G_RDPPIPESYNC 0xe7 /* -25 */
-#define G_RDPLOADSYNC 0xe6 /* -26 */
-#define G_TEXRECTFLIP 0xe5 /* -27 */
-#define G_TEXRECT 0xe4 /* -28 */
-
-
-/*
- * The following commands are the "generated" RDP commands; the user
- * never sees them, the RSP microcode generates them.
- *
- * The layout of the bits is magical, to save work in the ucode.
- * These id's are -56, -52, -54, -50, -55, -51, -53, -49, ...
- * edge, shade, texture, zbuff bits: estz
- */
-#define G_TRI_FILL 0xc8 /* fill triangle: 11001000 */
-#define G_TRI_SHADE 0xcc /* shade triangle: 11001100 */
-#define G_TRI_TXTR 0xca /* texture triangle: 11001010 */
-#define G_TRI_SHADE_TXTR 0xce /* shade, texture triangle: 11001110 */
-#define G_TRI_FILL_ZBUFF 0xc9 /* fill, zbuff triangle: 11001001 */
-#define G_TRI_SHADE_ZBUFF 0xcd /* shade, zbuff triangle: 11001101 */
-#define G_TRI_TXTR_ZBUFF 0xcb /* texture, zbuff triangle: 11001011 */
-#define G_TRI_SHADE_TXTR_ZBUFF 0xcf /* shade, txtr, zbuff trngl: 11001111 */
-
-/*
- * A TRI_FILL triangle is just the edges. You need to set the DP
- * to use primcolor, in order to see anything. (it is NOT a triangle
- * that gets rendered in 'fill mode'. Triangles can't be rendered
- * in 'fill mode')
- *
- * A TRI_SHADE is a gouraud triangle that has colors interpolated.
- * Flat-shaded triangles (from the software) are still gouraud shaded,
- * it's just the colors are all the same and the deltas are 0.
- *
- * Other triangle types, and combinations are more obvious.
- */
-
-/* masks to build RDP triangle commands: */
-#define G_RDP_TRI_FILL_MASK 0x08
-#define G_RDP_TRI_SHADE_MASK 0x04
-#define G_RDP_TRI_TXTR_MASK 0x02
-#define G_RDP_TRI_ZBUFF_MASK 0x01
-
-/*
- * HACK:
- * This is a dreadful hack. For version 1.0 hardware, there are still
- * some 'bowtie' hangs. This parameter can be increased to avoid
- * the hangs. Every increase of 4 chops one scanline off of every
- * triangle. Values of 4,8,12 should be sufficient to avoid any
- * bowtie hang.
- *
- * Change this value, then recompile ALL of your program (including static
- * display lists!)
- *
- * THIS WILL BE REMOVED FOR HARDWARE VERSION 2.0!
- */
-#define BOWTIE_VAL 0
-
-
-/* gets added to RDP command, in order to test for addres fixup: */
-#define G_RDP_ADDR_FIXUP 3 /* |RDP cmds| <= this, do addr fixup */
-#ifdef _LANGUAGE_ASSEMBLY
-#define G_RDP_TEXRECT_CHECK ((-1*G_TEXRECTFLIP)& 0xff)
-#endif
-
-/* macros for command parsing: */
-#define GDMACMD(x) (x)
-#define GIMMCMD(x) (G_IMMFIRST-(x))
-#define GRDPCMD(x) (0xff-(x))
-
-#define G_DMACMDSIZ 128
-#define G_IMMCMDSIZ 64
-#define G_RDPCMDSIZ 64
-
-/*
- * Coordinate shift values, number of bits of fraction
- */
-#define G_TEXTURE_IMAGE_FRAC 2
-#define G_TEXTURE_SCALE_FRAC 16
-#define G_SCALE_FRAC 8
-#define G_ROTATE_FRAC 16
-
-/*
- * Parameters to graphics commands
- */
-
-/*
- * Data packing macros
- */
-
-/*
- * Maximum z-buffer value, used to initialize the z-buffer.
- * Note : this number is NOT the viewport z-scale constant.
- * See the comment next to G_MAXZ for more info.
- */
-#define G_MAXFBZ 0x3fff /* 3b exp, 11b mantissa */
-
-#define GPACK_RGBA5551(r, g, b, a) ((((r)<<8) & 0xf800) | \
- (((g)<<3) & 0x7c0) | \
- (((b)>>2) & 0x3e) | ((a) & 0x1))
-#define GPACK_ZDZ(z, dz) ((z) << 2 | (dz))
-
-/*
- * G_MTX: parameter flags
- */
-#ifdef F3DEX_GBI_2
-# define G_MTX_MODELVIEW 0x00 /* matrix types */
-# define G_MTX_PROJECTION 0x04
-# define G_MTX_MUL 0x00 /* concat or load */
-# define G_MTX_LOAD 0x02
-# define G_MTX_NOPUSH 0x00 /* push or not */
-# define G_MTX_PUSH 0x01
-#else /* F3DEX_GBI_2 */
-# define G_MTX_MODELVIEW 0x00 /* matrix types */
-# define G_MTX_PROJECTION 0x01
-# define G_MTX_MUL 0x00 /* concat or load */
-# define G_MTX_LOAD 0x02
-# define G_MTX_NOPUSH 0x00 /* push or not */
-# define G_MTX_PUSH 0x04
-#endif /* F3DEX_GBI_2 */
-
-/*
- * flags for G_SETGEOMETRYMODE
- * (this rendering state is maintained in RSP)
- *
- * DO NOT USE THE LOW 8 BITS OF GEOMETRYMODE:
- * The weird bit-ordering is for the micro-code: the lower byte
- * can be OR'd in with G_TRI_SHADE (11001100) to construct
- * the triangle command directly. Don't break it...
- *
- * DO NOT USE THE HIGH 8 BITS OF GEOMETRYMODE:
- * The high byte is OR'd with 0x703 to form the clip code mask.
- * If it is set to 0x04, this will cause near clipping to occur.
- * If it is zero, near clipping will not occur.
- *
- * Further explanation:
- * G_SHADE is necessary in order to see the color that you passed
- * down with the vertex. If G_SHADE isn't set, you need to set the DP
- * appropriately and use primcolor to see anything.
- *
- * G_SHADING_SMOOTH enabled means use all 3 colors of the triangle.
- * If it is not set, then do 'flat shading', where only one vertex color
- * is used (and all 3 vertices are set to that same color by the ucode)
- * See the man page for gSP1Triangle().
- *
- */
-#define G_ZBUFFER 0x00000001
-#define G_SHADE 0x00000004 /* enable Gouraud interp */
-/* rest of low byte reserved for setup ucode */
-#ifdef F3DEX_GBI_2
-# define G_TEXTURE_ENABLE 0x00000000 /* Ignored */
-# define G_SHADING_SMOOTH 0x00200000 /* flat or smooth shaded */
-# define G_CULL_FRONT 0x00000200
-# define G_CULL_BACK 0x00000400
-# define G_CULL_BOTH 0x00000600 /* To make code cleaner */
-#else
-# define G_TEXTURE_ENABLE 0x00000002 /* Microcode use only */
-# define G_SHADING_SMOOTH 0x00000200 /* flat or smooth shaded */
-# define G_CULL_FRONT 0x00001000
-# define G_CULL_BACK 0x00002000
-# define G_CULL_BOTH 0x00003000 /* To make code cleaner */
-#endif
-#define G_FOG 0x00010000
-#define G_LIGHTING 0x00020000
-#define G_TEXTURE_GEN 0x00040000
-#define G_TEXTURE_GEN_LINEAR 0x00080000
-#define G_LOD 0x00100000 /* NOT IMPLEMENTED */
-#if (defined(F3DEX_GBI)||defined(F3DLP_GBI))
-# define G_CLIPPING 0x00800000
-#else
-# define G_CLIPPING 0x00000000
-#endif
-
-#ifdef _LANGUAGE_ASSEMBLY
-#define G_FOG_H (G_FOG/0x10000)
-#define G_LIGHTING_H (G_LIGHTING/0x10000)
-#define G_TEXTURE_GEN_H (G_TEXTURE_GEN/0x10000)
-#define G_TEXTURE_GEN_LINEAR_H (G_TEXTURE_GEN_LINEAR/0x10000)
-#define G_LOD_H (G_LOD/0x10000) /* NOT IMPLEMENTED */
-#if (defined(F3DEX_GBI)||defined(F3DLP_GBI))
-# define G_CLIPPING_H (G_CLIPPING/0x10000)
-#endif
-#endif
-
-/* Need these defined for Sprite Microcode */
-#ifdef _LANGUAGE_ASSEMBLY
-#define G_TX_LOADTILE 7
-#define G_TX_RENDERTILE 0
-
-#define G_TX_NOMIRROR 0
-#define G_TX_WRAP 0
-#define G_TX_MIRROR 0x1
-#define G_TX_CLAMP 0x2
-#define G_TX_NOMASK 0
-#define G_TX_NOLOD 0
-#endif
-
-/*
- * G_SETIMG fmt: set image formats
- */
-#define G_IM_FMT_RGBA 0
-#define G_IM_FMT_YUV 1
-#define G_IM_FMT_CI 2
-#define G_IM_FMT_IA 3
-#define G_IM_FMT_I 4
-
-/*
- * G_SETIMG siz: set image pixel size
- */
-#define G_IM_SIZ_4b 0
-#define G_IM_SIZ_8b 1
-#define G_IM_SIZ_16b 2
-#define G_IM_SIZ_32b 3
-#define G_IM_SIZ_DD 5
-
-#define G_IM_SIZ_4b_BYTES 0
-#define G_IM_SIZ_4b_TILE_BYTES G_IM_SIZ_4b_BYTES
-#define G_IM_SIZ_4b_LINE_BYTES G_IM_SIZ_4b_BYTES
-
-#define G_IM_SIZ_8b_BYTES 1
-#define G_IM_SIZ_8b_TILE_BYTES G_IM_SIZ_8b_BYTES
-#define G_IM_SIZ_8b_LINE_BYTES G_IM_SIZ_8b_BYTES
-
-#define G_IM_SIZ_16b_BYTES 2
-#define G_IM_SIZ_16b_TILE_BYTES G_IM_SIZ_16b_BYTES
-#define G_IM_SIZ_16b_LINE_BYTES G_IM_SIZ_16b_BYTES
-
-#define G_IM_SIZ_32b_BYTES 4
-#define G_IM_SIZ_32b_TILE_BYTES 2
-#define G_IM_SIZ_32b_LINE_BYTES 2
-
-#define G_IM_SIZ_4b_LOAD_BLOCK G_IM_SIZ_16b
-#define G_IM_SIZ_8b_LOAD_BLOCK G_IM_SIZ_16b
-#define G_IM_SIZ_16b_LOAD_BLOCK G_IM_SIZ_16b
-#define G_IM_SIZ_32b_LOAD_BLOCK G_IM_SIZ_32b
-
-#define G_IM_SIZ_4b_SHIFT 2
-#define G_IM_SIZ_8b_SHIFT 1
-#define G_IM_SIZ_16b_SHIFT 0
-#define G_IM_SIZ_32b_SHIFT 0
-
-#define G_IM_SIZ_4b_INCR 3
-#define G_IM_SIZ_8b_INCR 1
-#define G_IM_SIZ_16b_INCR 0
-#define G_IM_SIZ_32b_INCR 0
-
-/*
- * G_SETCOMBINE: color combine modes
- */
-/* Color combiner constants: */
-#define G_CCMUX_COMBINED 0
-#define G_CCMUX_TEXEL0 1
-#define G_CCMUX_TEXEL1 2
-#define G_CCMUX_PRIMITIVE 3
-#define G_CCMUX_SHADE 4
-#define G_CCMUX_ENVIRONMENT 5
-#define G_CCMUX_CENTER 6
-#define G_CCMUX_SCALE 6
-#define G_CCMUX_COMBINED_ALPHA 7
-#define G_CCMUX_TEXEL0_ALPHA 8
-#define G_CCMUX_TEXEL1_ALPHA 9
-#define G_CCMUX_PRIMITIVE_ALPHA 10
-#define G_CCMUX_SHADE_ALPHA 11
-#define G_CCMUX_ENV_ALPHA 12
-#define G_CCMUX_LOD_FRACTION 13
-#define G_CCMUX_PRIM_LOD_FRAC 14
-#define G_CCMUX_NOISE 7
-#define G_CCMUX_K4 7
-#define G_CCMUX_K5 15
-#define G_CCMUX_1 6
-#define G_CCMUX_0 31
-
-/* Alpha combiner constants: */
-#define G_ACMUX_COMBINED 0
-#define G_ACMUX_TEXEL0 1
-#define G_ACMUX_TEXEL1 2
-#define G_ACMUX_PRIMITIVE 3
-#define G_ACMUX_SHADE 4
-#define G_ACMUX_ENVIRONMENT 5
-#define G_ACMUX_LOD_FRACTION 0
-#define G_ACMUX_PRIM_LOD_FRAC 6
-#define G_ACMUX_1 6
-#define G_ACMUX_0 7
-
-/* typical CC cycle 1 modes */
-#define G_CC_PRIMITIVE 0, 0, 0, PRIMITIVE, 0, 0, 0, PRIMITIVE
-#define G_CC_SHADE 0, 0, 0, SHADE, 0, 0, 0, SHADE
-
-#define G_CC_MODULATEI TEXEL0, 0, SHADE, 0, 0, 0, 0, SHADE
-#define G_CC_MODULATEIDECALA TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0
-#define G_CC_MODULATEIFADE TEXEL0, 0, SHADE, 0, 0, 0, 0, ENVIRONMENT
-
-#define G_CC_MODULATERGB G_CC_MODULATEI
-#define G_CC_MODULATERGBDECALA G_CC_MODULATEIDECALA
-#define G_CC_MODULATERGBFADE G_CC_MODULATEIFADE
-
-#define G_CC_MODULATEIA TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0
-#define G_CC_MODULATEIFADEA TEXEL0, 0, SHADE, 0, TEXEL0, 0, ENVIRONMENT, 0
-
-#define G_CC_MODULATEFADE TEXEL0, 0, SHADE, 0, ENVIRONMENT, 0, TEXEL0, 0
-
-#define G_CC_MODULATERGBA G_CC_MODULATEIA
-#define G_CC_MODULATERGBFADEA G_CC_MODULATEIFADEA
-
-#define G_CC_MODULATEI_PRIM TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE
-#define G_CC_MODULATEIA_PRIM TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0
-#define G_CC_MODULATEIDECALA_PRIM TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, TEXEL0
-
-#define G_CC_MODULATERGB_PRIM G_CC_MODULATEI_PRIM
-#define G_CC_MODULATERGBA_PRIM G_CC_MODULATEIA_PRIM
-#define G_CC_MODULATERGBDECALA_PRIM G_CC_MODULATEIDECALA_PRIM
-
-#define G_CC_FADE SHADE, 0, ENVIRONMENT, 0, SHADE, 0, ENVIRONMENT, 0
-#define G_CC_FADEA TEXEL0, 0, ENVIRONMENT, 0, TEXEL0, 0, ENVIRONMENT, 0
-
-#define G_CC_DECALRGB 0, 0, 0, TEXEL0, 0, 0, 0, SHADE
-#define G_CC_DECALRGBA 0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0
-#define G_CC_DECALFADE 0, 0, 0, TEXEL0, 0, 0, 0, ENVIRONMENT
-
-#define G_CC_DECALFADEA 0, 0, 0, TEXEL0, TEXEL0, 0, ENVIRONMENT, 0
-
-#define G_CC_BLENDI ENVIRONMENT, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE
-#define G_CC_BLENDIA ENVIRONMENT, SHADE, TEXEL0, SHADE, TEXEL0, 0, SHADE, 0
-#define G_CC_BLENDIDECALA ENVIRONMENT, SHADE, TEXEL0, SHADE, 0, 0, 0, TEXEL0
-
-#define G_CC_BLENDRGBA TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, SHADE
-#define G_CC_BLENDRGBDECALA TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, TEXEL0
-#define G_CC_BLENDRGBFADEA TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, ENVIRONMENT
-
-#define G_CC_ADDRGB TEXEL0, 0, TEXEL0, SHADE, 0, 0, 0, SHADE
-#define G_CC_ADDRGBDECALA TEXEL0, 0, TEXEL0, SHADE, 0, 0, 0, TEXEL0
-#define G_CC_ADDRGBFADE TEXEL0, 0, TEXEL0, SHADE, 0, 0, 0, ENVIRONMENT
-
-#define G_CC_REFLECTRGB ENVIRONMENT, 0, TEXEL0, SHADE, 0, 0, 0, SHADE
-#define G_CC_REFLECTRGBDECALA ENVIRONMENT, 0, TEXEL0, SHADE, 0, 0, 0, TEXEL0
-
-#define G_CC_HILITERGB PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE
-#define G_CC_HILITERGBA PRIMITIVE, SHADE, TEXEL0, SHADE, PRIMITIVE, SHADE, TEXEL0, SHADE
-#define G_CC_HILITERGBDECALA PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, TEXEL0
-
-#define G_CC_SHADEDECALA 0, 0, 0, SHADE, 0, 0, 0, TEXEL0
-#define G_CC_SHADEFADEA 0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT
-
-#define G_CC_BLENDPE PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, SHADE, 0
-#define G_CC_BLENDPEDECALA PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, 0, 0, 0, TEXEL0
-
-/* oddball modes */
-#define _G_CC_BLENDPE ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, SHADE, 0
-#define _G_CC_BLENDPEDECALA ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, 0, 0, 0, TEXEL0
-#define _G_CC_TWOCOLORTEX PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE
-/* used for 1-cycle sparse mip-maps, primitive color has color of lowest LOD */
-#define _G_CC_SPARSEST PRIMITIVE, TEXEL0, LOD_FRACTION, TEXEL0, PRIMITIVE, TEXEL0, LOD_FRACTION, TEXEL0
-#define G_CC_TEMPLERP TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0
-
-/* typical CC cycle 1 modes, usually followed by other cycle 2 modes */
-#define G_CC_TRILERP TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0
-#define G_CC_INTERFERENCE TEXEL0, 0, TEXEL1, 0, TEXEL0, 0, TEXEL1, 0
-
-/*
- * One-cycle color convert operation
- */
-#define G_CC_1CYUV2RGB TEXEL0, K4, K5, TEXEL0, 0, 0, 0, SHADE
-
-/*
- * NOTE: YUV2RGB expects TF step1 color conversion to occur in 2nd clock.
- * Therefore, CC looks for step1 results in TEXEL1
- */
-#define G_CC_YUV2RGB TEXEL1, K4, K5, TEXEL1, 0, 0, 0, 0
-
-/* typical CC cycle 2 modes */
-#define G_CC_PASS2 0, 0, 0, COMBINED, 0, 0, 0, COMBINED
-#define G_CC_MODULATEI2 COMBINED, 0, SHADE, 0, 0, 0, 0, SHADE
-#define G_CC_MODULATEIA2 COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, 0
-#define G_CC_MODULATERGB2 G_CC_MODULATEI2
-#define G_CC_MODULATERGBA2 G_CC_MODULATEIA2
-#define G_CC_MODULATEI_PRIM2 COMBINED, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE
-#define G_CC_MODULATEIA_PRIM2 COMBINED, 0, PRIMITIVE, 0, COMBINED, 0, PRIMITIVE, 0
-#define G_CC_MODULATERGB_PRIM2 G_CC_MODULATEI_PRIM2
-#define G_CC_MODULATERGBA_PRIM2 G_CC_MODULATEIA_PRIM2
-#define G_CC_DECALRGB2 0, 0, 0, COMBINED, 0, 0, 0, SHADE
-/*
- * ?
-#define G_CC_DECALRGBA2 COMBINED, SHADE, COMBINED_ALPHA, SHADE, 0, 0, 0, SHADE
-*/
-#define G_CC_BLENDI2 ENVIRONMENT, SHADE, COMBINED, SHADE, 0, 0, 0, SHADE
-#define G_CC_BLENDIA2 ENVIRONMENT, SHADE, COMBINED, SHADE, COMBINED, 0, SHADE, 0
-#define G_CC_CHROMA_KEY2 TEXEL0, CENTER, SCALE, 0, 0, 0, 0, 0
-#define G_CC_HILITERGB2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, SHADE
-#define G_CC_HILITERGBA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, ENVIRONMENT, COMBINED, TEXEL0, COMBINED
-#define G_CC_HILITERGBDECALA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, TEXEL0
-#define G_CC_HILITERGBPASSA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, COMBINED
-
-/*
- * G_SETOTHERMODE_L sft: shift count
- */
-#define G_MDSFT_ALPHACOMPARE 0
-#define G_MDSFT_ZSRCSEL 2
-#define G_MDSFT_RENDERMODE 3
-#define G_MDSFT_BLENDER 16
-
-/*
- * G_SETOTHERMODE_H sft: shift count
- */
-#define G_MDSFT_BLENDMASK 0 /* unsupported */
-#define G_MDSFT_ALPHADITHER 4
-#define G_MDSFT_RGBDITHER 6
-
-#define G_MDSFT_COMBKEY 8
-#define G_MDSFT_TEXTCONV 9
-#define G_MDSFT_TEXTFILT 12
-#define G_MDSFT_TEXTLUT 14
-#define G_MDSFT_TEXTLOD 16
-#define G_MDSFT_TEXTDETAIL 17
-#define G_MDSFT_TEXTPERSP 19
-#define G_MDSFT_CYCLETYPE 20
-#define G_MDSFT_COLORDITHER 22 /* unsupported in HW 2.0 */
-#define G_MDSFT_PIPELINE 23
-
-/* G_SETOTHERMODE_H gPipelineMode */
-#define G_PM_1PRIMITIVE (1 << G_MDSFT_PIPELINE)
-#define G_PM_NPRIMITIVE (0 << G_MDSFT_PIPELINE)
-
-/* G_SETOTHERMODE_H gSetCycleType */
-#define G_CYC_1CYCLE (0 << G_MDSFT_CYCLETYPE)
-#define G_CYC_2CYCLE (1 << G_MDSFT_CYCLETYPE)
-#define G_CYC_COPY (2 << G_MDSFT_CYCLETYPE)
-#define G_CYC_FILL (3 << G_MDSFT_CYCLETYPE)
-
-/* G_SETOTHERMODE_H gSetTexturePersp */
-#define G_TP_NONE (0 << G_MDSFT_TEXTPERSP)
-#define G_TP_PERSP (1 << G_MDSFT_TEXTPERSP)
-
-/* G_SETOTHERMODE_H gSetTextureDetail */
-#define G_TD_CLAMP (0 << G_MDSFT_TEXTDETAIL)
-#define G_TD_SHARPEN (1 << G_MDSFT_TEXTDETAIL)
-#define G_TD_DETAIL (2 << G_MDSFT_TEXTDETAIL)
-
-/* G_SETOTHERMODE_H gSetTextureLOD */
-#define G_TL_TILE (0 << G_MDSFT_TEXTLOD)
-#define G_TL_LOD (1 << G_MDSFT_TEXTLOD)
-
-/* G_SETOTHERMODE_H gSetTextureLUT */
-#define G_TT_NONE (0 << G_MDSFT_TEXTLUT)
-#define G_TT_RGBA16 (2 << G_MDSFT_TEXTLUT)
-#define G_TT_IA16 (3 << G_MDSFT_TEXTLUT)
-
-/* G_SETOTHERMODE_H gSetTextureFilter */
-#define G_TF_POINT (0 << G_MDSFT_TEXTFILT)
-#define G_TF_AVERAGE (3 << G_MDSFT_TEXTFILT)
-#define G_TF_BILERP (2 << G_MDSFT_TEXTFILT)
-
-/* G_SETOTHERMODE_H gSetTextureConvert */
-#define G_TC_CONV (0 << G_MDSFT_TEXTCONV)
-#define G_TC_FILTCONV (5 << G_MDSFT_TEXTCONV)
-#define G_TC_FILT (6 << G_MDSFT_TEXTCONV)
-
-/* G_SETOTHERMODE_H gSetCombineKey */
-#define G_CK_NONE (0 << G_MDSFT_COMBKEY)
-#define G_CK_KEY (1 << G_MDSFT_COMBKEY)
-
-/* G_SETOTHERMODE_H gSetColorDither */
-#define G_CD_MAGICSQ (0 << G_MDSFT_RGBDITHER)
-#define G_CD_BAYER (1 << G_MDSFT_RGBDITHER)
-#define G_CD_NOISE (2 << G_MDSFT_RGBDITHER)
-
-#ifndef _HW_VERSION_1
-#define G_CD_DISABLE (3 << G_MDSFT_RGBDITHER)
-#define G_CD_ENABLE G_CD_NOISE /* HW 1.0 compatibility mode */
-#else
-#define G_CD_ENABLE (1 << G_MDSFT_COLORDITHER)
-#define G_CD_DISABLE (0 << G_MDSFT_COLORDITHER)
-#endif
-
-/* G_SETOTHERMODE_H gSetAlphaDither */
-#define G_AD_PATTERN (0 << G_MDSFT_ALPHADITHER)
-#define G_AD_NOTPATTERN (1 << G_MDSFT_ALPHADITHER)
-#define G_AD_NOISE (2 << G_MDSFT_ALPHADITHER)
-#define G_AD_DISABLE (3 << G_MDSFT_ALPHADITHER)
-
-/* G_SETOTHERMODE_L gSetAlphaCompare */
-#define G_AC_NONE (0 << G_MDSFT_ALPHACOMPARE)
-#define G_AC_THRESHOLD (1 << G_MDSFT_ALPHACOMPARE)
-#define G_AC_DITHER (3 << G_MDSFT_ALPHACOMPARE)
-
-/* G_SETOTHERMODE_L gSetDepthSource */
-#define G_ZS_PIXEL (0 << G_MDSFT_ZSRCSEL)
-#define G_ZS_PRIM (1 << G_MDSFT_ZSRCSEL)
-
-/* G_SETOTHERMODE_L gSetRenderMode */
-#define AA_EN 0x8
-#define Z_CMP 0x10
-#define Z_UPD 0x20
-#define IM_RD 0x40
-#define CLR_ON_CVG 0x80
-#define CVG_DST_CLAMP 0
-#define CVG_DST_WRAP 0x100
-#define CVG_DST_FULL 0x200
-#define CVG_DST_SAVE 0x300
-#define ZMODE_OPA 0
-#define ZMODE_INTER 0x400
-#define ZMODE_XLU 0x800
-#define ZMODE_DEC 0xc00
-#define CVG_X_ALPHA 0x1000
-#define ALPHA_CVG_SEL 0x2000
-#define FORCE_BL 0x4000
-#define TEX_EDGE 0x0000 /* used to be 0x8000 */
-
-#define G_BL_CLR_IN 0
-#define G_BL_CLR_MEM 1
-#define G_BL_CLR_BL 2
-#define G_BL_CLR_FOG 3
-#define G_BL_1MA 0
-#define G_BL_A_MEM 1
-#define G_BL_A_IN 0
-#define G_BL_A_FOG 1
-#define G_BL_A_SHADE 2
-#define G_BL_1 2
-#define G_BL_0 3
-
-#define GBL_c1(m1a, m1b, m2a, m2b) \
- (m1a) << 30 | (m1b) << 26 | (m2a) << 22 | (m2b) << 18
-#define GBL_c2(m1a, m1b, m2a, m2b) \
- (m1a) << 28 | (m1b) << 24 | (m2a) << 20 | (m2b) << 16
-
-#define RM_AA_ZB_OPA_SURF(clk) \
- AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \
- ZMODE_OPA | ALPHA_CVG_SEL | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
-
-#define RM_RA_ZB_OPA_SURF(clk) \
- AA_EN | Z_CMP | Z_UPD | CVG_DST_CLAMP | \
- ZMODE_OPA | ALPHA_CVG_SEL | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
-
-#define RM_AA_ZB_XLU_SURF(clk) \
- AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \
- FORCE_BL | ZMODE_XLU | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-#define RM_AA_ZB_OPA_DECAL(clk) \
- AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | ALPHA_CVG_SEL | \
- ZMODE_DEC | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
-
-#define RM_RA_ZB_OPA_DECAL(clk) \
- AA_EN | Z_CMP | CVG_DST_WRAP | ALPHA_CVG_SEL | \
- ZMODE_DEC | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
-
-#define RM_AA_ZB_XLU_DECAL(clk) \
- AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \
- FORCE_BL | ZMODE_DEC | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-#define RM_AA_ZB_OPA_INTER(clk) \
- AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \
- ALPHA_CVG_SEL | ZMODE_INTER | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
-
-#define RM_RA_ZB_OPA_INTER(clk) \
- AA_EN | Z_CMP | Z_UPD | CVG_DST_CLAMP | \
- ALPHA_CVG_SEL | ZMODE_INTER | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
-
-#define RM_AA_ZB_XLU_INTER(clk) \
- AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \
- FORCE_BL | ZMODE_INTER | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-#define RM_AA_ZB_XLU_LINE(clk) \
- AA_EN | Z_CMP | IM_RD | CVG_DST_CLAMP | CVG_X_ALPHA | \
- ALPHA_CVG_SEL | FORCE_BL | ZMODE_XLU | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-#define RM_AA_ZB_DEC_LINE(clk) \
- AA_EN | Z_CMP | IM_RD | CVG_DST_SAVE | CVG_X_ALPHA | \
- ALPHA_CVG_SEL | FORCE_BL | ZMODE_DEC | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-#define RM_AA_ZB_TEX_EDGE(clk) \
- AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \
- CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
-
-#define RM_AA_ZB_TEX_INTER(clk) \
- AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \
- CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_INTER | TEX_EDGE | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
-
-#define RM_AA_ZB_SUB_SURF(clk) \
- AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | \
- ZMODE_OPA | ALPHA_CVG_SEL | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
-
-#define RM_AA_ZB_PCL_SURF(clk) \
- AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \
- ZMODE_OPA | G_AC_DITHER | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-#define RM_AA_ZB_OPA_TERR(clk) \
- AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \
- ZMODE_OPA | ALPHA_CVG_SEL | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-#define RM_AA_ZB_TEX_TERR(clk) \
- AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \
- CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-#define RM_AA_ZB_SUB_TERR(clk) \
- AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | \
- ZMODE_OPA | ALPHA_CVG_SEL | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-
-#define RM_AA_OPA_SURF(clk) \
- AA_EN | IM_RD | CVG_DST_CLAMP | \
- ZMODE_OPA | ALPHA_CVG_SEL | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
-
-#define RM_RA_OPA_SURF(clk) \
- AA_EN | CVG_DST_CLAMP | \
- ZMODE_OPA | ALPHA_CVG_SEL | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
-
-#define RM_AA_XLU_SURF(clk) \
- AA_EN | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | FORCE_BL | \
- ZMODE_OPA | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-#define RM_AA_XLU_LINE(clk) \
- AA_EN | IM_RD | CVG_DST_CLAMP | CVG_X_ALPHA | \
- ALPHA_CVG_SEL | FORCE_BL | ZMODE_OPA | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-#define RM_AA_DEC_LINE(clk) \
- AA_EN | IM_RD | CVG_DST_FULL | CVG_X_ALPHA | \
- ALPHA_CVG_SEL | FORCE_BL | ZMODE_OPA | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-#define RM_AA_TEX_EDGE(clk) \
- AA_EN | IM_RD | CVG_DST_CLAMP | \
- CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
-
-#define RM_AA_SUB_SURF(clk) \
- AA_EN | IM_RD | CVG_DST_FULL | \
- ZMODE_OPA | ALPHA_CVG_SEL | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
-
-#define RM_AA_PCL_SURF(clk) \
- AA_EN | IM_RD | CVG_DST_CLAMP | \
- ZMODE_OPA | G_AC_DITHER | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-#define RM_AA_OPA_TERR(clk) \
- AA_EN | IM_RD | CVG_DST_CLAMP | \
- ZMODE_OPA | ALPHA_CVG_SEL | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-#define RM_AA_TEX_TERR(clk) \
- AA_EN | IM_RD | CVG_DST_CLAMP | \
- CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-#define RM_AA_SUB_TERR(clk) \
- AA_EN | IM_RD | CVG_DST_FULL | \
- ZMODE_OPA | ALPHA_CVG_SEL | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-
-#define RM_ZB_OPA_SURF(clk) \
- Z_CMP | Z_UPD | CVG_DST_FULL | ALPHA_CVG_SEL | \
- ZMODE_OPA | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
-
-#define RM_ZB_XLU_SURF(clk) \
- Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_XLU | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-#define RM_ZB_OPA_DECAL(clk) \
- Z_CMP | CVG_DST_FULL | ALPHA_CVG_SEL | ZMODE_DEC | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
-
-#define RM_ZB_XLU_DECAL(clk) \
- Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_DEC | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-#define RM_ZB_CLD_SURF(clk) \
- Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_XLU | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-#define RM_ZB_OVL_SURF(clk) \
- Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_DEC | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-#define RM_ZB_PCL_SURF(clk) \
- Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | \
- G_AC_DITHER | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)
-
-
-#define RM_OPA_SURF(clk) \
- CVG_DST_CLAMP | FORCE_BL | ZMODE_OPA | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)
-
-#define RM_XLU_SURF(clk) \
- IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_OPA | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-#define RM_TEX_EDGE(clk) \
- CVG_DST_CLAMP | CVG_X_ALPHA | ALPHA_CVG_SEL | FORCE_BL |\
- ZMODE_OPA | TEX_EDGE | AA_EN | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)
-
-#define RM_CLD_SURF(clk) \
- IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_OPA | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-#define RM_PCL_SURF(clk) \
- CVG_DST_FULL | FORCE_BL | ZMODE_OPA | \
- G_AC_DITHER | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)
-
-#define RM_ADD(clk) \
- IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_OPA | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_FOG, G_BL_CLR_MEM, G_BL_1)
-
-#define RM_NOOP(clk) \
- GBL_c##clk(0, 0, 0, 0)
-
-#define RM_VISCVG(clk) \
- IM_RD | FORCE_BL | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_BL, G_BL_A_MEM)
-
-/* for rendering to an 8-bit framebuffer */
-#define RM_OPA_CI(clk) \
- CVG_DST_CLAMP | ZMODE_OPA | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)
-
-/* Custom version of RM_AA_ZB_XLU_SURF with Z_UPD */
-#define RM_CUSTOM_AA_ZB_XLU_SURF(clk) \
- RM_AA_ZB_XLU_SURF(clk) | Z_UPD
-
-
-#define G_RM_AA_ZB_OPA_SURF RM_AA_ZB_OPA_SURF(1)
-#define G_RM_AA_ZB_OPA_SURF2 RM_AA_ZB_OPA_SURF(2)
-#define G_RM_AA_ZB_XLU_SURF RM_AA_ZB_XLU_SURF(1)
-#define G_RM_AA_ZB_XLU_SURF2 RM_AA_ZB_XLU_SURF(2)
-#define G_RM_AA_ZB_OPA_DECAL RM_AA_ZB_OPA_DECAL(1)
-#define G_RM_AA_ZB_OPA_DECAL2 RM_AA_ZB_OPA_DECAL(2)
-#define G_RM_AA_ZB_XLU_DECAL RM_AA_ZB_XLU_DECAL(1)
-#define G_RM_AA_ZB_XLU_DECAL2 RM_AA_ZB_XLU_DECAL(2)
-#define G_RM_AA_ZB_OPA_INTER RM_AA_ZB_OPA_INTER(1)
-#define G_RM_AA_ZB_OPA_INTER2 RM_AA_ZB_OPA_INTER(2)
-#define G_RM_AA_ZB_XLU_INTER RM_AA_ZB_XLU_INTER(1)
-#define G_RM_AA_ZB_XLU_INTER2 RM_AA_ZB_XLU_INTER(2)
-#define G_RM_AA_ZB_XLU_LINE RM_AA_ZB_XLU_LINE(1)
-#define G_RM_AA_ZB_XLU_LINE2 RM_AA_ZB_XLU_LINE(2)
-#define G_RM_AA_ZB_DEC_LINE RM_AA_ZB_DEC_LINE(1)
-#define G_RM_AA_ZB_DEC_LINE2 RM_AA_ZB_DEC_LINE(2)
-#define G_RM_AA_ZB_TEX_EDGE RM_AA_ZB_TEX_EDGE(1)
-#define G_RM_AA_ZB_TEX_EDGE2 RM_AA_ZB_TEX_EDGE(2)
-#define G_RM_AA_ZB_TEX_INTER RM_AA_ZB_TEX_INTER(1)
-#define G_RM_AA_ZB_TEX_INTER2 RM_AA_ZB_TEX_INTER(2)
-#define G_RM_AA_ZB_SUB_SURF RM_AA_ZB_SUB_SURF(1)
-#define G_RM_AA_ZB_SUB_SURF2 RM_AA_ZB_SUB_SURF(2)
-#define G_RM_AA_ZB_PCL_SURF RM_AA_ZB_PCL_SURF(1)
-#define G_RM_AA_ZB_PCL_SURF2 RM_AA_ZB_PCL_SURF(2)
-#define G_RM_AA_ZB_OPA_TERR RM_AA_ZB_OPA_TERR(1)
-#define G_RM_AA_ZB_OPA_TERR2 RM_AA_ZB_OPA_TERR(2)
-#define G_RM_AA_ZB_TEX_TERR RM_AA_ZB_TEX_TERR(1)
-#define G_RM_AA_ZB_TEX_TERR2 RM_AA_ZB_TEX_TERR(2)
-#define G_RM_AA_ZB_SUB_TERR RM_AA_ZB_SUB_TERR(1)
-#define G_RM_AA_ZB_SUB_TERR2 RM_AA_ZB_SUB_TERR(2)
-
-#define G_RM_RA_ZB_OPA_SURF RM_RA_ZB_OPA_SURF(1)
-#define G_RM_RA_ZB_OPA_SURF2 RM_RA_ZB_OPA_SURF(2)
-#define G_RM_RA_ZB_OPA_DECAL RM_RA_ZB_OPA_DECAL(1)
-#define G_RM_RA_ZB_OPA_DECAL2 RM_RA_ZB_OPA_DECAL(2)
-#define G_RM_RA_ZB_OPA_INTER RM_RA_ZB_OPA_INTER(1)
-#define G_RM_RA_ZB_OPA_INTER2 RM_RA_ZB_OPA_INTER(2)
-
-#define G_RM_AA_OPA_SURF RM_AA_OPA_SURF(1)
-#define G_RM_AA_OPA_SURF2 RM_AA_OPA_SURF(2)
-#define G_RM_AA_XLU_SURF RM_AA_XLU_SURF(1)
-#define G_RM_AA_XLU_SURF2 RM_AA_XLU_SURF(2)
-#define G_RM_AA_XLU_LINE RM_AA_XLU_LINE(1)
-#define G_RM_AA_XLU_LINE2 RM_AA_XLU_LINE(2)
-#define G_RM_AA_DEC_LINE RM_AA_DEC_LINE(1)
-#define G_RM_AA_DEC_LINE2 RM_AA_DEC_LINE(2)
-#define G_RM_AA_TEX_EDGE RM_AA_TEX_EDGE(1)
-#define G_RM_AA_TEX_EDGE2 RM_AA_TEX_EDGE(2)
-#define G_RM_AA_SUB_SURF RM_AA_SUB_SURF(1)
-#define G_RM_AA_SUB_SURF2 RM_AA_SUB_SURF(2)
-#define G_RM_AA_PCL_SURF RM_AA_PCL_SURF(1)
-#define G_RM_AA_PCL_SURF2 RM_AA_PCL_SURF(2)
-#define G_RM_AA_OPA_TERR RM_AA_OPA_TERR(1)
-#define G_RM_AA_OPA_TERR2 RM_AA_OPA_TERR(2)
-#define G_RM_AA_TEX_TERR RM_AA_TEX_TERR(1)
-#define G_RM_AA_TEX_TERR2 RM_AA_TEX_TERR(2)
-#define G_RM_AA_SUB_TERR RM_AA_SUB_TERR(1)
-#define G_RM_AA_SUB_TERR2 RM_AA_SUB_TERR(2)
-
-#define G_RM_RA_OPA_SURF RM_RA_OPA_SURF(1)
-#define G_RM_RA_OPA_SURF2 RM_RA_OPA_SURF(2)
-
-#define G_RM_ZB_OPA_SURF RM_ZB_OPA_SURF(1)
-#define G_RM_ZB_OPA_SURF2 RM_ZB_OPA_SURF(2)
-#define G_RM_ZB_XLU_SURF RM_ZB_XLU_SURF(1)
-#define G_RM_ZB_XLU_SURF2 RM_ZB_XLU_SURF(2)
-#define G_RM_ZB_OPA_DECAL RM_ZB_OPA_DECAL(1)
-#define G_RM_ZB_OPA_DECAL2 RM_ZB_OPA_DECAL(2)
-#define G_RM_ZB_XLU_DECAL RM_ZB_XLU_DECAL(1)
-#define G_RM_ZB_XLU_DECAL2 RM_ZB_XLU_DECAL(2)
-#define G_RM_ZB_CLD_SURF RM_ZB_CLD_SURF(1)
-#define G_RM_ZB_CLD_SURF2 RM_ZB_CLD_SURF(2)
-#define G_RM_ZB_OVL_SURF RM_ZB_OVL_SURF(1)
-#define G_RM_ZB_OVL_SURF2 RM_ZB_OVL_SURF(2)
-#define G_RM_ZB_PCL_SURF RM_ZB_PCL_SURF(1)
-#define G_RM_ZB_PCL_SURF2 RM_ZB_PCL_SURF(2)
-
-#define G_RM_OPA_SURF RM_OPA_SURF(1)
-#define G_RM_OPA_SURF2 RM_OPA_SURF(2)
-#define G_RM_XLU_SURF RM_XLU_SURF(1)
-#define G_RM_XLU_SURF2 RM_XLU_SURF(2)
-#define G_RM_CLD_SURF RM_CLD_SURF(1)
-#define G_RM_CLD_SURF2 RM_CLD_SURF(2)
-#define G_RM_TEX_EDGE RM_TEX_EDGE(1)
-#define G_RM_TEX_EDGE2 RM_TEX_EDGE(2)
-#define G_RM_PCL_SURF RM_PCL_SURF(1)
-#define G_RM_PCL_SURF2 RM_PCL_SURF(2)
-#define G_RM_ADD RM_ADD(1)
-#define G_RM_ADD2 RM_ADD(2)
-#define G_RM_NOOP RM_NOOP(1)
-#define G_RM_NOOP2 RM_NOOP(2)
-#define G_RM_VISCVG RM_VISCVG(1)
-#define G_RM_VISCVG2 RM_VISCVG(2)
-#define G_RM_OPA_CI RM_OPA_CI(1)
-#define G_RM_OPA_CI2 RM_OPA_CI(2)
-
-#define G_RM_CUSTOM_AA_ZB_XLU_SURF RM_CUSTOM_AA_ZB_XLU_SURF(1)
-#define G_RM_CUSTOM_AA_ZB_XLU_SURF2 RM_CUSTOM_AA_ZB_XLU_SURF(2)
-
-
-#define G_RM_FOG_SHADE_A GBL_c1(G_BL_CLR_FOG, G_BL_A_SHADE, G_BL_CLR_IN, G_BL_1MA)
-#define G_RM_FOG_PRIM_A GBL_c1(G_BL_CLR_FOG, G_BL_A_FOG, G_BL_CLR_IN, G_BL_1MA)
-#define G_RM_PASS GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)
-
-/*
- * G_SETCONVERT: K0-5
- */
-#define G_CV_K0 175
-#define G_CV_K1 -43
-#define G_CV_K2 -89
-#define G_CV_K3 222
-#define G_CV_K4 114
-#define G_CV_K5 42
-
-/*
- * G_SETSCISSOR: interlace mode
- */
-#define G_SC_NON_INTERLACE 0
-#define G_SC_ODD_INTERLACE 3
-#define G_SC_EVEN_INTERLACE 2
-
-/* flags to inhibit pushing of the display list (on branch) */
-#define G_DL_PUSH 0x00
-#define G_DL_NOPUSH 0x01
-
-/*
- * BEGIN C-specific section: (typedef's)
- */
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/*
- * Data Structures
- *
- * NOTE:
- * The DMA transfer hardware requires 64-bit aligned, 64-bit multiple-
- * sized transfers. This important hardware optimization is unfortunately
- * reflected in the programming interface, with some structures
- * padded and alignment enforced.
- *
- * Since structures are aligned to the boundary of the "worst-case"
- * element, we can't depend on the C compiler to align things
- * properly.
- *
- * 64-bit structure alignment is enforced by wrapping structures with
- * unions that contain a dummy "long long int". Why this works is
- * explained in the ANSI C Spec, or on page 186 of the second edition
- * of K&R, "The C Programming Language".
- *
- * The price we pay for this is a little awkwardness referencing the
- * structures through the union. There is no memory penalty, since
- * all the structures are at least 64-bits the dummy alignment field
- * does not increase the size of the union.
- *
- * Static initialization of these union structures works because
- * the ANSI C spec states that static initialization for unions
- * works by using the first union element. We put the dummy alignment
- * field last for this reason.
- *
- * (it's possible a newer 64-bit compiler from MIPS might make this
- * easier with a flag, but we can't wait for it...)
- *
- */
-
-/*
- * Vertex (set up for use with colors)
- */
-typedef struct {
- short ob[3]; /* x, y, z */
- unsigned short flag;
- short tc[2]; /* texture coord */
- unsigned char cn[4]; /* color & alpha */
-} Vtx_t;
-
-/*
- * Vertex (set up for use with normals)
- */
-typedef struct {
- short ob[3]; /* x, y, z */
- unsigned short flag;
- short tc[2]; /* texture coord */
- signed char n[3]; /* normal */
- unsigned char a; /* alpha */
-} Vtx_tn;
-
-typedef union {
- Vtx_t v; /* Use this one for colors */
- Vtx_tn n; /* Use this one for normals */
- long long int force_structure_alignment;
-} Vtx;
-
-/*
- * Sprite structure
- */
-
-typedef struct {
- void *SourceImagePointer;
- void *TlutPointer;
- short Stride;
- short SubImageWidth;
- short SubImageHeight;
- char SourceImageType;
- char SourceImageBitSize;
- short SourceImageOffsetS;
- short SourceImageOffsetT;
- /* 20 bytes for above */
-
- /* padding to bring structure size to 64 bit allignment */
- char dummy[4];
-
-} uSprite_t;
-
-typedef union {
- uSprite_t s;
-
- /* Need to make sure this is 64 bit aligned */
- long long int force_structure_allignment[3];
-} uSprite;
-
-/*
- * Triangle face
- */
-typedef struct {
- unsigned char flag;
- unsigned char v[3];
-} Tri;
-
-/*
- * 4x4 matrix, fixed point s15.16 format.
- * First 8 words are integer portion of the 4x4 matrix
- * Last 8 words are the fraction portion of the 4x4 matrix
- */
-typedef s32 Mtx_t[4][4];
-
-typedef union {
- Mtx_t m;
- long long int force_structure_alignment;
-} Mtx;
-
-/*
- * Viewport
- */
-
-/*
- *
- * This magic value is the maximum INTEGER z-range of the hardware
- * (there are also 16-bits of fraction, which are introduced during
- * any transformations). This is not just a good idea, it's the law.
- * Feeding the hardware eventual z-coordinates (after any transforms
- * or scaling) bigger than this, will not work.
- *
- * This number is DIFFERENT than G_MAXFBZ, which is the maximum value
- * you want to use to initialize the z-buffer.
- *
- * The reason these are different is mildly interesting, but too long
- * to explain here. It is basically the result of optimizations in the
- * hardware. A more generic API might hide this detail from the users,
- * but we don't have the ucode to do that...
- *
- */
-#define G_MAXZ 0x03ff /* 10 bits of integer screen-Z precision */
-
-/*
- * The viewport structure elements have 2 bits of fraction, necessary
- * to accomodate the sub-pixel positioning scaling for the hardware.
- * This can also be exploited to handle odd-sized viewports.
- *
- * Accounting for these fractional bits, using the default projection
- * and viewing matrices, the viewport structure is initialized thusly:
- *
- * (SCREEN_WD/2)*4, (SCREEN_HT/2)*4, G_MAXZ, 0,
- * (SCREEN_WD/2)*4, (SCREEN_HT/2)*4, 0, 0,
- */
-typedef struct {
- short vscale[4]; /* scale, 2 bits fraction */
- short vtrans[4]; /* translate, 2 bits fraction */
- /* both the above arrays are padded to 64-bit boundary */
-} Vp_t;
-
-typedef union {
- Vp_t vp;
- long long int force_structure_alignment;
-} Vp;
-
-/*
- * MOVEMEM indices
- *
- * Each of these indexes an entry in a dmem table
- * which points to a 1-4 word block of dmem in
- * which to store a 1-4 word DMA.
- *
- */
-#ifdef F3DEX_GBI_2
-/* 0,4 are reserved by G_MTX */
-# define G_MV_MMTX 2
-# define G_MV_PMTX 6
-# define G_MV_VIEWPORT 8
-# define G_MV_LIGHT 10
-# define G_MV_POINT 12
-# define G_MV_MATRIX 14 /* NOTE: this is in moveword table */
-# define G_MVO_LOOKATX (0*24)
-# define G_MVO_LOOKATY (1*24)
-# define G_MVO_L0 (2*24)
-# define G_MVO_L1 (3*24)
-# define G_MVO_L2 (4*24)
-# define G_MVO_L3 (5*24)
-# define G_MVO_L4 (6*24)
-# define G_MVO_L5 (7*24)
-# define G_MVO_L6 (8*24)
-# define G_MVO_L7 (9*24)
-#else /* F3DEX_GBI_2 */
-# define G_MV_VIEWPORT 0x80
-# define G_MV_LOOKATY 0x82
-# define G_MV_LOOKATX 0x84
-# define G_MV_L0 0x86
-# define G_MV_L1 0x88
-# define G_MV_L2 0x8a
-# define G_MV_L3 0x8c
-# define G_MV_L4 0x8e
-# define G_MV_L5 0x90
-# define G_MV_L6 0x92
-# define G_MV_L7 0x94
-# define G_MV_TXTATT 0x96
-# define G_MV_MATRIX_1 0x9e /* NOTE: this is in moveword table */
-# define G_MV_MATRIX_2 0x98
-# define G_MV_MATRIX_3 0x9a
-# define G_MV_MATRIX_4 0x9c
-#endif /* F3DEX_GBI_2 */
-
-/*
- * MOVEWORD indices
- *
- * Each of these indexes an entry in a dmem table
- * which points to a word in dmem in dmem where
- * an immediate word will be stored.
- *
- */
-#define G_MW_MATRIX 0x00 /* NOTE: also used by movemem */
-#define G_MW_NUMLIGHT 0x02
-#define G_MW_CLIP 0x04
-#define G_MW_SEGMENT 0x06
-#define G_MW_FOG 0x08
-#define G_MW_LIGHTCOL 0x0a
-#ifdef F3DEX_GBI_2
-# define G_MW_FORCEMTX 0x0c
-#else /* F3DEX_GBI_2 */
-# define G_MW_POINTS 0x0c
-#endif /* F3DEX_GBI_2 */
-#define G_MW_PERSPNORM 0x0e
-
-/*
- * These are offsets from the address in the dmem table
- */
-#define G_MWO_NUMLIGHT 0x00
-#define G_MWO_CLIP_RNX 0x04
-#define G_MWO_CLIP_RNY 0x0c
-#define G_MWO_CLIP_RPX 0x14
-#define G_MWO_CLIP_RPY 0x1c
-#define G_MWO_SEGMENT_0 0x00
-#define G_MWO_SEGMENT_1 0x01
-#define G_MWO_SEGMENT_2 0x02
-#define G_MWO_SEGMENT_3 0x03
-#define G_MWO_SEGMENT_4 0x04
-#define G_MWO_SEGMENT_5 0x05
-#define G_MWO_SEGMENT_6 0x06
-#define G_MWO_SEGMENT_7 0x07
-#define G_MWO_SEGMENT_8 0x08
-#define G_MWO_SEGMENT_9 0x09
-#define G_MWO_SEGMENT_A 0x0a
-#define G_MWO_SEGMENT_B 0x0b
-#define G_MWO_SEGMENT_C 0x0c
-#define G_MWO_SEGMENT_D 0x0d
-#define G_MWO_SEGMENT_E 0x0e
-#define G_MWO_SEGMENT_F 0x0f
-#define G_MWO_FOG 0x00
-#define G_MWO_aLIGHT_1 0x00
-#define G_MWO_bLIGHT_1 0x04
-#ifdef F3DEX_GBI_2
-#define G_MWO_aLIGHT_2 0x18
-#define G_MWO_bLIGHT_2 0x1c
-#define G_MWO_aLIGHT_3 0x30
-#define G_MWO_bLIGHT_3 0x34
-#define G_MWO_aLIGHT_4 0x48
-#define G_MWO_bLIGHT_4 0x4c
-#define G_MWO_aLIGHT_5 0x60
-#define G_MWO_bLIGHT_5 0x64
-#define G_MWO_aLIGHT_6 0x78
-#define G_MWO_bLIGHT_6 0x7c
-#define G_MWO_aLIGHT_7 0x90
-#define G_MWO_bLIGHT_7 0x94
-#define G_MWO_aLIGHT_8 0xa8
-#define G_MWO_bLIGHT_8 0xac
-#else
-#define G_MWO_aLIGHT_2 0x20
-#define G_MWO_bLIGHT_2 0x24
-#define G_MWO_aLIGHT_3 0x40
-#define G_MWO_bLIGHT_3 0x44
-#define G_MWO_aLIGHT_4 0x60
-#define G_MWO_bLIGHT_4 0x64
-#define G_MWO_aLIGHT_5 0x80
-#define G_MWO_bLIGHT_5 0x84
-#define G_MWO_aLIGHT_6 0xa0
-#define G_MWO_bLIGHT_6 0xa4
-#define G_MWO_aLIGHT_7 0xc0
-#define G_MWO_bLIGHT_7 0xc4
-#define G_MWO_aLIGHT_8 0xe0
-#define G_MWO_bLIGHT_8 0xe4
-#endif
-#define G_MWO_MATRIX_XX_XY_I 0x00
-#define G_MWO_MATRIX_XZ_XW_I 0x04
-#define G_MWO_MATRIX_YX_YY_I 0x08
-#define G_MWO_MATRIX_YZ_YW_I 0x0c
-#define G_MWO_MATRIX_ZX_ZY_I 0x10
-#define G_MWO_MATRIX_ZZ_ZW_I 0x14
-#define G_MWO_MATRIX_WX_WY_I 0x18
-#define G_MWO_MATRIX_WZ_WW_I 0x1c
-#define G_MWO_MATRIX_XX_XY_F 0x20
-#define G_MWO_MATRIX_XZ_XW_F 0x24
-#define G_MWO_MATRIX_YX_YY_F 0x28
-#define G_MWO_MATRIX_YZ_YW_F 0x2c
-#define G_MWO_MATRIX_ZX_ZY_F 0x30
-#define G_MWO_MATRIX_ZZ_ZW_F 0x34
-#define G_MWO_MATRIX_WX_WY_F 0x38
-#define G_MWO_MATRIX_WZ_WW_F 0x3c
-#define G_MWO_POINT_RGBA 0x10
-#define G_MWO_POINT_ST 0x14
-#define G_MWO_POINT_XYSCREEN 0x18
-#define G_MWO_POINT_ZSCREEN 0x1c
-
-/*
- * Light structure.
- *
- * Note: only directional (infinite) lights are currently supported.
- *
- * Note: the weird order is for the DMEM alignment benefit of
- * the microcode.
- *
- */
-
-typedef struct {
- unsigned char col[3]; /* diffuse light value (rgba) */
- char pad1;
- unsigned char colc[3]; /* copy of diffuse light value (rgba) */
- char pad2;
- signed char dir[3]; /* direction of light (normalized) */
- char pad3;
-} Light_t;
-
-typedef struct {
- unsigned char col[3]; /* ambient light value (rgba) */
- char pad1;
- unsigned char colc[3]; /* copy of ambient light value (rgba) */
- char pad2;
-} Ambient_t;
-
-typedef struct {
- int x1,y1,x2,y2; /* texture offsets for highlight 1/2 */
-} Hilite_t;
-
-typedef union {
- Light_t l;
- long long int force_structure_alignment[2];
-} Light;
-
-typedef union {
- Ambient_t l;
- long long int force_structure_alignment[1];
-} Ambient;
-
-typedef struct {
- Ambient a;
- Light l[7];
-} Lightsn;
-
-typedef struct {
- Ambient a;
- Light l[1];
-} Lights0;
-
-typedef struct {
- Ambient a;
- Light l[1];
-} Lights1;
-
-typedef struct {
- Ambient a;
- Light l[2];
-} Lights2;
-
-typedef struct {
- Ambient a;
- Light l[3];
-} Lights3;
-
-typedef struct {
- Ambient a;
- Light l[4];
-} Lights4;
-
-typedef struct {
- Ambient a;
- Light l[5];
-} Lights5;
-
-typedef struct {
- Ambient a;
- Light l[6];
-} Lights6;
-
-typedef struct {
- Ambient a;
- Light l[7];
-} Lights7;
-
-typedef struct {
- Light l[2];
-} LookAt;
-
-typedef union {
- Hilite_t h;
- long int force_structure_alignment[4];
-} Hilite;
-
-#define gdSPDefLights0(ar,ag,ab) \
- { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \
- {{{ { 0, 0, 0},0,{ 0, 0, 0},0,{ 0, 0, 0},0}}} }
-#define gdSPDefLights1(ar,ag,ab,r1,g1,b1,x1,y1,z1) \
- { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \
- {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}} }
-#define gdSPDefLights2(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2) \
- { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \
- {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \
- {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}} }
-#define gdSPDefLights3(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3) \
- { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \
- {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \
- {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \
- {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}} }
-#define gdSPDefLights4(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3,r4,g4,b4,x4,y4,z4) \
- { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \
- {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \
- {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \
- {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}, \
- {{ {r4,g4,b4},0,{r4,g4,b4},0,{x4,y4,z4},0}}} }
-#define gdSPDefLights5(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3,r4,g4,b4,x4,y4,z4,r5,g5,b5,x5,y5,z5) \
- { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \
- {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \
- {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \
- {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}, \
- {{ {r4,g4,b4},0,{r4,g4,b4},0,{x4,y4,z4},0}}, \
- {{ {r5,g5,b5},0,{r5,g5,b5},0,{x5,y5,z5},0}}} }
-
-
-#define gdSPDefLights6(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3,r4,g4,b4,x4,y4,z4,r5,g5,b5,x5,y5,z5,r6,g6,b6,x6,y6,z6) \
- { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \
- {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \
- {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \
- {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}, \
- {{ {r4,g4,b4},0,{r4,g4,b4},0,{x4,y4,z4},0}}, \
- {{ {r5,g5,b5},0,{r5,g5,b5},0,{x5,y5,z5},0}}, \
- {{ {r6,g6,b6},0,{r6,g6,b6},0,{x6,y6,z6},0}}} }
-
-
-#define gdSPDefLights7(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3,r4,g4,b4,x4,y4,z4,r5,g5,b5,x5,y5,z5,r6,g6,b6,x6,y6,z6,r7,g7,b7,x7,y7,z7) \
- { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \
- {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \
- {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \
- {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}, \
- {{ {r4,g4,b4},0,{r4,g4,b4},0,{x4,y4,z4},0}}, \
- {{ {r5,g5,b5},0,{r5,g5,b5},0,{x5,y5,z5},0}}, \
- {{ {r6,g6,b6},0,{r6,g6,b6},0,{x6,y6,z6},0}}, \
- {{ {r7,g7,b7},0,{r7,g7,b7},0,{x7,y7,z7},0}}} }
-
-
-#define gdSPDefLookAt(rightx,righty,rightz,upx,upy,upz) \
- { {{ {{0,0,0},0,{0,0,0},0,{rightx,righty,rightz},0}}, \
- { {{0,0x80,0},0,{0,0x80,0},0,{upx,upy,upz},0}}} }
-
-/* Don't declare these for F3D_OLD to avoid bss reordering */
-#ifndef F3D_OLD
-/*
- * Graphics DMA Packet
- */
-typedef struct {
- int cmd:8;
- unsigned int par:8;
- unsigned int len:16;
- uintptr_t addr;
-} Gdma;
-
-/*
- * Graphics Immediate Mode Packet types
- */
-typedef struct {
- int cmd:8;
- int pad:24;
- Tri tri;
-} Gtri;
-
-typedef struct {
- int cmd:8;
- int pad1:24;
- int pad2:24;
- unsigned char param:8;
-} Gpopmtx;
-
-/*
- * typedef struct {
- * int cmd:8;
- * int pad0:24;
- * int pad1:4;
- * int number:4;
- * int base:24;
- * } Gsegment;
- */
-typedef struct {
- int cmd:8;
- int pad0:8;
- int mw_index:8;
- int number:8;
- int pad1:8;
- int base:24;
-} Gsegment;
-
-typedef struct {
- int cmd:8;
- int pad0:8;
- int sft:8;
- int len:8;
- unsigned int data:32;
-} GsetothermodeL;
-
-typedef struct {
- int cmd:8;
- int pad0:8;
- int sft:8;
- int len:8;
- unsigned int data:32;
-} GsetothermodeH;
-
-typedef struct {
- unsigned char cmd;
- unsigned char lodscale;
- unsigned char tile;
- unsigned char on;
- unsigned short s;
- unsigned short t;
-} Gtexture;
-
-typedef struct {
- int cmd:8;
- int pad:24;
- Tri line;
-} Gline3D;
-
-typedef struct {
- int cmd:8;
- int pad1:24;
- short int pad2;
- short int scale;
-} Gperspnorm;
-
-
-/*
- * RDP Packet types
- */
-typedef struct {
- int cmd:8;
- unsigned int fmt:3;
- unsigned int siz:2;
- unsigned int pad:7;
- unsigned int wd:12; /* really only 10 bits, extra */
- uintptr_t dram; /* to account for 1024 */
-} Gsetimg;
-
-typedef struct {
- int cmd:8;
- unsigned int muxs0:24;
- unsigned int muxs1:32;
-} Gsetcombine;
-
-typedef struct {
- int cmd:8;
- unsigned char pad;
- unsigned char prim_min_level;
- unsigned char prim_level;
- unsigned long color;
-} Gsetcolor;
-
-typedef struct {
- int cmd:8;
- int x0:10;
- int x0frac:2;
- int y0:10;
- int y0frac:2;
- unsigned int pad:8;
- int x1:10;
- int x1frac:2;
- int y1:10;
- int y1frac:2;
-} Gfillrect;
-
-typedef struct {
- int cmd:8;
- unsigned int fmt:3;
- unsigned int siz:2;
- unsigned int pad0:1;
- unsigned int line:9;
- unsigned int tmem:9;
- unsigned int pad1:5;
- unsigned int tile:3;
- unsigned int palette:4;
- unsigned int ct:1;
- unsigned int mt:1;
- unsigned int maskt:4;
- unsigned int shiftt:4;
- unsigned int cs:1;
- unsigned int ms:1;
- unsigned int masks:4;
- unsigned int shifts:4;
-} Gsettile;
-
-typedef struct {
- int cmd:8;
- unsigned int sl:12;
- unsigned int tl:12;
- int pad:5;
- unsigned int tile:3;
- unsigned int sh:12;
- unsigned int th:12;
-} Gloadtile;
-
-typedef Gloadtile Gloadblock;
-
-typedef Gloadtile Gsettilesize;
-
-typedef Gloadtile Gloadtlut;
-
-typedef struct {
- unsigned int cmd:8; /* command */
- unsigned int xl:12; /* X coordinate of upper left */
- unsigned int yl:12; /* Y coordinate of upper left */
- unsigned int pad1:5; /* Padding */
- unsigned int tile:3; /* Tile descriptor index */
- unsigned int xh:12; /* X coordinate of lower right */
- unsigned int yh:12; /* Y coordinate of lower right */
- unsigned int s:16; /* S texture coord at top left */
- unsigned int t:16; /* T texture coord at top left */
- unsigned int dsdx:16;/* Change in S per change in X */
- unsigned int dtdy:16;/* Change in T per change in Y */
-} Gtexrect;
-
-/*
- * Textured rectangles are 128 bits not 64 bits
- */
-typedef struct {
- unsigned long w0;
- unsigned long w1;
- unsigned long w2;
- unsigned long w3;
-} TexRect;
-#endif
-
-#define MakeTexRect(xh,yh,flip,tile,xl,yl,s,t,dsdx,dtdy) \
- G_TEXRECT, xh, yh, 0, flip, 0, tile, xl, yl, s, t, dsdx, dtdy
-
-/*
- * Generic Gfx Packet
- */
-typedef struct {
- uintptr_t w0;
- uintptr_t w1;
-} Gwords;
-
-/*
- * This union is the fundamental type of the display list.
- * It is, by law, exactly 64 bits in size.
- *
- * (Edit: except on 64-bit, where it is exactly 128 bit. On little-endian or
- * 64-bit systems, only the 'words' member may be accessed; the rest of the
- * structs don't have matching layouts for now.)
- */
-
-typedef union {
- Gwords words;
-#if !defined(F3D_OLD) && IS_BIG_ENDIAN && !IS_64_BIT
- Gdma dma;
- Gtri tri;
- Gline3D line;
- Gpopmtx popmtx;
- Gsegment segment;
- GsetothermodeH setothermodeH;
- GsetothermodeL setothermodeL;
- Gtexture texture;
- Gperspnorm perspnorm;
- Gsetimg setimg;
- Gsetcombine setcombine;
- Gsetcolor setcolor;
- Gfillrect fillrect; /* use for setscissor also */
- Gsettile settile;
- Gloadtile loadtile; /* use for loadblock also, th is dxt */
- Gsettilesize settilesize;
- Gloadtlut loadtlut;
-#endif
- long long int force_structure_alignment;
-} Gfx;
-
-/*
- * Macros to assemble the graphics display list
- */
-
-/*
- * DMA macros
- */
-#define gDma0p(pkt, c, s, l) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL((c), 24, 8) | _SHIFTL((l), 0, 24); \
- _g->words.w1 = (uintptr_t)(s); \
-}
-
-#define gsDma0p(c, s, l) \
-{{ \
- _SHIFTL((c), 24, 8) | _SHIFTL((l), 0, 24), (uintptr_t)(s) \
-}}
-
-#define gDma1p(pkt, c, s, l, p) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL((c), 24, 8) | _SHIFTL((p), 16, 8) | \
- _SHIFTL((l), 0, 16)); \
- _g->words.w1 = (uintptr_t)(s); \
-}
-
-#define gsDma1p(c, s, l, p) \
-{{ \
- (_SHIFTL((c), 24, 8) | _SHIFTL((p), 16, 8) | \
- _SHIFTL((l), 0, 16)), \
- (uintptr_t)(s) \
-}}
-
-#define gDma2p(pkt, c, adrs, len, idx, ofs) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- _g->words.w0 = (_SHIFTL((c),24,8)|_SHIFTL(((len)-1)/8,19,5)| \
- _SHIFTL((ofs)/8,8,8)|_SHIFTL((idx),0,8)); \
- _g->words.w1 = (uintptr_t)(adrs); \
-}
-#define gsDma2p(c, adrs, len, idx, ofs) \
-{{ \
- (_SHIFTL((c),24,8)|_SHIFTL(((len)-1)/8,19,5)| \
- _SHIFTL((ofs)/8,8,8)|_SHIFTL((idx),0,8)), \
- (uintptr_t)(adrs) \
-}}
-
-#define gSPNoOp(pkt) gDma0p(pkt, G_SPNOOP, 0, 0)
-#define gsSPNoOp() gsDma0p(G_SPNOOP, 0, 0)
-
-#ifdef F3DEX_GBI_2
-# define gSPMatrix(pkt, m, p) \
- gDma2p((pkt),G_MTX,(m),sizeof(Mtx),(p)^G_MTX_PUSH,0)
-# define gsSPMatrix(m, p) \
- gsDma2p( G_MTX,(m),sizeof(Mtx),(p)^G_MTX_PUSH,0)
-#else /* F3DEX_GBI_2 */
-# define gSPMatrix(pkt, m, p) gDma1p(pkt, G_MTX, m, sizeof(Mtx), p)
-# define gsSPMatrix(m, p) gsDma1p(G_MTX, m, sizeof(Mtx), p)
-#endif /* F3DEX_GBI_2 */
-
-#if defined(F3DEX_GBI_2)
-/*
- * F3DEX_GBI_2: G_VTX GBI format was changed.
- *
- * +--------+----+---+---+----+------+-+
- * G_VTX | cmd:8 |0000| n:8 |0000|v0+n:7|0|
- * +-+---+--+----+---+---+----+------+-+
- * | |seg| address |
- * +-+---+-----------------------------+
- */
-# define gSPVertex(pkt, v, n, v0) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- _g->words.w0 = \
- _SHIFTL(G_VTX,24,8)|_SHIFTL((n),12,8)|_SHIFTL((v0)+(n),1,7); \
- _g->words.w1 = (uintptr_t)(v); \
-}
-# define gsSPVertex(v, n, v0) \
-{{ \
- (_SHIFTL(G_VTX,24,8)|_SHIFTL((n),12,8)|_SHIFTL((v0)+(n),1,7)), \
- (uintptr_t)(v) \
-}}
-#elif (defined(F3DEX_GBI)||defined(F3DLP_GBI))
-/*
- * F3DEX_GBI: G_VTX GBI format was changed to support 64 vertice.
- *
- * +--------+--------+------+----------+
- * G_VTX | cmd:8 | v0:8 | n:6 |length:10 |
- * +-+---+--+--------+------+----------+
- * | |seg| address |
- * +-+---+-----------------------------+
- */
-# define gSPVertex(pkt, v, n, v0) \
- gDma1p((pkt),G_VTX,(v),((n)<<10)|(sizeof(Vtx)*(n)-1),(v0)*2)
-# define gsSPVertex(v, n, v0) \
- gsDma1p(G_VTX,(v),((n)<<10)|(sizeof(Vtx)*(n)-1),(v0)*2)
-#else
-# define gSPVertex(pkt, v, n, v0) \
- gDma1p(pkt, G_VTX, v, sizeof(Vtx)*(n),((n)-1)<<4|(v0))
-# define gsSPVertex(v, n, v0) \
- gsDma1p(G_VTX, v, sizeof(Vtx)*(n), ((n)-1)<<4|(v0))
-#endif
-
-
-#ifdef F3DEX_GBI_2
-# define gSPViewport(pkt, v) \
- gDma2p((pkt), G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT, 0)
-# define gsSPViewport(v) \
- gsDma2p( G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT, 0)
-#else /* F3DEX_GBI_2 */
-# define gSPViewport(pkt,v) \
- gDma1p((pkt), G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT)
-# define gsSPViewport(v) \
- gsDma1p( G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT)
-#endif /* F3DEX_GBI_2 */
-
-#define gSPDisplayList(pkt,dl) gDma1p(pkt,G_DL,dl,0,G_DL_PUSH)
-#define gsSPDisplayList( dl) gsDma1p( G_DL,dl,0,G_DL_PUSH)
-
-#define gSPBranchList(pkt,dl) gDma1p(pkt,G_DL,dl,0,G_DL_NOPUSH)
-#define gsSPBranchList( dl) gsDma1p( G_DL,dl,0,G_DL_NOPUSH)
-
-#define gSPSprite2DBase(pkt, s) gDma1p(pkt, G_SPRITE2D_BASE, s, sizeof(uSprite), 0)
-#define gsSPSprite2DBase(s) gsDma1p(G_SPRITE2D_BASE, s, sizeof(uSprite), 0)
-
-/*
- * RSP short command (no DMA required) macros
- */
-#define gImmp0(pkt, c) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL((c), 24, 8); \
-}
-
-#define gsImmp0(c) \
-{{ \
- _SHIFTL((c), 24, 8) \
-}}
-
-#define gImmp1(pkt, c, p0) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL((c), 24, 8); \
- _g->words.w1 = (uintptr_t)(p0); \
-}
-
-#define gsImmp1(c, p0) \
-{{ \
- _SHIFTL((c), 24, 8), (uintptr_t)(p0) \
-}}
-
-#define gImmp2(pkt, c, p0, p1) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL((c), 24, 8); \
- _g->words.w1 = _SHIFTL((p0), 16, 16) | _SHIFTL((p1), 8, 8); \
-}
-
-#define gsImmp2(c, p0, p1) \
-{{ \
- _SHIFTL((c), 24, 8), _SHIFTL((p0), 16, 16) | _SHIFTL((p1), 8, 8)\
-}}
-
-#define gImmp3(pkt, c, p0, p1, p2) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL((c), 24, 8); \
- _g->words.w1 = (_SHIFTL((p0), 16, 16) | _SHIFTL((p1), 8, 8) | \
- _SHIFTL((p2), 0, 8)); \
-}
-
-#define gsImmp3(c, p0, p1, p2) \
-{{ \
- _SHIFTL((c), 24, 8), (_SHIFTL((p0), 16, 16) | \
- _SHIFTL((p1), 8, 8) | _SHIFTL((p2), 0, 8))\
-}}
-
-#define gImmp21(pkt, c, p0, p1, dat) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL((c), 24, 8) | _SHIFTL((p0), 8, 16) | \
- _SHIFTL((p1), 0, 8)); \
- _g->words.w1 = (uintptr_t) (dat); \
-}
-
-#define gsImmp21(c, p0, p1, dat) \
-{{ \
- _SHIFTL((c), 24, 8) | _SHIFTL((p0), 8, 16) | _SHIFTL((p1), 0, 8),\
- (uintptr_t) (dat) \
-}}
-
-#ifdef F3DEX_GBI_2
-#define gMoveWd(pkt, index, offset, data) \
- gDma1p((pkt), G_MOVEWORD, data, offset, index)
-#define gsMoveWd( index, offset, data) \
- gsDma1p( G_MOVEWORD, data, offset, index)
-#else /* F3DEX_GBI_2 */
-#define gMoveWd(pkt, index, offset, data) \
- gImmp21((pkt), G_MOVEWORD, offset, index, data)
-#define gsMoveWd( index, offset, data) \
- gsImmp21( G_MOVEWORD, offset, index, data)
-#endif /* F3DEX_GBI_2 */
-
-/* Sprite immediate macros, there is also a sprite dma macro above */
-
-#define gSPSprite2DScaleFlip(pkt, sx, sy, fx, fy) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_SPRITE2D_SCALEFLIP, 24, 8) | \
- _SHIFTL((fx), 8, 8) | \
- _SHIFTL((fy), 0, 8)); \
- _g->words.w1 = (_SHIFTL((sx), 16, 16) | \
- _SHIFTL((sy), 0, 16)); \
-}
-
-#define gsSPSprite2DScaleFlip(sx, sy, fx, fy) \
-{{ \
- (_SHIFTL(G_SPRITE2D_SCALEFLIP, 24, 8) | \
- _SHIFTL((fx), 8, 8) | \
- _SHIFTL((fy), 0, 8)), \
- (_SHIFTL((sx), 16, 16) | \
- _SHIFTL((sy), 0, 16)) \
-}}
-
-#define gSPSprite2DDraw(pkt, px, py) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_SPRITE2D_DRAW, 24, 8)); \
- _g->words.w1 = (_SHIFTL((px), 16, 16) | \
- _SHIFTL((py), 0, 16)); \
-}
-
-#define gsSPSprite2DDraw(px, py) \
-{{ \
- (_SHIFTL(G_SPRITE2D_DRAW, 24, 8)), \
- (_SHIFTL((px), 16, 16) | \
- _SHIFTL((py), 0, 16)) \
-}}
-
-
-/*
- * Note: the SP1Triangle() and line macros multiply the vertex indices
- * by 10, this is an optimization for the microcode.
- */
-#if (defined(F3DLP_GBI)||defined(F3DEX_GBI))
-# define __gsSP1Triangle_w1(v0, v1, v2) \
- (_SHIFTL((v0)*2,16,8)|_SHIFTL((v1)*2,8,8)|_SHIFTL((v2)*2,0,8))
-# define __gsSP1Triangle_w1f(v0, v1, v2, flag) \
- (((flag) == 0) ? __gsSP1Triangle_w1(v0, v1, v2): \
- ((flag) == 1) ? __gsSP1Triangle_w1(v1, v2, v0): \
- __gsSP1Triangle_w1(v2, v0, v1))
-# define __gsSPLine3D_w1(v0, v1, wd) \
- (_SHIFTL((v0)*2,16,8)|_SHIFT((v1)*2,8,8)|_SHIFT((wd),0,8))
-# define __gsSPLine3D_w1f(v0, v1, wd, flag) \
- (((flag) == 0) ? __gsSPLine3D_w1(v0, v1, wd): \
- __gsSPLine3D_w1(v1, v0, wd))
-
-// Only used on old F3DEX revisions, removed on latest revisions.
-#define __gsSP1Quadrangle_w1(v0, v1, v2, v3) \
- (_SHIFTL((v3)*2,24,8)|_SHIFTL((v0)*2,16,8)|\
- _SHIFTL((v1)*2,8,8)|_SHIFTL((v2)*2,0,8))
-
-# define __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag) \
- (((flag) == 0) ? __gsSP1Triangle_w1(v0, v1, v2): \
- ((flag) == 1) ? __gsSP1Triangle_w1(v1, v2, v3): \
- ((flag) == 2) ? __gsSP1Triangle_w1(v2, v3, v0): \
- __gsSP1Triangle_w1(v3, v0, v1))
-# define __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag) \
- (((flag) == 0) ? __gsSP1Triangle_w1(v0, v2, v3): \
- ((flag) == 1) ? __gsSP1Triangle_w1(v1, v3, v0): \
- ((flag) == 2) ? __gsSP1Triangle_w1(v2, v0, v1): \
- __gsSP1Triangle_w1(v3, v1, v2))
-#else
-# define __gsSP1Triangle_w1f(v0, v1, v2, flag) \
- (_SHIFTL((flag), 24,8)|_SHIFTL((v0)*10,16,8)| \
- _SHIFTL((v1)*10, 8,8)|_SHIFTL((v2)*10, 0,8))
-# define __gsSPLine3D_w1f(v0, v1, wd, flag) \
- (_SHIFTL((flag), 24,8)|_SHIFTL((v0)*10,16,8)| \
- _SHIFTL((v1)*10, 8,8)|_SHIFTL((wd), 0,8))
-#endif
-
-#ifdef F3DEX_GBI_2
-/***
- *** 1 Triangle
- ***/
-#define gSP1Triangle(pkt, v0, v1, v2, flag) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(G_TRI1, 24, 8)| \
- __gsSP1Triangle_w1f(v0, v1, v2, flag); \
- _g->words.w1 = 0; \
-}
-#define gsSP1Triangle(v0, v1, v2, flag) \
-{{ \
- _SHIFTL(G_TRI1, 24, 8)|__gsSP1Triangle_w1f(v0, v1, v2, flag), \
- 0 \
-}}
-
-/***
- *** Line
- ***/
-#define gSPLine3D(pkt, v0, v1, flag) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(G_LINE3D, 24, 8)| \
- __gsSPLine3D_w1f(v0, v1, 0, flag); \
- _g->words.w1 = 0; \
-}
-#define gsSPLine3D(v0, v1, flag) \
-{{ \
- _SHIFTL(G_LINE3D, 24, 8)|__gsSPLine3D_w1f(v0, v1, 0, flag), \
- 0 \
-}}
-
-/***
- *** LineW
- ***/
-/* these macros are the same as SPLine3D, except they have an
- * additional parameter for width. The width is added to the "minimum"
- * thickness, which is 1.5 pixels. The units for width are in
- * half-pixel units, so a width of 1 translates to (.5 + 1.5) or
- * a 2.0 pixels wide line.
- */
-#define gSPLineW3D(pkt, v0, v1, wd, flag) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(G_LINE3D, 24, 8)| \
- __gsSPLine3D_w1f(v0, v1, wd, flag); \
- _g->words.w1 = 0; \
-}
-#define gsSPLineW3D(v0, v1, wd, flag) \
-{{ \
- _SHIFTL(G_LINE3D, 24, 8)|__gsSPLine3D_w1f(v0, v1, wd, flag), \
- 0 \
-}}
-
-/***
- *** 1 Quadrangle
- ***/
-#define gSP1Quadrangle(pkt, v0, v1, v2, v3, flag) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_QUAD, 24, 8)| \
- __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)); \
- _g->words.w1 = __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag); \
-}
-
-#define gsSP1Quadrangle(v0, v1, v2, v3, flag) \
-{{ \
- (_SHIFTL(G_QUAD, 24, 8)| \
- __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)), \
- __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag) \
-}}
-#else /* F3DEX_GBI_2 */
-
-/***
- *** 1 Triangle
- ***/
-#define gSP1Triangle(pkt, v0, v1, v2, flag) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(G_TRI1, 24, 8); \
- _g->words.w1 = __gsSP1Triangle_w1f(v0, v1, v2, flag); \
-}
-#define gsSP1Triangle(v0, v1, v2, flag) \
-{{ \
- _SHIFTL(G_TRI1, 24, 8), \
- __gsSP1Triangle_w1f(v0, v1, v2, flag) \
-}}
-
-/***
- *** Line
- ***/
-#define gSPLine3D(pkt, v0, v1, flag) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(G_LINE3D, 24, 8); \
- _g->words.w1 = __gsSPLine3D_w1f(v0, v1, 0, flag); \
-}
-#define gsSPLine3D(v0, v1, flag) \
-{{ \
- _SHIFTL(G_LINE3D, 24, 8), \
- __gsSPLine3D_w1f(v0, v1, 0, flag) \
-}}
-
-/***
- *** LineW
- ***/
-/* these macros are the same as SPLine3D, except they have an
- * additional parameter for width. The width is added to the "minimum"
- * thickness, which is 1.5 pixels. The units for width are in
- * half-pixel units, so a width of 1 translates to (.5 + 1.5) or
- * a 2.0 pixels wide line.
- */
-#define gSPLineW3D(pkt, v0, v1, wd, flag) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(G_LINE3D, 24, 8); \
- _g->words.w1 = __gsSPLine3D_w1f(v0, v1, wd, flag); \
-}
-#define gsSPLineW3D(v0, v1, wd, flag) \
-{{ \
- _SHIFTL(G_LINE3D, 24, 8), \
- __gsSPLine3D_w1f(v0, v1, wd, flag) \
-}}
-
-// Early revision of quadrangle command uses G_QUAD instead of G_TRI2.
-// It does not have a flag argument, this was added for compatibility.
-// MK64: Appears to only be used in startup_logo.c
-#ifdef F3D_OLD
-/***
- *** 1 Quadrangle
- ***/
-#define gSP1Quadrangle(v0, v1, v2, v3, flag) \
-{{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(G_QUAD, 24, 8); \
- _g->words.w1 = __gsSP1Quadrangle_w1(v0, v1, v2, v3); \
-}}
-
-#define gsSP1Quadrangle(v0, v1, v2, v3, flag) \
-{{ \
- _SHIFTL(G_QUAD, 24, 8), \
- __gsSP1Quadrangle_w1(v0, v1, v2, v3) \
-}}
-#else
-/***
- *** 1 Quadrangle
- ***/
-#define gSP1Quadrangle(pkt, v0, v1, v2, v3, flag) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_TRI2, 24, 8)| \
- __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)); \
- _g->words.w1 = __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag); \
-}
-
-#define gsSP1Quadrangle(v0, v1, v2, v3, flag) \
-{{ \
- (_SHIFTL(G_TRI2, 24, 8)| \
- __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)), \
- __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag) \
-}}
-#endif
-#endif /* F3DEX_GBI_2 */
-
-#if (defined(F3DLP_GBI)||defined(F3DEX_GBI))
-/***
- *** 2 Triangles
- ***/
-#define gSP2Triangles(pkt, v00, v01, v02, flag0, v10, v11, v12, flag1) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_TRI2, 24, 8)| \
- __gsSP1Triangle_w1f(v00, v01, v02, flag0)); \
- _g->words.w1 = __gsSP1Triangle_w1f(v10, v11, v12, flag1); \
-}
-
-#define gsSP2Triangles(v00, v01, v02, flag0, v10, v11, v12, flag1) \
-{{ \
- (_SHIFTL(G_TRI2, 24, 8)| \
- __gsSP1Triangle_w1f(v00, v01, v02, flag0)), \
- __gsSP1Triangle_w1f(v10, v11, v12, flag1) \
-}}
-#else
-#define gSP2Triangles(pkt, v00, v01, v02, flag0, v10, v11, v12, flag1) \
-{ \
- gSP1Triangle(pkt, v00, v01, v02, flag0); \
- gSP1Triangle(pkt, v10, v11, v12, flag1); \
-}
-#define gsSP2Triangles(v00, v01, v02, flag0, v10, v11, v12, flag1) \
- gsSP1Triangle(v00, v01, v02, flag0), \
- gsSP1Triangle(v10, v11, v12, flag1)
-#endif /* F3DEX_GBI/F3DLP_GBI */
-
-#ifndef F3D_OLD
-#if (defined(F3DEX_GBI)||defined(F3DLP_GBI))
-#define gSPCullDisplayList(pkt,vstart,vend) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(G_CULLDL, 24, 8) | \
- _SHIFTL((vstart)*2, 0, 16); \
- _g->words.w1 = _SHIFTL((vend)*2, 0, 16); \
-}
-
-#define gsSPCullDisplayList(vstart,vend) \
-{{ \
- _SHIFTL(G_CULLDL, 24, 8) | _SHIFTL((vstart)*2, 0, 16), \
- _SHIFTL((vend)*2, 0, 16) \
-}}
-#endif
-#else /* F3D_OLD */
-#define gSPCullDisplayList(pkt,vstart,vend) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(G_CULLDL, 24, 8) | \
- ((0x0f & (vstart))*40); \
- _g->words.w1 = (unsigned int)((0x0f & ((vend)+1))*40); \
-}
-
-#define gsSPCullDisplayList(vstart,vend) \
-{{ \
- _SHIFTL(G_CULLDL, 24, 8) | ((0x0f & (vstart))*40), \
- ((0x0f & ((vend)+1))*40) \
-}}
-#endif
-
-#define gSPSegment(pkt, segment, base) \
- gMoveWd(pkt, G_MW_SEGMENT, (segment)*4, base)
-#define gsSPSegment(segment, base) \
- gsMoveWd( G_MW_SEGMENT, (segment)*4, base)
-
-/*
- * Clipping Macros
- */
-#define FR_NEG_FRUSTRATIO_1 0x00000001
-#define FR_POS_FRUSTRATIO_1 0x0000ffff
-#define FR_NEG_FRUSTRATIO_2 0x00000002
-#define FR_POS_FRUSTRATIO_2 0x0000fffe
-#define FR_NEG_FRUSTRATIO_3 0x00000003
-#define FR_POS_FRUSTRATIO_3 0x0000fffd
-#define FR_NEG_FRUSTRATIO_4 0x00000004
-#define FR_POS_FRUSTRATIO_4 0x0000fffc
-#define FR_NEG_FRUSTRATIO_5 0x00000005
-#define FR_POS_FRUSTRATIO_5 0x0000fffb
-#define FR_NEG_FRUSTRATIO_6 0x00000006
-#define FR_POS_FRUSTRATIO_6 0x0000fffa
-/*
- * r should be one of: FRUSTRATIO_1, FRUSTRATIO_2, FRUSTRATIO_3, ... FRUSTRATIO_6
- */
-#define gSPClipRatio(pkt, r) \
-{ \
- gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RNX, FR_NEG_##r); \
- gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RNY, FR_NEG_##r); \
- gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RPX, FR_POS_##r); \
- gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RPY, FR_POS_##r); \
-}
-
-#define gsSPClipRatio(r) \
- gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RNX, FR_NEG_##r), \
- gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RNY, FR_NEG_##r), \
- gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RPX, FR_POS_##r), \
- gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RPY, FR_POS_##r)
-
-/*
- * Insert values into Matrix
- *
- * where = element of matrix (byte offset)
- * num = new element (32 bit value replacing 2 int or 2 frac matrix
- * componants
- */
-#ifdef F3DEX_GBI_2
-#define gSPInsertMatrix(pkt, where, num) \
- ERROR!! gSPInsertMatrix is no longer supported.
-#define gsSPInsertMatrix(where, num) \
- ERROR!! gsSPInsertMatrix is no longer supported.
-#else
-#define gSPInsertMatrix(pkt, where, num) \
- gMoveWd(pkt, G_MW_MATRIX, where, num)
-#define gsSPInsertMatrix(where, num) \
- gsMoveWd(G_MW_MATRIX, where, num)
-#endif
-
-/*
- * Load new matrix directly
- *
- * mptr = pointer to matrix
- */
-#ifdef F3DEX_GBI_2
-#define gSPForceMatrix(pkt, mptr) \
-{ gDma2p((pkt),G_MOVEMEM,(mptr),sizeof(Mtx),G_MV_MATRIX,0); \
- gMoveWd((pkt), G_MW_FORCEMTX,0,0x00010000); \
-}
-#define gsSPForceMatrix(mptr) \
- gsDma2p(G_MOVEMEM,(mptr),sizeof(Mtx),G_MV_MATRIX,0), \
- gsMoveWd(G_MW_FORCEMTX,0,0x00010000)
-
-#else /* F3DEX_GBI_2 */
-#define gSPForceMatrix(pkt, mptr) \
-{ \
- gDma1p(pkt, G_MOVEMEM, mptr, 16, G_MV_MATRIX_1); \
- gDma1p(pkt, G_MOVEMEM, (char *)(mptr)+16, 16, G_MV_MATRIX_2); \
- gDma1p(pkt, G_MOVEMEM, (char *)(mptr)+32, 16, G_MV_MATRIX_3); \
- gDma1p(pkt, G_MOVEMEM, (char *)(mptr)+48, 16, G_MV_MATRIX_4); \
-}
-#define gsSPForceMatrix(mptr) \
- gsDma1p( G_MOVEMEM, mptr, 16, G_MV_MATRIX_1), \
- gsDma1p( G_MOVEMEM, (char *)(mptr)+16, 16, G_MV_MATRIX_2), \
- gsDma1p( G_MOVEMEM, (char *)(mptr)+32, 16, G_MV_MATRIX_3), \
- gsDma1p( G_MOVEMEM, (char *)(mptr)+48, 16, G_MV_MATRIX_4)
-#endif /* F3DEX_GBI_2 */
-
-/*
- * Insert values into Points
- *
- * point = point number 0-15
- * where = which element of point to modify (byte offset into point)
- * num = new value (32 bit)
- */
-#if (defined(F3DEX_GBI)||defined(F3DLP_GBI))
-# define gSPModifyVertex(pkt, vtx, where, val) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- _g->words.w0 = (_SHIFTL(G_MODIFYVTX,24,8)| \
- _SHIFTL((where),16,8)|_SHIFTL((vtx)*2,0,16)); \
- _g->words.w1 = (unsigned int)(val); \
-}
-# define gsSPModifyVertex(vtx, where, val) \
-{{ \
- _SHIFTL(G_MODIFYVTX,24,8)| \
- _SHIFTL((where),16,8)|_SHIFTL((vtx)*2,0,16), \
- (unsigned int)(val) \
-}}
-#else
-# define gSPModifyVertex(pkt, vtx, where, val) \
- gMoveWd(pkt, G_MW_POINTS, (vtx)*40+(where), val)
-# define gsSPModifyVertex(vtx, where, val) \
- gsMoveWd(G_MW_POINTS, (vtx)*40+(where), val)
-#endif
-
-#if (defined(F3DEX_GBI)||defined(F3DLP_GBI))
-/*
- * gSPBranchLessZ Branch DL if (vtx.z) less than or equal (zval).
- *
- * dl = DL branch to
- * vtx = Vertex
- * zval = Screen depth
- * near = Near plane
- * far = Far plane
- * flag = G_BZ_PERSP or G_BZ_ORTHO
- */
-
-#define G_BZ_PERSP 0
-#define G_BZ_ORTHO 1
-
-#define G_DEPTOZSrg(zval, near, far, flag, zmin, zmax) \
-(((unsigned int)FTOFIX32(((flag) == G_BZ_PERSP ? \
- (1.0f-(float)(near)/(float)(zval)) / \
- (1.0f-(float)(near)/(float)(far )) : \
- ((float)(zval) - (float)(near)) / \
- ((float)(far ) - (float)(near))))) * \
- (((int)((zmax) - (zmin)))&~1) + (int)FTOFIX32(zmin))
-
-#define G_DEPTOZS(zval, near, far, flag) \
- G_DEPTOZSrg(zval, near, far, flag, 0, G_MAXZ)
-
-#define gSPBranchLessZrg(pkt, dl, vtx, zval, near, far, flag, zmin, zmax) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- _g->words.w0 = _SHIFTL(G_RDPHALF_1,24,8); \
- _g->words.w1 = (uintptr_t)(dl); \
- _g = (Gfx *)(pkt); \
- _g->words.w0 = (_SHIFTL(G_BRANCH_Z,24,8)| \
- _SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12)); \
- _g->words.w1 = G_DEPTOZSrg(zval, near, far, flag, zmin, zmax); \
-}
-
-#define gsSPBranchLessZrg(dl, vtx, zval, near, far, flag, zmin, zmax) \
-{{ _SHIFTL(G_RDPHALF_1,24,8), \
- (uintptr_t)(dl), }}, \
-{{ _SHIFTL(G_BRANCH_Z,24,8)|_SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12),\
- G_DEPTOZSrg(zval, near, far, flag, zmin, zmax), }}
-
-#define gSPBranchLessZ(pkt, dl, vtx, zval, near, far, flag) \
- gSPBranchLessZrg(pkt, dl, vtx, zval, near, far, flag, 0, G_MAXZ)
-#define gsSPBranchLessZ(dl, vtx, zval, near, far, flag) \
- gsSPBranchLessZrg(dl, vtx, zval, near, far, flag, 0, G_MAXZ)
-
-/*
- * gSPBranchLessZraw Branch DL if (vtx.z) less than or equal (raw zval).
- *
- * dl = DL branch to
- * vtx = Vertex
- * zval = Raw value of screen depth
- */
-#define gSPBranchLessZraw(pkt, dl, vtx, zval) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- _g->words.w0 = _SHIFTL(G_RDPHALF_1,24,8); \
- _g->words.w1 = (uintptr_t)(dl); \
- _g = (Gfx *)(pkt); \
- _g->words.w0 = (_SHIFTL(G_BRANCH_Z,24,8)| \
- _SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12)); \
- _g->words.w1 = (unsigned int)(zval); \
-}
-
-#define gsSPBranchLessZraw(dl, vtx, zval) \
-{{ _SHIFTL(G_RDPHALF_1,24,8), \
- (uintptr_t)(dl), }}, \
-{{ _SHIFTL(G_BRANCH_Z,24,8)|_SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12),\
- (unsigned int)(zval), }}
-
-/*
- * gSPLoadUcode RSP loads specified ucode.
- *
- * uc_start = ucode text section start
- * uc_dstart = ucode data section start
- */
-#define gSPLoadUcodeEx(pkt, uc_start, uc_dstart, uc_dsize) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- _g->words.w0 = _SHIFTL(G_RDPHALF_1,24,8); \
- _g->words.w1 = (uintptr_t)(uc_dstart); \
- _g = (Gfx *)(pkt); \
- _g->words.w0 = (_SHIFTL(G_LOAD_UCODE,24,8)| \
- _SHIFTL((int)(uc_dsize)-1,0,16)); \
- _g->words.w1 = (uintptr_t)(uc_start); \
-}
-
-#define gsSPLoadUcodeEx(uc_start, uc_dstart, uc_dsize) \
-{{ _SHIFTL(G_RDPHALF_1,24,8), \
- (uintptr_t)(uc_dstart), }}, \
-{{ _SHIFTL(G_LOAD_UCODE,24,8)| \
- _SHIFTL((int)(uc_dsize)-1,0,16), \
- (uintptr_t)(uc_start), }}
-
-#define gSPLoadUcode(pkt, uc_start, uc_dstart) \
- gSPLoadUcodeEx((pkt), (uc_start), (uc_dstart), SP_UCODE_DATA_SIZE)
-#define gsSPLoadUcode(uc_start, uc_dstart) \
- gsSPLoadUcodeEx((uc_start), (uc_dstart), SP_UCODE_DATA_SIZE)
-
-#define gSPLoadUcodeL(pkt, ucode) \
- gSPLoadUcode((pkt), OS_K0_TO_PHYSICAL(&##ucode##TextStart), \
- OS_K0_TO_PHYSICAL(&##ucode##DataStart))
-#define gsSPLoadUcodeL(ucode) \
- gsSPLoadUcode(OS_K0_TO_PHYSICAL(&##ucode##TextStart), \
- OS_K0_TO_PHYSICAL(&##ucode##DataStart))
-#endif
-
-#ifdef F3DEX_GBI_2
-/*
- * gSPDma_io DMA to/from DMEM/IMEM for DEBUG.
- */
-#define gSPDma_io(pkt, flag, dmem, dram, size) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- _g->words.w0 = _SHIFTL(G_DMA_IO,24,8)|_SHIFTL((flag),23,1)| \
- _SHIFTL((dmem)/8,13,10)|_SHIFTL((size)-1,0,12); \
- _g->words.w1 = (uintptr_t)(dram); \
-}
-
-#define gsSPDma_io(flag, dmem, dram, size) \
-{{ \
- _SHIFTL(G_DMA_IO,24,8)|_SHIFTL((flag),23,1)| \
- _SHIFTL((dmem)/8,13,10)|_SHIFTL((size)-1,0,12), \
- (uintptr_t)(dram) \
-}}
-
-#define gSPDmaRead(pkt,dmem,dram,size) gSPDma_io((pkt),0,(dmem),(dram),(size))
-#define gsSPDmaRead(dmem,dram,size) gsSPDma_io(0,(dmem),(dram),(size))
-#define gSPDmaWrite(pkt,dmem,dram,size) gSPDma_io((pkt),1,(dmem),(dram),(size))
-#define gsSPDmaWrite(dmem,dram,size) gsSPDma_io(1,(dmem),(dram),(size))
-#endif
-
-/*
- * Lighting Macros
- */
-#ifdef F3DEX_GBI_2
-# define NUML(n) ((n)*24)
-#else
-# define NUML(n) (((n)+1)*32 + 0x80000000)
-#endif
-#define NUMLIGHTS_0 1
-#define NUMLIGHTS_1 1
-#define NUMLIGHTS_2 2
-#define NUMLIGHTS_3 3
-#define NUMLIGHTS_4 4
-#define NUMLIGHTS_5 5
-#define NUMLIGHTS_6 6
-#define NUMLIGHTS_7 7
-/*
- * n should be one of: NUMLIGHTS_0, NUMLIGHTS_1, ..., NUMLIGHTS_7
- * NOTE: in addition to the number of directional lights specified,
- * there is always 1 ambient light
- */
-#define gSPNumLights(pkt, n) \
- gMoveWd(pkt, G_MW_NUMLIGHT, G_MWO_NUMLIGHT, NUML(n))
-#define gsSPNumLights(n) \
- gsMoveWd( G_MW_NUMLIGHT, G_MWO_NUMLIGHT, NUML(n))
-
-#define LIGHT_1 1
-#define LIGHT_2 2
-#define LIGHT_3 3
-#define LIGHT_4 4
-#define LIGHT_5 5
-#define LIGHT_6 6
-#define LIGHT_7 7
-#define LIGHT_8 8
-/*
- * l should point to a Light struct
- * n should be one of: LIGHT_1, LIGHT_2, ..., LIGHT_8
- * NOTE: the highest numbered light is always the ambient light (eg if there are
- * 3 directional lights defined: gsSPNumLights(NUMLIGHTS_3), then lights
- * LIGHT_1 through LIGHT_3 will be the directional lights and light
- * LIGHT_4 will be the ambient light.
- */
-#ifdef F3DEX_GBI_2
-# define gSPLight(pkt, l, n) \
- gDma2p((pkt),G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,(n)*24+24)
-# define gsSPLight(l, n) \
- gsDma2p( G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,(n)*24+24)
-#else /* F3DEX_GBI_2 */
-# define gSPLight(pkt, l, n) \
- gDma1p(pkt, G_MOVEMEM, l, sizeof(Light),((n)-1)*2+G_MV_L0)
-# define gsSPLight(l, n) \
- gsDma1p( G_MOVEMEM, l, sizeof(Light),((n)-1)*2+G_MV_L0)
-#endif /* F3DEX_GBI_2 */
-
-/*
- * gSPLightColor changes color of light without recalculating light direction
- * col is a 32 bit word with r,g,b,a (alpha is ignored)
- * n should be one of LIGHT_1, LIGHT_2, ..., LIGHT_8
- */
-#define gSPLightColor(pkt, n, col) \
-{ \
- gMoveWd(pkt, G_MW_LIGHTCOL, G_MWO_a##n, col); \
- gMoveWd(pkt, G_MW_LIGHTCOL, G_MWO_b##n, col); \
-}
-#define gsSPLightColor(n, col) \
- gsMoveWd(G_MW_LIGHTCOL, G_MWO_a##n, col), \
- gsMoveWd(G_MW_LIGHTCOL, G_MWO_b##n, col)
-
-/* These macros use a structure "name" which is init'd with the gdSPDefLights macros*/
-
-#define gSPSetLights0(pkt,name) \
-{ \
- gSPNumLights(pkt,NUMLIGHTS_0); \
- gSPLight(pkt,&name.l[0],1); \
- gSPLight(pkt,&name.a,2); \
-}
-#define gsSPSetLights0(name) \
- gsSPNumLights(NUMLIGHTS_0), \
- gsSPLight(&name.l[0],1), \
- gsSPLight(&name.a,2)
-
-#define gSPSetLights1(pkt,name) \
-{ \
- gSPNumLights(pkt,NUMLIGHTS_1); \
- gSPLight(pkt,&name.l[0],1); \
- gSPLight(pkt,&name.a,2); \
-}
-#define gsSPSetLights1(name) \
- gsSPNumLights(NUMLIGHTS_1), \
- gsSPLight(&name.l[0],1), \
- gsSPLight(&name.a,2)
-
-#define gSPSetLights2(pkt,name) \
-{ \
- gSPNumLights(pkt,NUMLIGHTS_2); \
- gSPLight(pkt,&name.l[0],1); \
- gSPLight(pkt,&name.l[1],2); \
- gSPLight(pkt,&name.a,3); \
-}
-#define gsSPSetLights2(name) \
- gsSPNumLights(NUMLIGHTS_2), \
- gsSPLight(&name.l[0],1), \
- gsSPLight(&name.l[1],2), \
- gsSPLight(&name.a,3)
-
-#define gSPSetLights3(pkt,name) \
-{ \
- gSPNumLights(pkt,NUMLIGHTS_3); \
- gSPLight(pkt,&name.l[0],1); \
- gSPLight(pkt,&name.l[1],2); \
- gSPLight(pkt,&name.l[2],3); \
- gSPLight(pkt,&name.a,4); \
-}
-#define gsSPSetLights3(name) \
- gsSPNumLights(NUMLIGHTS_3), \
- gsSPLight(&name.l[0],1), \
- gsSPLight(&name.l[1],2), \
- gsSPLight(&name.l[2],3), \
- gsSPLight(&name.a,4)
-
-#define gSPSetLights4(pkt,name) \
-{ \
- gSPNumLights(pkt,NUMLIGHTS_4); \
- gSPLight(pkt,&name.l[0],1); \
- gSPLight(pkt,&name.l[1],2); \
- gSPLight(pkt,&name.l[2],3); \
- gSPLight(pkt,&name.l[3],4); \
- gSPLight(pkt,&name.a,5); \
-}
-#define gsSPSetLights4(name) \
- gsSPNumLights(NUMLIGHTS_4), \
- gsSPLight(&name.l[0],1), \
- gsSPLight(&name.l[1],2), \
- gsSPLight(&name.l[2],3), \
- gsSPLight(&name.l[3],4), \
- gsSPLight(&name.a,5)
-
-#define gSPSetLights5(pkt,name) \
-{ \
- gSPNumLights(pkt,NUMLIGHTS_5); \
- gSPLight(pkt,&name.l[0],1); \
- gSPLight(pkt,&name.l[1],2); \
- gSPLight(pkt,&name.l[2],3); \
- gSPLight(pkt,&name.l[3],4); \
- gSPLight(pkt,&name.l[4],5); \
- gSPLight(pkt,&name.a,6); \
-}
-
-#define gsSPSetLights5(name) \
- gsSPNumLights(NUMLIGHTS_5), \
- gsSPLight(&name.l[0],1), \
- gsSPLight(&name.l[1],2), \
- gsSPLight(&name.l[2],3), \
- gsSPLight(&name.l[3],4), \
- gsSPLight(&name.l[4],5), \
- gsSPLight(&name.a,6)
-
-#define gSPSetLights6(pkt,name) \
-{ \
- gSPNumLights(pkt,NUMLIGHTS_6); \
- gSPLight(pkt,&name.l[0],1); \
- gSPLight(pkt,&name.l[1],2); \
- gSPLight(pkt,&name.l[2],3); \
- gSPLight(pkt,&name.l[3],4); \
- gSPLight(pkt,&name.l[4],5); \
- gSPLight(pkt,&name.l[5],6); \
- gSPLight(pkt,&name.a,7); \
-}
-
-#define gsSPSetLights6(name) \
- gsSPNumLights(NUMLIGHTS_6), \
- gsSPLight(&name.l[0],1), \
- gsSPLight(&name.l[1],2), \
- gsSPLight(&name.l[2],3), \
- gsSPLight(&name.l[3],4), \
- gsSPLight(&name.l[4],5), \
- gsSPLight(&name.l[5],6), \
- gsSPLight(&name.a,7)
-
-#define gSPSetLights7(pkt,name) \
-{ \
- gSPNumLights(pkt,NUMLIGHTS_7); \
- gSPLight(pkt,&name.l[0],1); \
- gSPLight(pkt,&name.l[1],2); \
- gSPLight(pkt,&name.l[2],3); \
- gSPLight(pkt,&name.l[3],4); \
- gSPLight(pkt,&name.l[4],5); \
- gSPLight(pkt,&name.l[5],6); \
- gSPLight(pkt,&name.l[6],7); \
- gSPLight(pkt,&name.a,8); \
-}
-
-#define gsSPSetLights7(name) \
- gsSPNumLights(NUMLIGHTS_7), \
- gsSPLight(&name.l[0],1), \
- gsSPLight(&name.l[1],2), \
- gsSPLight(&name.l[2],3), \
- gsSPLight(&name.l[3],4), \
- gsSPLight(&name.l[4],5), \
- gsSPLight(&name.l[5],6), \
- gsSPLight(&name.l[6],7), \
- gsSPLight(&name.a,8)
-
-/*
- * Reflection/Hiliting Macros
- */
-#ifdef F3DEX_GBI_2
-# define gSPLookAtX(pkt, l) \
- gDma2p((pkt),G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,G_MVO_LOOKATX)
-# define gsSPLookAtX(l) \
- gsDma2p( G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,G_MVO_LOOKATX)
-# define gSPLookAtY(pkt, l) \
- gDma2p((pkt),G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,G_MVO_LOOKATY)
-# define gsSPLookAtY(l) \
- gsDma2p( G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,G_MVO_LOOKATY)
-#else /* F3DEX_GBI_2 */
-# define gSPLookAtX(pkt, l) \
- gDma1p(pkt, G_MOVEMEM, l, sizeof(Light),G_MV_LOOKATX)
-# define gsSPLookAtX(l) \
- gsDma1p( G_MOVEMEM, l, sizeof(Light),G_MV_LOOKATX)
-# define gSPLookAtY(pkt, l) \
- gDma1p(pkt, G_MOVEMEM, l, sizeof(Light),G_MV_LOOKATY)
-# define gsSPLookAtY(l) \
- gsDma1p( G_MOVEMEM, l, sizeof(Light),G_MV_LOOKATY)
-#endif /* F3DEX_GBI_2 */
-
-#define gSPLookAt(pkt, la) \
-{ \
- gSPLookAtX(pkt,la) \
- gSPLookAtY(pkt,(char *)(la)+16) \
-}
-#define gsSPLookAt(la) \
- gsSPLookAtX(la), \
- gsSPLookAtY((char *)(la)+16)
-
-#define gDPSetHilite1Tile(pkt, tile, hilite, width, height) \
- gDPSetTileSize(pkt, tile, (hilite)->h.x1 & 0xfff, (hilite)->h.y1 & 0xfff, \
- ((((width)-1)*4)+(hilite)->h.x1) & 0xfff, ((((height)-1)*4)+(hilite)->h.y1) & 0xfff)
-
-#define gDPSetHilite2Tile(pkt, tile, hilite, width, height) \
- gDPSetTileSize(pkt, tile, (hilite)->h.x2 & 0xfff, (hilite)->h.y2 & 0xfff, \
- ((((width)-1)*4)+(hilite)->h.x2) & 0xfff, ((((height)-1)*4)+(hilite)->h.y2) & 0xfff)
-
-
-/*
- * FOG macros
- * fm = z multiplier
- * fo = z offset
- * FOG FORMULA: alpha(fog) = (eyespace z) * fm + fo CLAMPED 0 to 255
- * note: (eyespace z) ranges -1 to 1
- *
- * Alternate method of setting fog:
- * min, max: range 0 to 1000: 0=nearplane, 1000=farplane
- * min is where fog begins (usually less than max and often 0)
- * max is where fog is thickest (usually 1000)
- *
- */
-#define gSPFogFactor(pkt, fm, fo) \
- gMoveWd(pkt, G_MW_FOG, G_MWO_FOG, \
- (_SHIFTL(fm,16,16) | _SHIFTL(fo,0,16)))
-
-#define gsSPFogFactor(fm, fo) \
- gsMoveWd(G_MW_FOG, G_MWO_FOG, \
- (_SHIFTL(fm,16,16) | _SHIFTL(fo,0,16)))
-
-#define gSPFogPosition(pkt, min, max) \
- gMoveWd(pkt, G_MW_FOG, G_MWO_FOG, \
- (_SHIFTL((128000/((max)-(min))),16,16) | \
- _SHIFTL(((500-(min))*256/((max)-(min))),0,16)))
-
-#define gsSPFogPosition(min, max) \
- gsMoveWd(G_MW_FOG, G_MWO_FOG, \
- (_SHIFTL((128000/((max)-(min))),16,16) | \
- _SHIFTL(((500-(min))*256/((max)-(min))),0,16)))
-
-#ifdef F3DEX_GBI_2
-/*
- * Macros to turn texture on/off
- */
-# define gSPTexture(pkt, s, t, level, tile, on) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_TEXTURE,24,8) | \
- _SHIFTL(BOWTIE_VAL,16,8) | \
- _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | \
- _SHIFTL((on),1,7)); \
- _g->words.w1 = (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)); \
-}
-# define gsSPTexture(s, t, level, tile, on) \
-{{ \
- (_SHIFTL(G_TEXTURE,24,8) | _SHIFTL(BOWTIE_VAL,16,8) | \
- _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | _SHIFTL((on),1,7)),\
- (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)) \
-}}
-/*
- * Different version of SPTexture macro, has an additional parameter
- * which is currently reserved in the microcode.
- */
-# define gSPTextureL(pkt, s, t, level, xparam, tile, on) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_TEXTURE,24,8) | \
- _SHIFTL((xparam),16,8) | \
- _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | \
- _SHIFTL((on),1,7)); \
- _g->words.w1 = (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)); \
-}
-# define gsSPTextureL(s, t, level, xparam, tile, on) \
-{{ \
- (_SHIFTL(G_TEXTURE,24,8) | _SHIFTL((xparam),16,8) | \
- _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | _SHIFTL((on),1,7)),\
- (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)) \
-}}
-#else
-/*
- * Macros to turn texture on/off
- */
-# define gSPTexture(pkt, s, t, level, tile, on) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_TEXTURE,24,8)|_SHIFTL(BOWTIE_VAL,16,8)|\
- _SHIFTL((level),11,3)|_SHIFTL((tile),8,3)| \
- _SHIFTL((on),0,8)); \
- _g->words.w1 = (_SHIFTL((s),16,16)|_SHIFTL((t),0,16)); \
-}
-# define gsSPTexture(s, t, level, tile, on) \
-{{ \
- (_SHIFTL(G_TEXTURE,24,8)|_SHIFTL(BOWTIE_VAL,16,8)| \
- _SHIFTL((level),11,3)|_SHIFTL((tile),8,3)|_SHIFTL((on),0,8)), \
- (_SHIFTL((s),16,16)|_SHIFTL((t),0,16)) \
-}}
-/*
- * Different version of SPTexture macro, has an additional parameter
- * which is currently reserved in the microcode.
- */
-# define gSPTextureL(pkt, s, t, level, xparam, tile, on) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_TEXTURE,24,8)|_SHIFTL((xparam),16,8)| \
- _SHIFTL((level),11,3)|_SHIFTL((tile),8,3)| \
- _SHIFTL((on),0,8)); \
- _g->words.w1 = (_SHIFTL((s),16,16)|_SHIFTL((t),0,16)); \
-}
-# define gsSPTextureL(s, t, level, xparam, tile, on) \
-{{ \
- (_SHIFTL(G_TEXTURE,24,8)|_SHIFTL((xparam),16,8)| \
- _SHIFTL((level),11,3)|_SHIFTL((tile),8,3)|_SHIFTL((on),0,8)), \
- (_SHIFTL((s),16,16)|_SHIFTL((t),0,16)) \
-}}
-#endif
-
-#ifndef F3D_OLD
-# define gSPPerspNormalize(pkt, s) gMoveWd(pkt, G_MW_PERSPNORM, 0, (s))
-# define gsSPPerspNormalize(s) gsMoveWd( G_MW_PERSPNORM, 0, (s))
-#else
-# define gSPPerspNormalize(pkt, s) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(G_RDPHALF_1, 24, 8); \
- _g->words.w1 = (s); \
-}
-# define gsSPPerspNormalize(s) \
-{{ \
- _SHIFTL(G_RDPHALF_1, 24, 8), \
- (s) \
-}}
-#endif
-
-#ifdef F3DEX_GBI_2
-# define gSPPopMatrixN(pkt, n, num) gDma2p((pkt),G_POPMTX,(num)*64,64,2,0)
-# define gsSPPopMatrixN(n, num) gsDma2p( G_POPMTX,(num)*64,64,2,0)
-# define gSPPopMatrix(pkt, n) gSPPopMatrixN((pkt), (n), 1)
-# define gsSPPopMatrix(n) gsSPPopMatrixN( (n), 1)
-#else /* F3DEX_GBI_2 */
-# define gSPPopMatrix(pkt, n) gImmp1(pkt, G_POPMTX, n)
-# define gsSPPopMatrix(n) gsImmp1( G_POPMTX, n)
-#endif /* F3DEX_GBI_2 */
-
-#define gSPEndDisplayList(pkt) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(G_ENDDL, 24, 8); \
- _g->words.w1 = 0; \
-}
-
-#define gsSPEndDisplayList() \
-{{ \
- _SHIFTL(G_ENDDL, 24, 8), 0 \
-}}
-
-#ifdef F3DEX_GBI_2
-/*
- * One gSPGeometryMode(pkt,c,s) GBI is equal to these two GBIs.
- *
- * gSPClearGeometryMode(pkt,c)
- * gSPSetGeometryMode(pkt,s)
- *
- * gSPLoadGeometryMode(pkt, word) sets GeometryMode directly.
- */
-#define gSPGeometryMode(pkt, c, s) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- _g->words.w0 = _SHIFTL(G_GEOMETRYMODE,24,8)|_SHIFTL(~(u32)(c),0,24);\
- _g->words.w1 = (u32)(s); \
-}
-
-#define gsSPGeometryMode(c, s) \
-{{ \
- (_SHIFTL(G_GEOMETRYMODE,24,8)|_SHIFTL(~(u32)(c),0,24)),(u32)(s) \
-}}
-#define gSPSetGeometryMode(pkt, word) gSPGeometryMode((pkt),0,(word))
-#define gsSPSetGeometryMode(word) gsSPGeometryMode(0,(word))
-#define gSPClearGeometryMode(pkt, word) gSPGeometryMode((pkt),(word),0)
-#define gsSPClearGeometryMode(word) gsSPGeometryMode((word),0)
-#define gSPLoadGeometryMode(pkt, word) gSPGeometryMode((pkt),-1,(word))
-#define gsSPLoadGeometryMode(word) gsSPGeometryMode(-1,(word))
-#define gsSPGeometryModeSetFirst(c, s) gsSPGeometryMode(c, s)
-#else /* F3DEX_GBI_2 */
-#define gSPSetGeometryMode(pkt, word) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(G_SETGEOMETRYMODE, 24, 8); \
- _g->words.w1 = (unsigned int)(word); \
-}
-
-#define gsSPSetGeometryMode(word) \
-{{ \
- _SHIFTL(G_SETGEOMETRYMODE, 24, 8), (unsigned int)(word) \
-}}
-
-#define gSPClearGeometryMode(pkt, word) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(G_CLEARGEOMETRYMODE, 24, 8); \
- _g->words.w1 = (unsigned int)(word); \
-}
-
-#define gsSPClearGeometryMode(word) \
-{{ \
- _SHIFTL(G_CLEARGEOMETRYMODE, 24, 8), (unsigned int)(word) \
-}}
-
-/*
- * gsSPGeometryMode
- * In Fast3DEX2 it is better to use this, as the RSP geometry mode
- * is able to be set and cleared in a single command.
- */
-#define gsSPGeometryMode(c, s) \
- gsSPClearGeometryMode(c), \
- gsSPSetGeometryMode(s)
-#define gsSPGeometryModeSetFirst(c, s) \
- gsSPSetGeometryMode(s), \
- gsSPClearGeometryMode(c)
-#endif /* F3DEX_GBI_2 */
-
-#ifdef F3DEX_GBI_2
-#define gSPSetOtherMode(pkt, cmd, sft, len, data) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- _g->words.w0 = (_SHIFTL(cmd,24,8)|_SHIFTL(32-(sft)-(len),8,8)| \
- _SHIFTL((len)-1,0,8)); \
- _g->words.w1 = (unsigned int)(data); \
-}
-
-#define gsSPSetOtherMode(cmd, sft, len, data) \
-{{ \
- _SHIFTL(cmd,24,8)|_SHIFTL(32-(sft)-(len),8,8)|_SHIFTL((len)-1,0,8), \
- (unsigned int)(data) \
-}}
-#else
-#define gSPSetOtherMode(pkt, cmd, sft, len, data) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(cmd, 24, 8) | _SHIFTL(sft, 8, 8) | \
- _SHIFTL(len, 0, 8)); \
- _g->words.w1 = (unsigned int)(data); \
-}
-
-#define gsSPSetOtherMode(cmd, sft, len, data) \
-{{ \
- _SHIFTL(cmd, 24, 8) | _SHIFTL(sft, 8, 8) | _SHIFTL(len, 0, 8), \
- (unsigned int)(data) \
-}}
-#endif
-
-/*
- * RDP setothermode register commands - register shadowed in RSP
- */
-#define gDPPipelineMode(pkt, mode) \
- gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_PIPELINE, 1, mode)
-#define gsDPPipelineMode(mode) \
- gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_PIPELINE, 1, mode)
-
-#define gDPSetCycleType(pkt, type) \
- gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_CYCLETYPE, 2, type)
-#define gsDPSetCycleType(type) \
- gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_CYCLETYPE, 2, type)
-
-#define gDPSetTexturePersp(pkt, type) \
- gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTPERSP, 1, type)
-#define gsDPSetTexturePersp(type) \
- gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTPERSP, 1, type)
-
-#define gDPSetTextureDetail(pkt, type) \
- gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTDETAIL, 2, type)
-#define gsDPSetTextureDetail(type) \
- gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTDETAIL, 2, type)
-
-#define gDPSetTextureLOD(pkt, type) \
- gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTLOD, 1, type)
-#define gsDPSetTextureLOD(type) \
- gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTLOD, 1, type)
-
-#define gDPSetTextureLUT(pkt, type) \
- gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTLUT, 2, type)
-#define gsDPSetTextureLUT(type) \
- gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTLUT, 2, type)
-
-#define gDPSetTextureFilter(pkt, type) \
- gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTFILT, 2, type)
-#define gsDPSetTextureFilter(type) \
- gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTFILT, 2, type)
-
-#define gDPSetTextureConvert(pkt, type) \
- gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTCONV, 3, type)
-#define gsDPSetTextureConvert(type) \
- gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTCONV, 3, type)
-
-#define gDPSetCombineKey(pkt, type) \
- gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_COMBKEY, 1, type)
-#define gsDPSetCombineKey(type) \
- gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_COMBKEY, 1, type)
-
-#ifndef _HW_VERSION_1
-#define gDPSetColorDither(pkt, mode) \
- gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_RGBDITHER, 2, mode)
-#define gsDPSetColorDither(mode) \
- gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_RGBDITHER, 2, mode)
-#else
-#define gDPSetColorDither(pkt, mode) \
- gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_COLORDITHER, 1, mode)
-#define gsDPSetColorDither(mode) \
- gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_COLORDITHER, 1, mode)
-#endif
-
-#ifndef _HW_VERSION_1
-#define gDPSetAlphaDither(pkt, mode) \
- gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 2, mode)
-#define gsDPSetAlphaDither(mode) \
- gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 2, mode)
-#endif
-
-/* 'blendmask' is not supported anymore.
- * The bits are reserved for future use.
- * Fri May 26 13:45:55 PDT 1995
- */
-#define gDPSetBlendMask(pkt, mask) gDPNoOp(pkt)
-#define gsDPSetBlendMask(mask) gsDPNoOp()
-
-#define gDPSetAlphaCompare(pkt, type) \
- gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 2, type)
-#define gsDPSetAlphaCompare(type) \
- gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 2, type)
-
-#define gDPSetDepthSource(pkt, src) \
- gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_ZSRCSEL, 1, src)
-#define gsDPSetDepthSource(src) \
- gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ZSRCSEL, 1, src)
-
-#define gDPSetRenderMode(pkt, c0, c1) \
- gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_RENDERMODE, 29, \
- (c0) | (c1))
-#define gsDPSetRenderMode(c0, c1) \
- gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_RENDERMODE, 29, \
- (c0) | (c1))
-
-#define gSetImage(pkt, cmd, fmt, siz, width, i) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(cmd, 24, 8) | _SHIFTL(fmt, 21, 3) | \
- _SHIFTL(siz, 19, 2) | _SHIFTL((width)-1, 0, 12); \
- _g->words.w1 = (uintptr_t)(i); \
-}
-
-#define gsSetImage(cmd, fmt, siz, width, i) \
-{{ \
- _SHIFTL(cmd, 24, 8) | _SHIFTL(fmt, 21, 3) | \
- _SHIFTL(siz, 19, 2) | _SHIFTL((width)-1, 0, 12), \
- (uintptr_t)(i) \
-}}
-
-#define gDPSetColorImage(pkt, f, s, w, i) gSetImage(pkt, G_SETCIMG, f, s, w, i)
-#define gsDPSetColorImage(f, s, w, i) gsSetImage(G_SETCIMG, f, s, w, i)
-
-
-/* use these for new code */
-#define gDPSetDepthImage(pkt, i) gSetImage(pkt, G_SETZIMG, 0, 0, 1, i)
-#define gsDPSetDepthImage(i) gsSetImage(G_SETZIMG, 0, 0, 1, i)
-/* kept for compatibility */
-#define gDPSetMaskImage(pkt, i) gDPSetDepthImage(pkt, i)
-#define gsDPSetMaskImage(i) gsDPSetDepthImage(i)
-
-#define gDPSetTextureImage(pkt, f, s, w, i) gSetImage(pkt, G_SETTIMG, f, s, w, i)
-#define gsDPSetTextureImage(f, s, w, i) gsSetImage(G_SETTIMG, f, s, w, i)
-
-/*
- * RDP macros
- */
-
-#define gDPSetCombine(pkt, muxs0, muxs1) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(G_SETCOMBINE, 24, 8) | _SHIFTL(muxs0, 0, 24);\
- _g->words.w1 = (unsigned int)(muxs1); \
-}
-
-#define gsDPSetCombine(muxs0, muxs1) \
-{{ \
- _SHIFTL(G_SETCOMBINE, 24, 8) | _SHIFTL(muxs0, 0, 24), \
- (unsigned int)(muxs1) \
-}}
-
-#define GCCc0w0(saRGB0, mRGB0, saA0, mA0) \
- (_SHIFTL((saRGB0), 20, 4) | _SHIFTL((mRGB0), 15, 5) | \
- _SHIFTL((saA0), 12, 3) | _SHIFTL((mA0), 9, 3))
-
-#define GCCc1w0(saRGB1, mRGB1) \
- (_SHIFTL((saRGB1), 5, 4) | _SHIFTL((mRGB1), 0, 5))
-
-#define GCCc0w1(sbRGB0, aRGB0, sbA0, aA0) \
- (_SHIFTL((sbRGB0), 28, 4) | _SHIFTL((aRGB0), 15, 3) | \
- _SHIFTL((sbA0), 12, 3) | _SHIFTL((aA0), 9, 3))
-
-#define GCCc1w1(sbRGB1, saA1, mA1, aRGB1, sbA1, aA1) \
- (_SHIFTL((sbRGB1), 24, 4) | _SHIFTL((saA1), 21, 3) | \
- _SHIFTL((mA1), 18, 3) | _SHIFTL((aRGB1), 6, 3) | \
- _SHIFTL((sbA1), 3, 3) | _SHIFTL((aA1), 0, 3))
-
-#define gDPSetCombineLERP(pkt, a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0, \
- a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(G_SETCOMBINE, 24, 8) | \
- _SHIFTL(GCCc0w0(G_CCMUX_##a0, G_CCMUX_##c0, \
- G_ACMUX_##Aa0, G_ACMUX_##Ac0) | \
- GCCc1w0(G_CCMUX_##a1, G_CCMUX_##c1), \
- 0, 24); \
- _g->words.w1 = (unsigned int)(GCCc0w1(G_CCMUX_##b0, \
- G_CCMUX_##d0, \
- G_ACMUX_##Ab0, \
- G_ACMUX_##Ad0) | \
- GCCc1w1(G_CCMUX_##b1, \
- G_ACMUX_##Aa1, \
- G_ACMUX_##Ac1, \
- G_CCMUX_##d1, \
- G_ACMUX_##Ab1, \
- G_ACMUX_##Ad1)); \
-}
-
-#define gsDPSetCombineLERP(a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0, \
- a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1) \
-{{ \
- _SHIFTL(G_SETCOMBINE, 24, 8) | \
- _SHIFTL(GCCc0w0(G_CCMUX_##a0, G_CCMUX_##c0, \
- G_ACMUX_##Aa0, G_ACMUX_##Ac0) | \
- GCCc1w0(G_CCMUX_##a1, G_CCMUX_##c1), 0, 24), \
- (unsigned int)(GCCc0w1(G_CCMUX_##b0, G_CCMUX_##d0, \
- G_ACMUX_##Ab0, G_ACMUX_##Ad0) | \
- GCCc1w1(G_CCMUX_##b1, G_ACMUX_##Aa1, \
- G_ACMUX_##Ac1, G_CCMUX_##d1, \
- G_ACMUX_##Ab1, G_ACMUX_##Ad1)) \
-}}
-
-/*
- * SetCombineMode macros are NOT redunant. It allow the C preprocessor
- * to substitute single parameter which includes commas in the token and
- * rescan for higher parameter count macro substitution.
- *
- * eg. gsDPSetCombineMode(G_CC_MODULATE, G_CC_MODULATE) turns into
- * gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0,
- * TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0)
- */
-
-#define gDPSetCombineMode(pkt, a, b) gDPSetCombineLERP(pkt, a, b)
-#define gsDPSetCombineMode(a, b) gsDPSetCombineLERP(a, b)
-
-#define gDPSetColor(pkt, c, d) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(c, 24, 8); \
- _g->words.w1 = (unsigned int)(d); \
-}
-
-#define gsDPSetColor(c, d) \
-{{ \
- _SHIFTL(c, 24, 8), (unsigned int)(d) \
-}}
-
-#define DPRGBColor(pkt, cmd, r, g, b, a) \
- gDPSetColor(pkt, cmd, \
- (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | \
- _SHIFTL(b, 8, 8) | _SHIFTL(a, 0, 8)))
-#define sDPRGBColor(cmd, r, g, b, a) \
- gsDPSetColor(cmd, \
- (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | \
- _SHIFTL(b, 8, 8) | _SHIFTL(a, 0, 8)))
-
-#define gDPSetEnvColor(pkt, r, g, b, a) \
- DPRGBColor(pkt, G_SETENVCOLOR, r,g,b,a)
-#define gsDPSetEnvColor(r, g, b, a) \
- sDPRGBColor(G_SETENVCOLOR, r,g,b,a)
-#define gDPSetBlendColor(pkt, r, g, b, a) \
- DPRGBColor(pkt, G_SETBLENDCOLOR, r,g,b,a)
-#define gsDPSetBlendColor(r, g, b, a) \
- sDPRGBColor(G_SETBLENDCOLOR, r,g,b,a)
-#define gDPSetFogColor(pkt, r, g, b, a) \
- DPRGBColor(pkt, G_SETFOGCOLOR, r,g,b,a)
-#define gsDPSetFogColor(r, g, b, a) \
- sDPRGBColor(G_SETFOGCOLOR, r,g,b,a)
-#define gDPSetFillColor(pkt, d) \
- gDPSetColor(pkt, G_SETFILLCOLOR, (d))
-#define gsDPSetFillColor(d) \
- gsDPSetColor(G_SETFILLCOLOR, (d))
-
-#define gDPSetPrimDepth(pkt, z, dz) \
- gDPSetColor(pkt, G_SETPRIMDEPTH, \
- _SHIFTL(z, 16, 16) | _SHIFTL(dz, 0, 16))
-#define gsDPSetPrimDepth(z, dz) \
- gsDPSetColor(G_SETPRIMDEPTH, _SHIFTL(z, 16, 16) | \
- _SHIFTL(dz, 0, 16))
-
-#define gDPSetPrimColor(pkt, m, l, r, g, b, a) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | \
- _SHIFTL(m, 8, 8) | _SHIFTL(l, 0, 8)); \
- _g->words.w1 = (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | \
- _SHIFTL(b, 8, 8) | _SHIFTL(a, 0, 8)); \
-}
-
-#define gsDPSetPrimColor(m, l, r, g, b, a) \
-{{ \
- (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | _SHIFTL(m, 8, 8) | \
- _SHIFTL(l, 0, 8)), \
- (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | _SHIFTL(b, 8, 8) | \
- _SHIFTL(a, 0, 8)) \
-}}
-
-/*
- * gDPSetOtherMode (This is for expert user.)
- *
- * This command makes all othermode parameters set.
- * Do not use this command in the same DL with another g*SPSetOtherMode DLs.
- *
- * [Usage]
- * gDPSetOtherMode(pkt, modeA, modeB)
- *
- * 'modeA' is described all parameters of GroupA GBI command.
- * 'modeB' is also described all parameters of GroupB GBI command.
- *
- * GroupA:
- * gDPPipelineMode, gDPSetCycleType, gSPSetTexturePersp,
- * gDPSetTextureDetail, gDPSetTextureLOD, gDPSetTextureLUT,
- * gDPSetTextureFilter, gDPSetTextureConvert, gDPSetCombineKey,
- * gDPSetColorDither, gDPSetAlphaDither
- *
- * GroupB:
- * gDPSetAlphaCompare, gDPSetDepthSource, gDPSetRenderMode
- *
- * Use 'OR' operation to get modeA and modeB.
- *
- * modeA = G_PM_* | G_CYC_* | G_TP_* | G_TD_* | G_TL_* | G_TT_* | G_TF_*
- * G_TC_* | G_CK_* | G_CD_* | G_AD_*;
- *
- * modeB = G_AC_* | G_ZS_* | G_RM_* | G_RM_*2;
- */
-#define gDPSetOtherMode(pkt, mode0, mode1) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(G_RDPSETOTHERMODE,24,8)|_SHIFTL(mode0,0,24);\
- _g->words.w1 = (unsigned int)(mode1); \
-}
-
-#define gsDPSetOtherMode(mode0, mode1) \
-{{ \
- _SHIFTL(G_RDPSETOTHERMODE,24,8)|_SHIFTL(mode0,0,24), \
- (unsigned int)(mode1) \
-}}
-
-/*
- * Texturing macros
- */
-
-/* These are also defined defined above for Sprite Microcode */
-
-#define G_TX_LOADTILE 7
-#define G_TX_RENDERTILE 0
-
-#define G_TX_NOMIRROR 0
-#define G_TX_WRAP 0
-#define G_TX_MIRROR 0x1
-#define G_TX_CLAMP 0x2
-#define G_TX_NOMASK 0
-#define G_TX_NOLOD 0
-
-
-#ifndef MAX
-#define MAX(a, b) ((a) > (b) ? (a) : (b))
-#endif
-
-#ifndef MIN
-#define MIN(a, b) ((a) < (b) ? (a) : (b))
-#endif
-/*
- * Dxt is the inverse of the number of 64-bit words in a line of
- * the texture being loaded using the load_block command. If
- * there are any 1's to the right of the 11th fractional bit,
- * dxt should be rounded up. The following macros accomplish
- * this. The 4b macros are a special case since 4-bit textures
- * are loaded as 8-bit textures. Dxt is fixed point 1.11. RJM
- */
-#define G_TX_DXT_FRAC 11
-
-/*
- * For RCP 2.0, the maximum number of texels that can be loaded
- * using a load_block command is 2048. In order to load the total
- * 4kB of Tmem, change the texel size when loading to be G_IM_SIZ_16b,
- * then change the tile to the proper texel size after the load.
- * The g*DPLoadTextureBlock macros already do this, so this change
- * will be transparent if you use these macros. If you use
- * the g*DPLoadBlock macros directly, you will need to handle this
- * tile manipulation yourself. RJM.
- */
-#ifdef _HW_VERSION_1
-#define G_TX_LDBLK_MAX_TXL 4095
-#else
-#define G_TX_LDBLK_MAX_TXL 2047
-#endif /* _HW_VERSION_1 */
-
-#define TXL2WORDS(txls, b_txl) MAX(1, ((txls)*(b_txl)/8))
-#define CALC_DXT(width, b_txl) \
- (((1 << G_TX_DXT_FRAC) + TXL2WORDS(width, b_txl) - 1) / \
- TXL2WORDS(width, b_txl))
-
-#define TXL2WORDS_4b(txls) MAX(1, ((txls)/16))
-#define CALC_DXT_4b(width) \
- (((1 << G_TX_DXT_FRAC) + TXL2WORDS_4b(width) - 1) / \
- TXL2WORDS_4b(width))
-
-#define gDPLoadTileGeneric(pkt, c, tile, uls, ult, lrs, lrt) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(c, 24, 8) | _SHIFTL(uls, 12, 12) | \
- _SHIFTL(ult, 0, 12); \
- _g->words.w1 = _SHIFTL(tile, 24, 3) | _SHIFTL(lrs, 12, 12) | \
- _SHIFTL(lrt, 0, 12); \
-}
-
-#define gsDPLoadTileGeneric(c, tile, uls, ult, lrs, lrt) \
-{{ \
- _SHIFTL(c, 24, 8) | _SHIFTL(uls, 12, 12) | _SHIFTL(ult, 0, 12), \
- _SHIFTL(tile, 24, 3) | _SHIFTL(lrs, 12, 12) | _SHIFTL(lrt, 0, 12)\
-}}
-
-#define gDPSetTileSize(pkt, t, uls, ult, lrs, lrt) \
- gDPLoadTileGeneric(pkt, G_SETTILESIZE, t, uls, ult, lrs, lrt)
-#define gsDPSetTileSize(t, uls, ult, lrs, lrt) \
- gsDPLoadTileGeneric(G_SETTILESIZE, t, uls, ult, lrs, lrt)
-#define gDPLoadTile(pkt, t, uls, ult, lrs, lrt) \
- gDPLoadTileGeneric(pkt, G_LOADTILE, t, uls, ult, lrs, lrt)
-#define gsDPLoadTile(t, uls, ult, lrs, lrt) \
- gsDPLoadTileGeneric(G_LOADTILE, t, uls, ult, lrs, lrt)
-
-#define gDPSetTile(pkt, fmt, siz, line, tmem, tile, palette, cmt, \
- maskt, shiftt, cms, masks, shifts) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(G_SETTILE, 24, 8) | _SHIFTL(fmt, 21, 3) |\
- _SHIFTL(siz, 19, 2) | _SHIFTL(line, 9, 9) | \
- _SHIFTL(tmem, 0, 9); \
- _g->words.w1 = _SHIFTL(tile, 24, 3) | _SHIFTL(palette, 20, 4) | \
- _SHIFTL(cmt, 18, 2) | _SHIFTL(maskt, 14, 4) | \
- _SHIFTL(shiftt, 10, 4) |_SHIFTL(cms, 8, 2) | \
- _SHIFTL(masks, 4, 4) | _SHIFTL(shifts, 0, 4); \
-}
-
-#define gsDPSetTile(fmt, siz, line, tmem, tile, palette, cmt, \
- maskt, shiftt, cms, masks, shifts) \
-{{ \
- (_SHIFTL(G_SETTILE, 24, 8) | _SHIFTL(fmt, 21, 3) | \
- _SHIFTL(siz, 19, 2) | _SHIFTL(line, 9, 9) | _SHIFTL(tmem, 0, 9)),\
- (_SHIFTL(tile, 24, 3) | _SHIFTL(palette, 20, 4) | \
- _SHIFTL(cmt, 18, 2) | _SHIFTL(maskt, 14, 4) | \
- _SHIFTL(shiftt, 10, 4) | _SHIFTL(cms, 8, 2) | \
- _SHIFTL(masks, 4, 4) | _SHIFTL(shifts, 0, 4)) \
-}}
-
-/*
- * For RCP 2.0, the maximum number of texels that can be loaded
- * using a load_block command is 2048. In order to load the total
- * 4kB of Tmem, change the texel size when loading to be G_IM_SIZ_16b,
- * then change the tile to the proper texel size after the load.
- * The g*DPLoadTextureBlock macros already do this, so this change
- * will be transparent if you use these macros. If you use
- * the g*DPLoadBlock macros directly, you will need to handle this
- * tile manipulation yourself. RJM.
- */
-#define gDPLoadBlock(pkt, tile, uls, ult, lrs, dxt) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_LOADBLOCK, 24, 8) | \
- _SHIFTL(uls, 12, 12) | _SHIFTL(ult, 0, 12)); \
- _g->words.w1 = (_SHIFTL(tile, 24, 3) | \
- _SHIFTL((MIN(lrs,G_TX_LDBLK_MAX_TXL)), 12, 12) |\
- _SHIFTL(dxt, 0, 12)); \
-}
-
-#define gsDPLoadBlock(tile, uls, ult, lrs, dxt) \
-{{ \
- (_SHIFTL(G_LOADBLOCK, 24, 8) | _SHIFTL(uls, 12, 12) | \
- _SHIFTL(ult, 0, 12)), \
- (_SHIFTL(tile, 24, 3) | \
- _SHIFTL((MIN(lrs,G_TX_LDBLK_MAX_TXL)), 12, 12) | \
- _SHIFTL(dxt, 0, 12)) \
-}}
-
-#define gDPLoadTLUTCmd(pkt, tile, count) \
-{ \
- Gfx *_g = (Gfx *)pkt; \
- \
- _g->words.w0 = _SHIFTL(G_LOADTLUT, 24, 8); \
- _g->words.w1 = _SHIFTL((tile), 24, 3) | _SHIFTL((count), 14, 10);\
-}
-
-#define gsDPLoadTLUTCmd(tile, count) \
-{{ \
- _SHIFTL(G_LOADTLUT, 24, 8), \
- _SHIFTL((tile), 24, 3) | _SHIFTL((count), 14, 10) \
-}}
-
-#define gDPLoadTextureBlock(pkt, timg, fmt, siz, width, height, \
- pal, cms, cmt, masks, maskt, shifts, shiftt) \
-{ \
- gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
- gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \
- 0 , cmt, maskt, shiftt, cms, masks, shifts); \
- gDPLoadSync(pkt); \
- gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
- (((width)*(height) + siz##_INCR) >> siz##_SHIFT) -1, \
- CALC_DXT(width, siz##_BYTES)); \
- gDPPipeSync(pkt); \
- gDPSetTile(pkt, fmt, siz, \
- (((width) * siz##_LINE_BYTES)+7)>>3, 0, \
- G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
- shifts); \
- gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
-}
-
-#define gDPLoadTextureBlockYuv(pkt, timg, fmt, siz, width, height, \
- pal, cms, cmt, masks, maskt, shifts, shiftt) \
-{ \
- gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
- gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \
- 0 , cmt, maskt, shiftt, cms, masks, shifts); \
- gDPLoadSync(pkt); \
- gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
- (((width)*(height) + siz##_INCR) >> siz##_SHIFT) -1, \
- CALC_DXT(width, siz##_BYTES)); \
- gDPPipeSync(pkt); \
- gDPSetTile(pkt, fmt, siz, \
- (((width) * 1)+7)>>3, 0, \
- G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
- shifts); \
- gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
-}
-
-/* Load fix rww 27jun95 */
-/* The S at the end means odd lines are already word Swapped */
-
-#define gDPLoadTextureBlockS(pkt, timg, fmt, siz, width, height, \
- pal, cms, cmt, masks, maskt, shifts, shiftt) \
-{ \
- gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
- gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \
- 0 , cmt, maskt, shiftt, cms, masks, shifts); \
- gDPLoadSync(pkt); \
- gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
- (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1,0); \
- gDPPipeSync(pkt); \
- gDPSetTile(pkt, fmt, siz, \
- (((width) * siz##_LINE_BYTES)+7)>>3, 0, \
- G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
- shifts); \
- gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
-}
-
-/*
- * Allow tmem address and render tile to be specified.
- * The S at the end means odd lines are already word Swapped
- */
-#define gDPLoadMultiBlockS(pkt, timg, tmem, rtile, fmt, siz, width, \
- height, pal, cms, cmt, masks, maskt, shifts, shiftt) \
-{ \
- gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
- gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \
- 0 , cmt, maskt, shiftt, cms, masks, shifts); \
- gDPLoadSync(pkt); \
- gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
- (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1,0); \
- gDPPipeSync(pkt); \
- gDPSetTile(pkt, fmt, siz, \
- (((width) * siz##_LINE_BYTES)+7)>>3, tmem, \
- rtile, pal, cmt, maskt, shiftt, cms, masks, \
- shifts); \
- gDPSetTileSize(pkt, rtile, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
-}
-
-
-#define gDPLoadTextureBlockYuvS(pkt, timg, fmt, siz, width, height, \
- pal, cms, cmt, masks, maskt, shifts, shiftt) \
-{ \
- gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
- gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \
- 0 , cmt, maskt, shiftt, cms, masks, shifts); \
- gDPLoadSync(pkt); \
- gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
- (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1,0); \
- gDPPipeSync(pkt); \
- gDPSetTile(pkt, fmt, siz, \
- (((width) * 1)+7)>>3, 0, \
- G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
- shifts); \
- gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
-}
-
-/*
- * allows tmem address to be specified
- */
-#define _gDPLoadTextureBlock(pkt, timg, tmem, fmt, siz, width, height, \
- pal, cms, cmt, masks, maskt, shifts, shiftt) \
-{ \
- gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
- gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \
- 0, cmt, maskt, shiftt, cms, masks, shifts); \
- gDPLoadSync(pkt); \
- gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
- (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \
- CALC_DXT(width, siz##_BYTES)); \
- gDPPipeSync(pkt); \
- gDPSetTile(pkt, fmt, siz, (((width) * siz##_LINE_BYTES)+7)>>3, \
- tmem, G_TX_RENDERTILE, pal, cmt, \
- maskt, shiftt, cms, masks, shifts); \
- gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
-}
-
-/*
- * allows tmem address and render tile to be specified
- */
-#define _gDPLoadTextureBlockTile(pkt, timg, tmem, rtile, fmt, siz, width, \
- height, pal, cms, cmt, masks, maskt, shifts, shiftt) \
-{ \
- gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
- gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, 0,\
- cmt, maskt, shiftt, cms, masks, shifts); \
- gDPLoadSync(pkt); \
- gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
- (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \
- CALC_DXT(width, siz##_BYTES)); \
- gDPPipeSync(pkt); \
- gDPSetTile(pkt, fmt, siz, (((width) * siz##_LINE_BYTES)+7)>>3, \
- tmem, rtile, pal, cmt, \
- maskt, shiftt, cms, masks, shifts); \
- gDPSetTileSize(pkt, rtile, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
-}
-
-/*
- * allows tmem address and render tile to be specified
- */
-#define gDPLoadMultiBlock(pkt, timg, tmem, rtile, fmt, siz, width, \
- height, pal, cms, cmt, masks, maskt, shifts, shiftt) \
-{ \
- gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
- gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, 0,\
- cmt, maskt, shiftt, cms, masks, shifts); \
- gDPLoadSync(pkt); \
- gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
- (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \
- CALC_DXT(width, siz##_BYTES)); \
- gDPPipeSync(pkt); \
- gDPSetTile(pkt, fmt, siz, (((width) * siz##_LINE_BYTES)+7)>>3, \
- tmem, rtile, pal, cmt, \
- maskt, shiftt, cms, masks, shifts); \
- gDPSetTileSize(pkt, rtile, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
-}
-
-#define gsDPLoadTextureBlock(timg, fmt, siz, width, height, \
- pal, cms, cmt, masks, maskt, shifts, shiftt) \
- \
- gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \
- gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, 0, \
- G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, \
- masks, shifts), \
- gsDPLoadSync(), \
- gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \
- (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \
- CALC_DXT(width, siz##_BYTES)), \
- gsDPPipeSync(), \
- gsDPSetTile(fmt, siz, ((((width) * siz##_LINE_BYTES)+7)>>3), 0, \
- G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
- shifts), \
- gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC)
-
-/* Here is the static form of the pre-swapped texture block loading */
-/* See gDPLoadTextureBlockS() for reference. Basically, just don't
- calculate DxT, use 0 */
-
-#define gsDPLoadTextureBlockS(timg, fmt, siz, width, height, \
- pal, cms, cmt, masks, maskt, shifts, shiftt) \
- \
- gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \
- gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, 0 , \
- cmt, maskt,shiftt, cms, masks, shifts), \
- gsDPLoadSync(), \
- gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \
- (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, 0 ),\
- gsDPPipeSync(), \
- gsDPSetTile(fmt, siz, ((((width) * siz##_LINE_BYTES)+7)>>3), 0, \
- G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
- shifts), \
- gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC)
-
-/*
- * Allow tmem address to be specified
- */
-#define _gsDPLoadTextureBlock(timg, tmem, fmt, siz, width, height, \
- pal, cms, cmt, masks, maskt, shifts, shiftt) \
- \
- gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \
- gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \
- 0 , cmt, maskt, shiftt, cms, masks, shifts), \
- gsDPLoadSync(), \
- gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \
- (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \
- CALC_DXT(width, siz##_BYTES)), \
- gsDPPipeSync(), \
- gsDPSetTile(fmt, siz, \
- ((((width) * siz##_LINE_BYTES)+7)>>3), tmem, \
- G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
- shifts), \
- gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC)
-
-
-/*
- * Allow tmem address and render_tile to be specified
- */
-#define _gsDPLoadTextureBlockTile(timg, tmem, rtile, fmt, siz, width, \
- height, pal, cms, cmt, masks, maskt, shifts, shiftt) \
- \
- gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \
- gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \
- 0 , cmt, maskt, shiftt, cms, masks, shifts), \
- gsDPLoadSync(), \
- gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \
- (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \
- CALC_DXT(width, siz##_BYTES)), \
- gsDPPipeSync(), \
- gsDPSetTile(fmt, siz, \
- ((((width) * siz##_LINE_BYTES)+7)>>3), tmem, \
- rtile, pal, cmt, maskt, shiftt, cms, masks, \
- shifts), \
- gsDPSetTileSize(rtile, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC)
-
-
-/*
- * Allow tmem address and render_tile to be specified, useful when loading
- * mutilple tiles at a time.
- */
-#define gsDPLoadMultiBlock(timg, tmem, rtile, fmt, siz, width, \
- height, pal, cms, cmt, masks, maskt, shifts, shiftt) \
- \
- gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \
- gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \
- 0 , cmt, maskt, shiftt, cms, masks, shifts), \
- gsDPLoadSync(), \
- gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \
- (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \
- CALC_DXT(width, siz##_BYTES)), \
- gsDPPipeSync(), \
- gsDPSetTile(fmt, siz, \
- ((((width) * siz##_LINE_BYTES)+7)>>3), tmem, \
- rtile, pal, cmt, maskt, shiftt, cms, masks, \
- shifts), \
- gsDPSetTileSize(rtile, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC)
-
-/*
- * Allows tmem and render tile to be specified. Useful when loading
- * several tiles at a time.
- *
- * Here is the static form of the pre-swapped texture block loading
- * See gDPLoadTextureBlockS() for reference. Basically, just don't
- * calculate DxT, use 0
- */
-
-#define gsDPLoadMultiBlockS(timg, tmem, rtile, fmt, siz, width, height, \
- pal, cms, cmt, masks, maskt, shifts, shiftt) \
- \
- gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \
- gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, 0 , \
- cmt, maskt,shiftt, cms, masks, shifts), \
- gsDPLoadSync(), \
- gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \
- (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, 0 ),\
- gsDPPipeSync(), \
- gsDPSetTile(fmt, siz, ((((width) * siz##_LINE_BYTES)+7)>>3), tmem,\
- rtile, pal, cmt, maskt, shiftt, cms, masks, \
- shifts), \
- gsDPSetTileSize(rtile, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC)
-
-
-#define gDPLoadTextureBlock_4b(pkt, timg, fmt, width, height, \
- pal, cms, cmt, masks, maskt, shifts, shiftt) \
-{ \
- gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \
- gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, \
- cmt, maskt, shiftt, cms, masks, shifts); \
- gDPLoadSync(pkt); \
- gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
- (((width)*(height)+3)>>2)-1, \
- CALC_DXT_4b(width)); \
- gDPPipeSync(pkt); \
- gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), 0, \
- G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
- shifts); \
- gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
-}
-
-/* Load fix rww 27jun95 */
-/* The S at the end means odd lines are already word Swapped */
-
-#define gDPLoadTextureBlock_4bS(pkt, timg, fmt, width, height, \
- pal, cms, cmt, masks, maskt, shifts, shiftt) \
-{ \
- gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \
- gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, \
- cmt, maskt, shiftt, cms, masks, shifts); \
- gDPLoadSync(pkt); \
- gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
- (((width)*(height)+3)>>2)-1, 0 ); \
- gDPPipeSync(pkt); \
- gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), 0, \
- G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
- shifts); \
- gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
-}
-
-/*
- * 4-bit load block. Useful when loading multiple tiles
- */
-#define gDPLoadMultiBlock_4b(pkt, timg, tmem, rtile, fmt, width, height,\
- pal, cms, cmt, masks, maskt, shifts, shiftt) \
-{ \
- gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \
- gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0, \
- cmt, maskt, shiftt, cms, masks, shifts); \
- gDPLoadSync(pkt); \
- gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
- (((width)*(height)+3)>>2)-1, \
- CALC_DXT_4b(width)); \
- gDPPipeSync(pkt); \
- gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \
- rtile, pal, cmt, maskt, shiftt, cms, masks, \
- shifts); \
- gDPSetTileSize(pkt, rtile, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
-}
-
-/*
- * 4-bit load block. Allows tmem and render tile to be specified. Useful when
- * loading multiple tiles. The S means odd lines are already word swapped.
- */
-#define gDPLoadMultiBlock_4bS(pkt, timg, tmem, rtile, fmt, width, height,\
- pal, cms, cmt, masks, maskt, shifts, shiftt) \
-{ \
- gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \
- gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0, \
- cmt, maskt, shiftt, cms, masks, shifts); \
- gDPLoadSync(pkt); \
- gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
- (((width)*(height)+3)>>2)-1, 0 ); \
- gDPPipeSync(pkt); \
- gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \
- rtile, pal, cmt, maskt, shiftt, cms, masks, \
- shifts); \
- gDPSetTileSize(pkt, rtile, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
-}
-
-
-#define _gDPLoadTextureBlock_4b(pkt, timg, tmem, fmt, width, height, \
- pal, cms, cmt, masks, maskt, shifts, shiftt) \
-{ \
- gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \
- gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0, \
- cmt, maskt, shiftt, cms, masks, shifts); \
- gDPLoadSync(pkt); \
- gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
- (((width)*(height)+3)>>2)-1, \
- CALC_DXT_4b(width)); \
- gDPPipeSync(pkt); \
- gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \
- G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
- shifts); \
- gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
-}
-
-#define gsDPLoadTextureBlock_4b(timg, fmt, width, height, \
- pal, cms, cmt, masks, maskt, shifts, shiftt) \
- \
- gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \
- gsDPSetTile(fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0 , cmt, \
- maskt, shiftt, cms, masks, shifts), \
- gsDPLoadSync(), \
- gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1, \
- CALC_DXT_4b(width)), \
- gsDPPipeSync(), \
- gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), 0, \
- G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
- shifts), \
- gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC)
-
-#define gsDPLoadTextureBlock_4bS(timg, fmt, width, height, \
- pal, cms, cmt, masks, maskt, shifts, shiftt) \
- \
- gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \
- gsDPSetTile(fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0 , cmt, \
- maskt, shiftt, cms, masks, shifts), \
- gsDPLoadSync(), \
- gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1,0),\
- gsDPPipeSync(), \
- gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), 0, \
- G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
- shifts), \
- gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC)
-
-/*
- * 4-bit load block. Allows tmem address and render tile to be specified.
- * Useful when loading multiple tiles.
- */
-#define gsDPLoadMultiBlock_4b(timg, tmem, rtile, fmt, width, height, \
- pal, cms, cmt, masks, maskt, shifts, shiftt) \
- \
- gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \
- gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0 , cmt, \
- maskt, shiftt, cms, masks, shifts), \
- gsDPLoadSync(), \
- gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1, \
- CALC_DXT_4b(width)), \
- gsDPPipeSync(), \
- gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \
- rtile, pal, cmt, maskt, shiftt, cms, masks, \
- shifts), \
- gsDPSetTileSize(rtile, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC)
-
-
-/*
- * 4-bit load block. Allows tmem address and render tile to be specified.
- * Useful when loading multiple tiles. S means odd lines are already swapped.
- */
-#define gsDPLoadMultiBlock_4bS(timg, tmem, rtile, fmt, width, height, \
- pal, cms, cmt, masks, maskt, shifts, shiftt) \
- \
- gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \
- gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0 , cmt, \
- maskt, shiftt, cms, masks, shifts), \
- gsDPLoadSync(), \
- gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1,0),\
- gsDPPipeSync(), \
- gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \
- rtile, pal, cmt, maskt, shiftt, cms, masks, \
- shifts), \
- gsDPSetTileSize(rtile, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC)
-
-
-/*
- * Allows tmem address to be specified
- */
-#define _gsDPLoadTextureBlock_4b(timg, tmem, fmt, width, height, \
- pal, cms, cmt, masks, maskt, shifts, shiftt) \
- \
- gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \
- gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0 , cmt, \
- maskt, shiftt, cms, masks, shifts), \
- gsDPLoadSync(), \
- gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1, \
- CALC_DXT_4b(width)), \
- gsDPPipeSync(), \
- gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \
- G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
- shifts), \
- gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \
- ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
- ((height)-1) << G_TEXTURE_IMAGE_FRAC)
-
-#ifndef _HW_VERSION_1
-
-#define gDPLoadTextureTile(pkt, timg, fmt, siz, width, height, \
- uls, ult, lrs, lrt, pal, \
- cms, cmt, masks, maskt, shifts, shiftt) \
-{ \
- gDPSetTextureImage(pkt, fmt, siz, width, timg); \
- gDPSetTile(pkt, fmt, siz, \
- (((((lrs)-(uls)+1) * siz##_TILE_BYTES)+7)>>3), 0, \
- G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \
- shifts); \
- gDPLoadSync(pkt); \
- gDPLoadTile( pkt, G_TX_LOADTILE, \
- (uls)<<G_TEXTURE_IMAGE_FRAC, \
- (ult)<<G_TEXTURE_IMAGE_FRAC, \
- (lrs)<<G_TEXTURE_IMAGE_FRAC, \
- (lrt)<<G_TEXTURE_IMAGE_FRAC); \
- gDPPipeSync(pkt); \
- gDPSetTile(pkt, fmt, siz, \
- (((((lrs)-(uls)+1) * siz##_LINE_BYTES)+7)>>3), 0, \
- G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
- shifts); \
- gDPSetTileSize(pkt, G_TX_RENDERTILE, \
- (uls)<<G_TEXTURE_IMAGE_FRAC, \
- (ult)<<G_TEXTURE_IMAGE_FRAC, \
- (lrs)<<G_TEXTURE_IMAGE_FRAC, \
- (lrt)<<G_TEXTURE_IMAGE_FRAC) \
-}
-
-#else /******** WORKAROUND hw 1 load tile bug ********/
-
-#define gDPLoadTextureTile(pkt, timg, fmt, siz, width, height, \
- uls, ult, lrs, lrt, pal, \
- cms, cmt, masks, maskt, shifts, shiftt) \
- \
-{ \
- int _loadtile_i, _loadtile_nw; Gfx *_loadtile_temp = pkt; \
- guDPLoadTextureTile(_loadtile_temp, timg, fmt, siz, \
- width, height, \
- uls, ult, lrs, lrt, pal, \
- cms, cmt, masks, maskt, shifts, shiftt); \
- _loadtile_nw = guGetDPLoadTextureTileSz(ult, lrt) - 1; \
- for(_loadtile_i = 0; _loadtile_i < _loadtile_nw; _loadtile_i++) \
- pkt; \
-}
-
-#endif /* HW_VERSION_1 */
-
-/*
- * Load texture tile. Allows tmem address and render tile to be specified.
- * Useful for loading multiple tiles.
- */
-#define gDPLoadMultiTile(pkt, timg, tmem, rtile, fmt, siz, width, height,\
- uls, ult, lrs, lrt, pal, \
- cms, cmt, masks, maskt, shifts, shiftt) \
-{ \
- gDPSetTextureImage(pkt, fmt, siz, width, timg); \
- gDPSetTile(pkt, fmt, siz, \
- (((((lrs)-(uls)+1) * siz##_TILE_BYTES)+7)>>3), tmem, \
- G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \
- shifts); \
- gDPLoadSync(pkt); \
- gDPLoadTile( pkt, G_TX_LOADTILE, \
- (uls)<<G_TEXTURE_IMAGE_FRAC, \
- (ult)<<G_TEXTURE_IMAGE_FRAC, \
- (lrs)<<G_TEXTURE_IMAGE_FRAC, \
- (lrt)<<G_TEXTURE_IMAGE_FRAC); \
- gDPPipeSync(pkt); \
- gDPSetTile(pkt, fmt, siz, \
- (((((lrs)-(uls)+1) * siz##_LINE_BYTES)+7)>>3), tmem, \
- rtile, pal, cmt, maskt, shiftt, cms, masks, \
- shifts); \
- gDPSetTileSize(pkt, rtile, \
- (uls)<<G_TEXTURE_IMAGE_FRAC, \
- (ult)<<G_TEXTURE_IMAGE_FRAC, \
- (lrs)<<G_TEXTURE_IMAGE_FRAC, \
- (lrt)<<G_TEXTURE_IMAGE_FRAC) \
-}
-
-
-#define gsDPLoadTextureTile(timg, fmt, siz, width, height, \
- uls, ult, lrs, lrt, pal, \
- cms, cmt, masks, maskt, shifts, shiftt) \
- \
- gsDPSetTextureImage(fmt, siz, width, timg), \
- gsDPSetTile(fmt, siz, \
- (((((lrs)-(uls)+1) * siz##_TILE_BYTES)+7)>>3), 0, \
- G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \
- shifts), \
- gsDPLoadSync(), \
- gsDPLoadTile( G_TX_LOADTILE, \
- (uls)<<G_TEXTURE_IMAGE_FRAC, \
- (ult)<<G_TEXTURE_IMAGE_FRAC, \
- (lrs)<<G_TEXTURE_IMAGE_FRAC, \
- (lrt)<<G_TEXTURE_IMAGE_FRAC), \
- gsDPPipeSync(), \
- gsDPSetTile(fmt, siz, \
- (((((lrs)-(uls)+1) * siz##_LINE_BYTES)+7)>>3), 0, \
- G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks,\
- shifts), \
- gsDPSetTileSize(G_TX_RENDERTILE, \
- (uls)<<G_TEXTURE_IMAGE_FRAC, \
- (ult)<<G_TEXTURE_IMAGE_FRAC, \
- (lrs)<<G_TEXTURE_IMAGE_FRAC, \
- (lrt)<<G_TEXTURE_IMAGE_FRAC)
-
-/*
- * Load texture tile. Allows tmem address and render tile to be specified.
- * Useful for loading multiple tiles.
- */
-#define gsDPLoadMultiTile(timg, tmem, rtile, fmt, siz, width, height, \
- uls, ult, lrs, lrt, pal, \
- cms, cmt, masks, maskt, shifts, shiftt) \
- \
- gsDPSetTextureImage(fmt, siz, width, timg), \
- gsDPSetTile(fmt, siz, \
- (((((lrs)-(uls)+1) * siz##_TILE_BYTES)+7)>>3), \
- tmem, G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, \
- masks, shifts), \
- gsDPLoadSync(), \
- gsDPLoadTile( G_TX_LOADTILE, \
- (uls)<<G_TEXTURE_IMAGE_FRAC, \
- (ult)<<G_TEXTURE_IMAGE_FRAC, \
- (lrs)<<G_TEXTURE_IMAGE_FRAC, \
- (lrt)<<G_TEXTURE_IMAGE_FRAC), \
- gsDPPipeSync(), \
- gsDPSetTile(fmt, siz, \
- (((((lrs)-(uls)+1) * siz##_LINE_BYTES)+7)>>3), \
- tmem, rtile, pal, cmt, maskt, shiftt, cms, masks, \
- shifts), \
- gsDPSetTileSize(rtile, \
- (uls)<<G_TEXTURE_IMAGE_FRAC, \
- (ult)<<G_TEXTURE_IMAGE_FRAC, \
- (lrs)<<G_TEXTURE_IMAGE_FRAC, \
- (lrt)<<G_TEXTURE_IMAGE_FRAC)
-
-#define gDPLoadTextureTile_4b(pkt, timg, fmt, width, height, \
- uls, ult, lrs, lrt, pal, \
- cms, cmt, masks, maskt, shifts, shiftt) \
-{ \
- gDPSetTextureImage(pkt, fmt, G_IM_SIZ_8b, ((width)>>1), timg); \
- gDPSetTile(pkt, fmt, G_IM_SIZ_8b, \
- (((((lrs)-(uls)+1)>>1)+7)>>3), 0, \
- G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \
- shifts); \
- gDPLoadSync(pkt); \
- gDPLoadTile( pkt, G_TX_LOADTILE, \
- (uls)<<(G_TEXTURE_IMAGE_FRAC-1), \
- (ult)<<(G_TEXTURE_IMAGE_FRAC), \
- (lrs)<<(G_TEXTURE_IMAGE_FRAC-1), \
- (lrt)<<(G_TEXTURE_IMAGE_FRAC)); \
- gDPPipeSync(pkt); \
- gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \
- (((((lrs)-(uls)+1)>>1)+7)>>3), 0, \
- G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, \
- masks, shifts); \
- gDPSetTileSize(pkt, G_TX_RENDERTILE, \
- (uls)<<G_TEXTURE_IMAGE_FRAC, \
- (ult)<<G_TEXTURE_IMAGE_FRAC, \
- (lrs)<<G_TEXTURE_IMAGE_FRAC, \
- (lrt)<<G_TEXTURE_IMAGE_FRAC) \
-}
-
-/*
- * Load texture tile. Allows tmem address and render tile to be specified.
- * Useful for loading multiple tiles.
- */
-#define gDPLoadMultiTile_4b(pkt, timg, tmem, rtile, fmt, width, height, \
- uls, ult, lrs, lrt, pal, \
- cms, cmt, masks, maskt, shifts, shiftt) \
-{ \
- gDPSetTextureImage(pkt, fmt, G_IM_SIZ_8b, ((width)>>1), timg); \
- gDPSetTile(pkt, fmt, G_IM_SIZ_8b, \
- (((((lrs)-(uls)+1)>>1)+7)>>3), tmem, \
- G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \
- shifts); \
- gDPLoadSync(pkt); \
- gDPLoadTile( pkt, G_TX_LOADTILE, \
- (uls)<<(G_TEXTURE_IMAGE_FRAC-1), \
- (ult)<<(G_TEXTURE_IMAGE_FRAC), \
- (lrs)<<(G_TEXTURE_IMAGE_FRAC-1), \
- (lrt)<<(G_TEXTURE_IMAGE_FRAC)); \
- gDPPipeSync(pkt); \
- gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \
- (((((lrs)-(uls)+1)>>1)+7)>>3), tmem, \
- rtile, pal, cmt, maskt, shiftt, cms, masks, \
- shifts); \
- gDPSetTileSize(pkt, rtile, \
- (uls)<<G_TEXTURE_IMAGE_FRAC, \
- (ult)<<G_TEXTURE_IMAGE_FRAC, \
- (lrs)<<G_TEXTURE_IMAGE_FRAC, \
- (lrt)<<G_TEXTURE_IMAGE_FRAC) \
-}
-
-#define gsDPLoadTextureTile_4b(timg, fmt, width, height, \
- uls, ult, lrs, lrt, pal, \
- cms, cmt, masks, maskt, shifts, shiftt) \
- \
- gsDPSetTextureImage(fmt, G_IM_SIZ_8b, ((width)>>1), timg), \
- gsDPSetTile(fmt, G_IM_SIZ_8b, (((((lrs)-(uls)+1)>>1)+7)>>3), 0, \
- G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \
- shifts), \
- gsDPLoadSync(), \
- gsDPLoadTile( G_TX_LOADTILE, \
- (uls)<<(G_TEXTURE_IMAGE_FRAC-1), \
- (ult)<<(G_TEXTURE_IMAGE_FRAC), \
- (lrs)<<(G_TEXTURE_IMAGE_FRAC-1), \
- (lrt)<<(G_TEXTURE_IMAGE_FRAC)), \
- gsDPPipeSync(), \
- gsDPSetTile(fmt, G_IM_SIZ_4b, (((((lrs)-(uls)+1)>>1)+7)>>3), 0, \
- G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
- shifts), \
- gsDPSetTileSize(G_TX_RENDERTILE, \
- (uls)<<G_TEXTURE_IMAGE_FRAC, \
- (ult)<<G_TEXTURE_IMAGE_FRAC, \
- (lrs)<<G_TEXTURE_IMAGE_FRAC, \
- (lrt)<<G_TEXTURE_IMAGE_FRAC)
-
-/*
- * Load texture tile. Allows tmem address and render tile to be specified.
- * Useful for loading multiple tiles.
- */
-#define gsDPLoadMultiTile_4b(timg, tmem, rtile, fmt, width, height, \
- uls, ult, lrs, lrt, pal, \
- cms, cmt, masks, maskt, shifts, shiftt) \
- \
- gsDPSetTextureImage(fmt, G_IM_SIZ_8b, ((width)>>1), timg), \
- gsDPSetTile(fmt, G_IM_SIZ_8b, (((((lrs)-(uls)+1)>>1)+7)>>3), \
- tmem, G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, \
- masks, shifts), \
- gsDPLoadSync(), \
- gsDPLoadTile( G_TX_LOADTILE, \
- (uls)<<(G_TEXTURE_IMAGE_FRAC-1), \
- (ult)<<(G_TEXTURE_IMAGE_FRAC), \
- (lrs)<<(G_TEXTURE_IMAGE_FRAC-1), \
- (lrt)<<(G_TEXTURE_IMAGE_FRAC)), \
- gsDPPipeSync(), \
- gsDPSetTile(fmt, G_IM_SIZ_4b, (((((lrs)-(uls)+1)>>1)+7)>>3), \
- tmem, rtile, pal, cmt, maskt, shiftt, cms, masks, \
- shifts), \
- gsDPSetTileSize(rtile, \
- (uls)<<G_TEXTURE_IMAGE_FRAC, \
- (ult)<<G_TEXTURE_IMAGE_FRAC, \
- (lrs)<<G_TEXTURE_IMAGE_FRAC, \
- (lrt)<<G_TEXTURE_IMAGE_FRAC)
-
-/*
- * Load a 16-entry palette (for 4-bit CI textures)
- * Assumes a 16 entry tlut is being loaded, palette # is 0-15
- */
-#ifndef _HW_VERSION_1
-
-#define gDPLoadTLUT_pal16(pkt, pal, dram) \
-{ \
- gDPSetTextureImage(pkt, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram); \
- gDPTileSync(pkt); \
- gDPSetTile(pkt, 0, 0, 0, (256+(((pal)&0xf)*16)), \
- G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0); \
- gDPLoadSync(pkt); \
- gDPLoadTLUTCmd(pkt, G_TX_LOADTILE, 15); \
- gDPPipeSync(pkt) \
-}
-
-#else /* **** WORKAROUND hardware 1 load_tlut bug ****** */
-
-#define gDPLoadTLUT_pal16(pkt, pal, dram) \
- \
- _gDPLoadTextureBlock(pkt, dram, (256+(((pal)&0xf)*16)), \
- G_IM_FMT_RGBA, G_IM_SIZ_16b, 4*16, 1, \
- pal, 0, 0, 0, 0, 0, 0)
-
-#endif /* _HW_VERSION_1 */
-
-
-/*
- * Load a 16-entry palette (for 4-bit CI textures)
- * Assumes a 16 entry tlut is being loaded, palette # is 0-15
- */
-#ifndef _HW_VERSION_1
-
-#define gsDPLoadTLUT_pal16(pal, dram) \
- \
- gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram), \
- gsDPTileSync(), \
- gsDPSetTile(0, 0, 0, (256+(((pal)&0xf)*16)), \
- G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0), \
- gsDPLoadSync(), \
- gsDPLoadTLUTCmd(G_TX_LOADTILE, 15), \
- gsDPPipeSync()
-
-#else /* **** WORKAROUND hardware 1 load_tlut bug ****** */
-
-#define gsDPLoadTLUT_pal16(pal, dram) \
- \
- _gsDPLoadTextureBlock(dram, (256+(((pal)&0xf)*16)), \
- G_IM_FMT_RGBA, G_IM_SIZ_16b, 4*16, 1, \
- pal, 0, 0, 0, 0, 0, 0)
-
-#endif /* _HW_VERSION_1 */
-
-/*
- * Load a 256-entry palette (for 8-bit CI textures)
- * Assumes a 256 entry tlut is being loaded, palette # is not used
- */
-#ifndef _HW_VERSION_1
-
-#define gDPLoadTLUT_pal256(pkt, dram) \
-{ \
- gDPSetTextureImage(pkt, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram); \
- gDPTileSync(pkt); \
- gDPSetTile(pkt, 0, 0, 0, 256, \
- G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0); \
- gDPLoadSync(pkt); \
- gDPLoadTLUTCmd(pkt, G_TX_LOADTILE, 255); \
- gDPPipeSync(pkt) \
-}
-
-#else /* **** WORKAROUND hardware 1 load_tlut bug ****** */
-
-#define gDPLoadTLUT_pal256(pkt, dram) \
- \
- _gDPLoadTextureBlock(pkt, dram, 256, \
- G_IM_FMT_RGBA, G_IM_SIZ_16b, 4*256, 1, \
- 0, 0, 0, 0, 0, 0, 0)
-
-
-#endif /* _HW_VERSION_1 */
-
-
-#ifndef _HW_VERSION_1
-
-#define gsDPLoadTLUT_pal256(dram) \
- \
- gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram), \
- gsDPTileSync(), \
- gsDPSetTile(0, 0, 0, 256, \
- G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0), \
- gsDPLoadSync(), \
- gsDPLoadTLUTCmd(G_TX_LOADTILE, 255), \
- gsDPPipeSync()
-
-#else /* **** WORKAROUND hardware 1 load_tlut bug ****** */
-
-#define gsDPLoadTLUT_pal256(dram) \
- \
- _gsDPLoadTextureBlock(dram, 256, \
- G_IM_FMT_RGBA, G_IM_SIZ_16b, 4*256, 1, \
- 0, 0, 0, 0, 0, 0, 0)
-
-#endif /* _HW_VERSION_1 */
-
-
-#ifndef _HW_VERSION_1
-
-#define gDPLoadTLUT(pkt, count, tmemaddr, dram) \
-{ \
- gDPSetTextureImage(pkt, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram); \
- gDPTileSync(pkt); \
- gDPSetTile(pkt, 0, 0, 0, tmemaddr, \
- G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0); \
- gDPLoadSync(pkt); \
- gDPLoadTLUTCmd(pkt, G_TX_LOADTILE, ((count)-1)); \
- gDPPipeSync(pkt); \
-}
-
-#else /* **** WORKAROUND hardware 1 load_tlut bug ****** */
-
-#define gDPLoadTLUT(pkt, count, tmemaddr, dram) \
- \
- _gDPLoadTextureBlock(pkt, dram, tmemaddr, \
- G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, count, \
- 0, 0, 0, 0, 0, 0, 0)
-
-#endif /* _HW_VERSION_1 */
-
-
-#ifndef _HW_VERSION_1
-
-#define gsDPLoadTLUT(count, tmemaddr, dram) \
- \
- gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram), \
- gsDPTileSync(), \
- gsDPSetTile(0, 0, 0, tmemaddr, \
- G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0), \
- gsDPLoadSync(), \
- gsDPLoadTLUTCmd(G_TX_LOADTILE, ((count)-1)), \
- gsDPPipeSync()
-
-#else /* **** WORKAROUND hardware 1 load_tlut bug ****** */
-#define gsDPLoadTLUT(count, tmemaddr, dram) \
- \
- _gsDPLoadTextureBlock(dram, tmemaddr, \
- G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, count, \
- 0, 0, 0, 0, 0, 0, 0)
-
-#endif /* _HW_VERSION_1 */
-
-#define gDPSetScissor(pkt, mode, ulx, uly, lrx, lry) \
-{ \
- Gfx *_g = (Gfx *)pkt; \
- \
- _g->words.w0 = _SHIFTL(G_SETSCISSOR, 24, 8) | \
- _SHIFTL((int)((float)(ulx)*4.0F), 12, 12) | \
- _SHIFTL((int)((float)(uly)*4.0F), 0, 12); \
- _g->words.w1 = _SHIFTL(mode, 24, 2) | \
- _SHIFTL((int)((float)(lrx)*4.0F), 12, 12) | \
- _SHIFTL((int)((float)(lry)*4.0F), 0, 12); \
-}
-
-
-#define gDPSetScissorFrac(pkt, mode, ulx, uly, lrx, lry) \
-{ \
- Gfx *_g = (Gfx *)pkt; \
- \
- _g->words.w0 = _SHIFTL(G_SETSCISSOR, 24, 8) | \
- _SHIFTL((int)((ulx)), 12, 12) | \
- _SHIFTL((int)((uly)), 0, 12); \
- _g->words.w1 = _SHIFTL(mode, 24, 2) | \
- _SHIFTL((int)((lrx)), 12, 12) | \
- _SHIFTL((int)((lry)), 0, 12); \
-}
-
-#define gsDPSetScissor(mode, ulx, uly, lrx, lry) \
-{{ \
- _SHIFTL(G_SETSCISSOR, 24, 8) | \
- _SHIFTL((int)((float)(ulx)*4.0F), 12, 12) | \
- _SHIFTL((int)((float)(uly)*4.0F), 0, 12), \
- _SHIFTL(mode, 24, 2) | \
- _SHIFTL((int)((float)(lrx)*4.0F), 12, 12) | \
- _SHIFTL((int)((float)(lry)*4.0F), 0, 12) \
-}}
-
-#define gsDPSetScissorFrac(mode, ulx, uly, lrx, lry) \
-{{ \
- _SHIFTL(G_SETSCISSOR, 24, 8) | \
- _SHIFTL((int)((ulx)), 12, 12) | \
- _SHIFTL((int)((uly)), 0, 12), \
- _SHIFTL(mode, 24, 2) | \
- _SHIFTL((int)(lrx), 12, 12) | \
- _SHIFTL((int)(lry), 0, 12) \
-}}
-
-/* Fraction never used in fill */
-#define gDPFillRectangle(pkt, ulx, uly, lrx, lry) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_FILLRECT, 24, 8) | \
- _SHIFTL((lrx), 14, 10) | _SHIFTL((lry), 2, 10));\
- _g->words.w1 = (_SHIFTL((ulx), 14, 10) | _SHIFTL((uly), 2, 10));\
-}
-
-#define gsDPFillRectangle(ulx, uly, lrx, lry) \
-{{ \
- (_SHIFTL(G_FILLRECT, 24, 8) | _SHIFTL((lrx), 14, 10) | \
- _SHIFTL((lry), 2, 10)), \
- (_SHIFTL((ulx), 14, 10) | _SHIFTL((uly), 2, 10)) \
-}}
-
-/* like gDPFillRectangle but accepts negative arguments */
-#define gDPScisFillRectangle(pkt, ulx, uly, lrx, lry) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_FILLRECT, 24, 8) | \
- _SHIFTL(MAX((lrx),0), 14, 10) | \
- _SHIFTL(MAX((lry),0), 2, 10)); \
- _g->words.w1 = (_SHIFTL(MAX((ulx),0), 14, 10) | \
- _SHIFTL(MAX((uly),0), 2, 10)); \
-}
-
-#define gDPSetConvert(pkt, k0, k1, k2, k3, k4, k5) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_SETCONVERT, 24, 8) | \
- _SHIFTL(k0, 13, 9) | _SHIFTL(k1, 4, 9) | \
- _SHIFTR(k2, 5, 4)); \
- _g->words.w1 = (_SHIFTL(k2, 27, 5) | _SHIFTL(k3, 18, 9) | \
- _SHIFTL(k4, 9, 9) | _SHIFTL(k5, 0, 9)); \
-}
-
-#define gsDPSetConvert(k0, k1, k2, k3, k4, k5) \
-{{ \
- (_SHIFTL(G_SETCONVERT, 24, 8) | \
- _SHIFTL(k0, 13, 9) | _SHIFTL(k1, 4, 9) | _SHIFTR(k2, 5, 4)), \
- (_SHIFTL(k2, 27, 5) | _SHIFTL(k3, 18, 9) | _SHIFTL(k4, 9, 9) | \
- _SHIFTL(k5, 0, 9)) \
-}}
-
-#define gDPSetKeyR(pkt, cR, sR, wR) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(G_SETKEYR, 24, 8); \
- _g->words.w1 = (_SHIFTL(wR, 16, 12) | _SHIFTL(cR, 8, 8) | \
- _SHIFTL(sR, 0, 8)); \
-}
-
-#define gsDPSetKeyR(cR, sR, wR) \
-{{ \
- _SHIFTL(G_SETKEYR, 24, 8), \
- _SHIFTL(wR, 16, 12) | _SHIFTL(cR, 8, 8) | _SHIFTL(sR, 0, 8) \
-}}
-
-#define gDPSetKeyGB(pkt, cG, sG, wG, cB, sB, wB) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_SETKEYGB, 24, 8) | \
- _SHIFTL(wG, 12, 12) | _SHIFTL(wB, 0, 12)); \
- _g->words.w1 = (_SHIFTL(cG, 24, 8) | _SHIFTL(sG, 16, 8) | \
- _SHIFTL(cB, 8, 8) | _SHIFTL(sB, 0, 8)); \
-}
-
-#define gsDPSetKeyGB(cG, sG, wG, cB, sB, wB) \
-{{ \
- (_SHIFTL(G_SETKEYGB, 24, 8) | _SHIFTL(wG, 12, 12) | \
- _SHIFTL(wB, 0, 12)), \
- (_SHIFTL(cG, 24, 8) | _SHIFTL(sG, 16, 8) | _SHIFTL(cB, 8, 8) | \
- _SHIFTL(sB, 0, 8)) \
-}}
-
-#define gDPNoParam(pkt, cmd) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(cmd, 24, 8); \
- _g->words.w1 = 0; \
-}
-
-#define gsDPNoParam(cmd) \
-{{ \
- _SHIFTL(cmd, 24, 8), 0 \
-}}
-
-#define gDPParam(pkt, cmd, param) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = _SHIFTL(cmd, 24, 8); \
- _g->words.w1 = (param); \
-}
-
-#define gsDPParam(cmd, param) \
-{{ \
- _SHIFTL(cmd, 24, 8), (param) \
-}}
-
-/* Notice that textured rectangles are 128-bit commands, therefore
- * gsDPTextureRectangle() should not be used in display lists
- * under normal circumstances (use gsSPTextureRectangle()).
- * That is also why there is no gDPTextureRectangle() macros.
- */
-#define gsDPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
-{{ \
- (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | \
- _SHIFTL(yh, 0, 12)), \
- (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12)), \
-}}, \
-{{ \
- _SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16), \
- _SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16) \
-}}
-
-#define gDPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- if (pkt); \
- _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | \
- _SHIFTL(yh, 0, 12)); \
- _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \
- _SHIFTL(yl, 0, 12)); \
- _g ++; \
- _g->words.w0 = (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16)); \
- _g->words.w1 = (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)); \
-}
-
-#define gsDPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
-{{ \
- (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \
- _SHIFTL(yh, 0, 12)), \
- (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12)), \
-}}, \
-{{ \
- _SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16), \
- _SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16) \
-}}
-
-#define gDPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- if (pkt); \
- _g->words.w0 = (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \
- _SHIFTL(yh, 0, 12)); \
- _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \
- _SHIFTL(yl, 0, 12)); \
- _g ++; \
- _g->words.w0 = (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16)); \
- _g->words.w1 = (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)); \
-}
-
-#ifdef F3D_OLD
-# define gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | \
- _SHIFTL(yh, 0, 12)); \
- _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \
- _SHIFTL(yl, 0, 12)); \
- gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \
- gImmp1(pkt, G_RDPHALF_CONT, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)));\
-}
-
-#define gsSPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
- {{(_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | _SHIFTL(yh, 0, 12)),\
- (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12))}}, \
- gsImmp1(G_RDPHALF_2, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))), \
- gsImmp1(G_RDPHALF_CONT, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)))
-
-/* like gSPTextureRectangle but accepts negative position arguments */
-# define gSPScisTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | \
- _SHIFTL(MAX((s16)(xh),0), 12, 12) | \
- _SHIFTL(MAX((s16)(yh),0), 0, 12)); \
- _g->words.w1 = (_SHIFTL((tile), 24, 3) | \
- _SHIFTL(MAX((s16)(xl),0), 12, 12) | \
- _SHIFTL(MAX((s16)(yl),0), 0, 12)); \
- gImmp1(pkt, G_RDPHALF_2, \
- (_SHIFTL(((s) - \
- (((s16)(xl) < 0) ? \
- (((s16)(dsdx) < 0) ? \
- (MAX((((s16)(xl)*(s16)(dsdx))>>7),0)) : \
- (MIN((((s16)(xl)*(s16)(dsdx))>>7),0))) : 0)), \
- 16, 16) | \
- _SHIFTL(((t) - \
- (((yl) < 0) ? \
- (((s16)(dtdy) < 0) ? \
- (MAX((((s16)(yl)*(s16)(dtdy))>>7),0)) : \
- (MIN((((s16)(yl)*(s16)(dtdy))>>7),0))) : 0)), \
- 0, 16))); \
- gImmp1(pkt, G_RDPHALF_CONT, (_SHIFTL((dsdx), 16, 16) | \
- _SHIFTL((dtdy), 0, 16))); \
-}
-
-# define gsSPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
- {{(_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \
- _SHIFTL(yh, 0, 12)), \
- (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12))}}, \
- gsImmp1(G_RDPHALF_2, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))), \
- gsImmp1(G_RDPHALF_CONT, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)))
-
-# define gSPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) |\
- _SHIFTL(yh, 0, 12)); \
- _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \
- _SHIFTL(yl, 0, 12)); \
- gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \
- gImmp1(pkt, G_RDPHALF_CONT, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))); \
-}
-#else
-# define gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | \
- _SHIFTL(yh, 0, 12)); \
- _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \
- _SHIFTL(yl, 0, 12)); \
- gImmp1(pkt, G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \
- gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)));\
-}
-
-#define gsSPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
- {{(_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | _SHIFTL(yh, 0, 12)),\
- (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12))}}, \
- gsImmp1(G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))), \
- gsImmp1(G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)))
-
-/* like gSPTextureRectangle but accepts negative position arguments */
-# define gSPScisTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | \
- _SHIFTL(MAX((s16)(xh),0), 12, 12) | \
- _SHIFTL(MAX((s16)(yh),0), 0, 12)); \
- _g->words.w1 = (_SHIFTL((tile), 24, 3) | \
- _SHIFTL(MAX((s16)(xl),0), 12, 12) | \
- _SHIFTL(MAX((s16)(yl),0), 0, 12)); \
- gImmp1(pkt, G_RDPHALF_1, \
- (_SHIFTL(((s) - \
- (((s16)(xl) < 0) ? \
- (((s16)(dsdx) < 0) ? \
- (MAX((((s16)(xl)*(s16)(dsdx))>>7),0)) : \
- (MIN((((s16)(xl)*(s16)(dsdx))>>7),0))) : 0)), \
- 16, 16) | \
- _SHIFTL(((t) - \
- (((yl) < 0) ? \
- (((s16)(dtdy) < 0) ? \
- (MAX((((s16)(yl)*(s16)(dtdy))>>7),0)) : \
- (MIN((((s16)(yl)*(s16)(dtdy))>>7),0))) : 0)), \
- 0, 16))); \
- gImmp1(pkt, G_RDPHALF_2, (_SHIFTL((dsdx), 16, 16) | \
- _SHIFTL((dtdy), 0, 16))); \
-}
-
-# define gsSPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
- {{(_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \
- _SHIFTL(yh, 0, 12)), \
- (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12))}}, \
- gsImmp1(G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))), \
- gsImmp1(G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)))
-
-# define gSPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- _g->words.w0 = (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) |\
- _SHIFTL(yh, 0, 12)); \
- _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \
- _SHIFTL(yl, 0, 12)); \
- gImmp1(pkt, G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \
- gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))); \
-}
-#endif
-
-#define gsDPWord(wordhi, wordlo) \
- gsImmp1(G_RDPHALF_1, (uintptr_t)(wordhi)), \
- gsImmp1(G_RDPHALF_2, (uintptr_t)(wordlo))
-
-#define gDPWord(pkt, wordhi, wordlo) \
-{ \
- Gfx *_g = (Gfx *)(pkt); \
- \
- gImmp1(pkt, G_RDPHALF_1, (uintptr_t)(wordhi)); \
- gImmp1(pkt, G_RDPHALF_2, (uintptr_t)(wordlo)); \
-}
-
-#define gDPFullSync(pkt) gDPNoParam(pkt, G_RDPFULLSYNC)
-#define gsDPFullSync() gsDPNoParam(G_RDPFULLSYNC)
-#define gDPTileSync(pkt) gDPNoParam(pkt, G_RDPTILESYNC)
-#define gsDPTileSync() gsDPNoParam(G_RDPTILESYNC)
-#define gDPPipeSync(pkt) gDPNoParam(pkt, G_RDPPIPESYNC)
-#define gsDPPipeSync() gsDPNoParam(G_RDPPIPESYNC)
-#define gDPLoadSync(pkt) gDPNoParam(pkt, G_RDPLOADSYNC)
-#define gsDPLoadSync() gsDPNoParam(G_RDPLOADSYNC)
-#define gDPNoOp(pkt) gDPNoParam(pkt, G_NOOP)
-#define gsDPNoOp() gsDPNoParam(G_NOOP)
-#define gDPNoOpTag(pkt, tag) gDPParam(pkt, G_NOOP, tag)
-#define gsDPNoOpTag(tag) gsDPParam(G_NOOP, tag)
-
-#endif /* _LANGUAGE_C */
-
-
-#endif /* _GBI_H_ */
diff --git a/include/PR/gs2dex.h b/include/PR/gs2dex.h
deleted file mode 100644
index ced468555..000000000
--- a/include/PR/gs2dex.h
+++ /dev/null
@@ -1,392 +0,0 @@
-/*---------------------------------------------------------------------
- Copyright (C) 1997, Nintendo.
-
- File gs2dex.h
- Coded by Yoshitaka Yasumoto. Jul 31, 1997.
- Modified by
- Comments Header file for S2DEX ucode.
-
- $Id: gs2dex.h,v 1.21 1998/05/28 00:14:49 has Exp $
- ---------------------------------------------------------------------*/
-
-#ifndef _GS2DEX_H_
-#define _GS2DEX_H_
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-extern "C" {
-#endif
-
-#include <PR/ultratypes.h>
-
-/*===========================================================================*
- * Macro
- *===========================================================================*/
-#define GS_CALC_DXT(line) (((1<< G_TX_DXT_FRAC)-1)/(line)+1)
-#define GS_PIX2TMEM(pix, siz) ((pix)>>(4-(siz)))
-#define GS_PIX2DXT(pix, siz) GS_CALC_DXT(GS_PIX2TMEM((pix), (siz)))
-
-/*===========================================================================*
- * Data structures for S2DEX microcode
- *===========================================================================*/
-
-/*---------------------------------------------------------------------------*
- * Background
- *---------------------------------------------------------------------------*/
-#define G_BGLT_LOADBLOCK 0x0033
-#define G_BGLT_LOADTILE 0xfff4
-
-#define G_BG_FLAG_FLIPS 0x01
-#define G_BG_FLAG_FLIPT 0x10
-
-/* Non scalable background plane */
-typedef struct {
- u16 imageX; /* x-coordinate of upper-left position of texture (u10.5) */
- u16 imageW; /* width of the texture (u10.2) */
- s16 frameX; /* upper-left position of transferred frame (s10.2) */
- u16 frameW; /* width of transferred frame (u10.2) */
-
- u16 imageY; /* y-coordinate of upper-left position of texture (u10.5) */
- u16 imageH; /* height of the texture (u10.2) */
- s16 frameY; /* upper-left position of transferred frame (s10.2) */
- u16 frameH; /* height of transferred frame (u10.2) */
-
- u64 *imagePtr; /* texture source address on DRAM */
- u16 imageLoad; /* which to use, LoadBlock or LoadTile */
- u8 imageFmt; /* format of texel - G_IM_FMT_* */
- u8 imageSiz; /* size of texel - G_IM_SIZ_* */
- u16 imagePal; /* pallet number */
- u16 imageFlip; /* right & left image inversion (Inverted by G_BG_FLAG_FLIPS) */
-
- /* The following is set in the initialization routine guS2DInitBg(). There is no need for the user to set it. */
- u16 tmemW; /* TMEM width and Word size of frame 1 line.
- At LoadBlock, GS_PIX2TMEM(imageW/4,imageSiz)
- At LoadTile GS_PIX2TMEM(frameW/4,imageSiz)+1 */
- u16 tmemH; /* height of TMEM loadable at a time (s13.2) 4 times value
- When the normal texture, 512/tmemW*4
- When the CI texture, 256/tmemW*4 */
- u16 tmemLoadSH; /* SH value
- At LoadBlock, tmemSize/2-1
- At LoadTile, tmemW*16-1 */
- u16 tmemLoadTH; /* TH value or Stride value
- At LoadBlock, GS_CALC_DXT(tmemW)
- At LoadTile, tmemH-1 */
- u16 tmemSizeW; /* skip value of imagePtr for image 1-line
- At LoadBlock, tmemW*2
- At LoadTile, GS_PIX2TMEM(imageW/4,imageSiz)*2 */
- u16 tmemSize; /* skip value of imagePtr for 1-loading
- = tmemSizeW*tmemH */
-} uObjBg_t; /* 40 bytes */
-
-/* Scalable background plane */
-typedef struct {
- u16 imageX; /* x-coordinate of upper-left position of texture (u10.5) */
- u16 imageW; /* width of texture (u10.2) */
- s16 frameX; /* upper-left position of transferred frame (s10.2) */
- u16 frameW; /* width of transferred frame (u10.2) */
-
- u16 imageY; /* y-coordinate of upper-left position of texture (u10.5) */
- u16 imageH; /* height of texture (u10.2) */
- s16 frameY; /* upper-left position of transferred frame (s10.2) */
- u16 frameH; /* height of transferred frame (u10.2) */
-
- u64 *imagePtr; /* texture source address on DRAM */
- u16 imageLoad; /* Which to use, LoadBlock or LoadTile? */
- u8 imageFmt; /* format of texel - G_IM_FMT_* */
- u8 imageSiz; /* size of texel - G_IM_SIZ_* */
- u16 imagePal; /* pallet number */
- u16 imageFlip; /* right & left image inversion (Inverted by G_BG_FLAG_FLIPS) */
-
- u16 scaleW; /* scale value of X-direction (u5.10) */
- u16 scaleH; /* scale value of Y-direction (u5.10) */
- s32 imageYorig; /* start point of drawing on image (s20.5) */
-
- u8 padding[4];
-
-} uObjScaleBg_t; /* 40 bytes */
-
-typedef union {
- uObjBg_t b;
- uObjScaleBg_t s;
- long long int force_structure_alignment;
-} uObjBg;
-
-/*---------------------------------------------------------------------------*
- * 2D Objects
- *---------------------------------------------------------------------------*/
-#define G_OBJ_FLAG_FLIPS 1<<0 /* inversion to S-direction */
-#define G_OBJ_FLAG_FLIPT 1<<4 /* nversion to T-direction */
-
-typedef struct {
- s16 objX; /* s10.2 OBJ x-coordinate of upper-left end */
- u16 scaleW; /* u5.10 Scaling of u5.10 width direction */
- u16 imageW; /* u10.5 width of u10.5 texture (length of S-direction) */
- u16 paddingX; /* Unused - Always 0 */
- s16 objY; /* s10.2 OBJ y-coordinate of s10.2 OBJ upper-left end */
- u16 scaleH; /* u5.10 Scaling of u5.10 height direction */
- u16 imageH; /* u10.5 height of u10.5 texture (length of T-direction) */
- u16 paddingY; /* Unused - Always 0 */
- u16 imageStride; /* folding width of texel (In units of 64bit word) */
- u16 imageAdrs; /* texture header position in TMEM (In units of 64bit word) */
- u8 imageFmt; /* format of texel - G_IM_FMT_* */
- u8 imageSiz; /* size of texel - G_IM_SIZ_* */
- u8 imagePal; /* pallet number (0-7) */
- u8 imageFlags; /* The display flag - G_OBJ_FLAG_FLIP* */
-} uObjSprite_t; /* 24 bytes */
-
-typedef union {
- uObjSprite_t s;
- long long int force_structure_alignment;
-} uObjSprite;
-
-/*---------------------------------------------------------------------------*
- * 2D Matrix
- *---------------------------------------------------------------------------*/
-typedef struct {
- s32 A, B, C, D; /* s15.16 */
- s16 X, Y; /* s10.2 */
- u16 BaseScaleX; /* u5.10 */
- u16 BaseScaleY; /* u5.10 */
-} uObjMtx_t; /* 24 bytes */
-
-typedef union {
- uObjMtx_t m;
- long long int force_structure_alignment;
-} uObjMtx;
-
-typedef struct {
- s16 X, Y; /* s10.2 */
- u16 BaseScaleX; /* u5.10 */
- u16 BaseScaleY; /* u5.10 */
-} uObjSubMtx_t; /* 8 bytes */
-
-typedef union {
- uObjSubMtx_t m;
- long long int force_structure_alignment;
-} uObjSubMtx;
-
-/*---------------------------------------------------------------------------*
- * Loading into TMEM
- *---------------------------------------------------------------------------*/
-#define G_OBJLT_TXTRBLOCK 0x00001033
-#define G_OBJLT_TXTRTILE 0x00fc1034
-#define G_OBJLT_TLUT 0x00000030
-
-#define GS_TB_TSIZE(pix,siz) (GS_PIX2TMEM((pix),(siz))-1)
-#define GS_TB_TLINE(pix,siz) (GS_CALC_DXT(GS_PIX2TMEM((pix),(siz))))
-
-typedef struct {
- u32 type; /* G_OBJLT_TXTRBLOCK divided into types */
- u64 *image; /* texture source address on DRAM */
- u16 tmem; /* loaded TMEM word address (8byteWORD) */
- u16 tsize; /* Texture size, Specified by macro GS_TB_TSIZE() */
- u16 tline; /* width of Texture 1-line, Specified by macro GS_TB_TLINE() */
- u16 sid; /* STATE ID Multipled by 4 (Either one of 0, 4, 8 and 12) */
- u32 flag; /* STATE flag */
- u32 mask; /* STATE mask */
-} uObjTxtrBlock_t; /* 24 bytes */
-
-#define GS_TT_TWIDTH(pix,siz) ((GS_PIX2TMEM((pix), (siz))<<2)-1)
-#define GS_TT_THEIGHT(pix,siz) (((pix)<<2)-1)
-
-typedef struct {
- u32 type; /* G_OBJLT_TXTRTILE divided into types */
- u64 *image; /* texture source address on DRAM */
- u16 tmem; /* loaded TMEM word address (8byteWORD)*/
- u16 twidth; /* width of Texture (Specified by macro GS_TT_TWIDTH()) */
- u16 theight; /* height of Texture (Specified by macro GS_TT_THEIGHT()) */
- u16 sid; /* STATE ID Multipled by 4 (Either one of 0, 4, 8 and 12) */
- u32 flag; /* STATE flag */
- u32 mask; /* STATE mask */
-} uObjTxtrTile_t; /* 24 bytes */
-
-#define GS_PAL_HEAD(head) ((head)+256)
-#define GS_PAL_NUM(num) ((num)-1)
-
-typedef struct {
- u32 type; /* G_OBJLT_TLUT divided into types */
- u64 *image; /* texture source address on DRAM */
- u16 phead; /* pallet number of load header (Between 256 and 511) */
- u16 pnum; /* loading pallet number -1 */
- u16 zero; /* Assign 0 all the time */
- u16 sid; /* STATE ID Multipled by 4 (Either one of 0, 4, 8 and 12)*/
- u32 flag; /* STATE flag */
- u32 mask; /* STATE mask */
-} uObjTxtrTLUT_t; /* 24 bytes */
-
-typedef union {
- uObjTxtrBlock_t block;
- uObjTxtrTile_t tile;
- uObjTxtrTLUT_t tlut;
- long long int force_structure_alignment;
-} uObjTxtr;
-
-/*---------------------------------------------------------------------------*
- * Loading into TMEM & 2D Objects
- *---------------------------------------------------------------------------*/
-typedef struct {
- uObjTxtr txtr;
- uObjSprite sprite;
-} uObjTxSprite; /* 48 bytes */
-
-/*===========================================================================*
- * GBI Commands for S2DEX microcode
- *===========================================================================*/
-/* GBI Header */
-#ifdef F3DEX_GBI_2
-#define G_OBJ_RECTANGLE_R 0xda
-#define G_OBJ_MOVEMEM 0xdc
-#define G_RDPHALF_0 0xe4
-#define G_OBJ_RECTANGLE 0x01
-#define G_OBJ_SPRITE 0x02
-#define G_SELECT_DL 0x04
-#define G_OBJ_LOADTXTR 0x05
-#define G_OBJ_LDTX_SPRITE 0x06
-#define G_OBJ_LDTX_RECT 0x07
-#define G_OBJ_LDTX_RECT_R 0x08
-#define G_BG_1CYC 0x09
-#define G_BG_COPY 0x0a
-#define G_OBJ_RENDERMODE 0x0b
-#else
-#define G_BG_1CYC 0x01
-#define G_BG_COPY 0x02
-#define G_OBJ_RECTANGLE 0x03
-#define G_OBJ_SPRITE 0x04
-#define G_OBJ_MOVEMEM 0x05
-#define G_SELECT_DL 0xb0
-#define G_OBJ_RENDERMODE 0xb1
-#define G_OBJ_RECTANGLE_R 0xb2
-#define G_OBJ_LOADTXTR 0xc1
-#define G_OBJ_LDTX_SPRITE 0xc2
-#define G_OBJ_LDTX_RECT 0xc3
-#define G_OBJ_LDTX_RECT_R 0xc4
-#define G_RDPHALF_0 0xe4
-#endif
-
-/*---------------------------------------------------------------------------*
- * Background wrapped screen
- *---------------------------------------------------------------------------*/
-#define gSPBgRectangle(pkt, m, mptr) gDma0p((pkt),(m),(mptr),0)
-#define gsSPBgRectangle(m, mptr) gsDma0p( (m),(mptr),0)
-#define gSPBgRectCopy(pkt, mptr) gSPBgRectangle((pkt), G_BG_COPY, (mptr))
-#define gsSPBgRectCopy(mptr) gsSPBgRectangle( G_BG_COPY, (mptr))
-#define gSPBgRect1Cyc(pkt, mptr) gSPBgRectangle((pkt), G_BG_1CYC, (mptr))
-#define gsSPBgRect1Cyc(mptr) gsSPBgRectangle( G_BG_1CYC, (mptr))
-
-/*---------------------------------------------------------------------------*
- * 2D Objects
- *---------------------------------------------------------------------------*/
-#define gSPObjSprite(pkt, mptr) gDma0p((pkt),G_OBJ_SPRITE, (mptr),0)
-#define gsSPObjSprite(mptr) gsDma0p( G_OBJ_SPRITE, (mptr),0)
-#define gSPObjRectangle(pkt, mptr) gDma0p((pkt),G_OBJ_RECTANGLE, (mptr),0)
-#define gsSPObjRectangle(mptr) gsDma0p( G_OBJ_RECTANGLE, (mptr),0)
-#define gSPObjRectangleR(pkt, mptr) gDma0p((pkt),G_OBJ_RECTANGLE_R,(mptr),0)
-#define gsSPObjRectangleR(mptr) gsDma0p( G_OBJ_RECTANGLE_R,(mptr),0)
-
-/*---------------------------------------------------------------------------*
- * 2D Matrix
- *---------------------------------------------------------------------------*/
-#define gSPObjMatrix(pkt, mptr) gDma1p((pkt),G_OBJ_MOVEMEM,(mptr),0,23)
-#define gsSPObjMatrix(mptr) gsDma1p( G_OBJ_MOVEMEM,(mptr),0,23)
-#define gSPObjSubMatrix(pkt, mptr) gDma1p((pkt),G_OBJ_MOVEMEM,(mptr),2, 7)
-#define gsSPObjSubMatrix(mptr) gsDma1p( G_OBJ_MOVEMEM,(mptr),2, 7)
-
-/*---------------------------------------------------------------------------*
- * Loading into TMEM
- *---------------------------------------------------------------------------*/
-#define gSPObjLoadTxtr(pkt, tptr) gDma0p((pkt),G_OBJ_LOADTXTR, (tptr),23)
-#define gsSPObjLoadTxtr(tptr) gsDma0p( G_OBJ_LOADTXTR, (tptr),23)
-#define gSPObjLoadTxSprite(pkt, tptr) gDma0p((pkt),G_OBJ_LDTX_SPRITE,(tptr),47)
-#define gsSPObjLoadTxSprite(tptr) gsDma0p( G_OBJ_LDTX_SPRITE,(tptr),47)
-#define gSPObjLoadTxRect(pkt, tptr) gDma0p((pkt),G_OBJ_LDTX_RECT, (tptr),47)
-#define gsSPObjLoadTxRect(tptr) gsDma0p( G_OBJ_LDTX_RECT, (tptr),47)
-#define gSPObjLoadTxRectR(pkt, tptr) gDma0p((pkt),G_OBJ_LDTX_RECT_R,(tptr),47)
-#define gsSPObjLoadTxRectR(tptr) gsDma0p( G_OBJ_LDTX_RECT_R,(tptr),47)
-
-/*---------------------------------------------------------------------------*
- * Select Display List
- *---------------------------------------------------------------------------*/
-#define gSPSelectDL(pkt, mptr, sid, flag, mask) \
-{ gDma1p((pkt), G_RDPHALF_0, (flag), (u32)(mptr) & 0xffff, (sid)); \
- gDma1p((pkt), G_SELECT_DL, (mask), (u32)(mptr) >> 16, G_DL_PUSH); }
-#define gsSPSelectDL(mptr, sid, flag, mask) \
-{ gsDma1p(G_RDPHALF_0, (flag), (u32)(mptr) & 0xffff, (sid)); \
- gsDma1p(G_SELECT_DL, (mask), (u32)(mptr) >> 16, G_DL_PUSH); }
-#define gSPSelectBranchDL(pkt, mptr, sid, flag, mask) \
-{ gDma1p((pkt), G_RDPHALF_0, (flag), (u32)(mptr) & 0xffff, (sid)); \
- gDma1p((pkt), G_SELECT_DL, (mask), (u32)(mptr) >> 16, G_DL_NOPUSH); }
-#define gsSPSelectBranchDL(mptr, sid, flag, mask) \
-{ gsDma1p(G_RDPHALF_0, (flag), (u32)(mptr) & 0xffff, (sid)); \
- gsDma1p(G_SELECT_DL, (mask), (u32)(mptr) >> 16, G_DL_NOPUSH); }
-
-/*---------------------------------------------------------------------------*
- * Set general status
- *---------------------------------------------------------------------------*/
-#define G_MW_GENSTAT 0x08 /* Note that it is the same value of G_MW_FOG */
-
-#define gSPSetStatus(pkt, sid, val) \
- gMoveWd((pkt), G_MW_GENSTAT, (sid), (val))
-#define gsSPSetStatus(sid, val) \
- gsMoveWd( G_MW_GENSTAT, (sid), (val))
-
-/*---------------------------------------------------------------------------*
- * Set Object Render Mode
- *---------------------------------------------------------------------------*/
-#define G_OBJRM_NOTXCLAMP 0x01
-#define G_OBJRM_XLU 0x02 /* Ignored */
-#define G_OBJRM_ANTIALIAS 0x04 /* Ignored */
-#define G_OBJRM_BILERP 0x08
-#define G_OBJRM_SHRINKSIZE_1 0x10
-#define G_OBJRM_SHRINKSIZE_2 0x20
-#define G_OBJRM_WIDEN 0x40
-
-#define gSPObjRenderMode(pkt, mode) gImmp1((pkt),G_OBJ_RENDERMODE,(mode))
-#define gsSPObjRenderMode(mode) gsImmp1( G_OBJ_RENDERMODE,(mode))
-
-/*===========================================================================*
- * Render Mode Macro
- *===========================================================================*/
-#define RM_RA_SPRITE(clk) \
- AA_EN | CVG_DST_CLAMP | \
- CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \
- GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
-
-#define G_RM_SPRITE G_RM_OPA_SURF
-#define G_RM_SPRITE2 G_RM_OPA_SURF2
-#define G_RM_RA_SPRITE RM_RA_SPRITE(1)
-#define G_RM_RA_SPRITE2 RM_RA_SPRITE(2)
-#define G_RM_AA_SPRITE G_RM_AA_TEX_TERR
-#define G_RM_AA_SPRITE2 G_RM_AA_TEX_TERR2
-#define G_RM_XLU_SPRITE G_RM_XLU_SURF
-#define G_RM_XLU_SPRITE2 G_RM_XLU_SURF2
-#define G_RM_AA_XLU_SPRITE G_RM_AA_XLU_SURF
-#define G_RM_AA_XLU_SPRITE2 G_RM_AA_XLU_SURF2
-
-/*===========================================================================*
- * External functions
- *===========================================================================*/
-extern u64 gspS2DEX_fifoTextStart[], gspS2DEX_fifoTextEnd[];
-extern u64 gspS2DEX_fifoDataStart[], gspS2DEX_fifoDataEnd[];
-extern u64 gspS2DEX_fifo_dTextStart[], gspS2DEX_fifo_dTextEnd[];
-extern u64 gspS2DEX_fifo_dDataStart[], gspS2DEX_fifo_dDataEnd[];
-extern u64 gspS2DEX2_fifoTextStart[], gspS2DEX2_fifoTextEnd[];
-extern u64 gspS2DEX2_fifoDataStart[], gspS2DEX2_fifoDataEnd[];
-extern u64 gspS2DEX2_xbusTextStart[], gspS2DEX2_xbusTextEnd[];
-extern u64 gspS2DEX2_xbusDataStart[], gspS2DEX2_xbusDataEnd[];
-extern void guS2DInitBg(uObjBg *);
-
-#ifdef F3DEX_GBI_2
-# define guS2DEmuBgRect1Cyc guS2D2EmuBgRect1Cyc /*Wrapper*/
-# define guS2DEmuSetScissor guS2D2EmuSetScissor /*Wrapper*/
- extern void guS2D2EmuSetScissor(u32, u32, u32, u32, u8);
- extern void guS2D2EmuBgRect1Cyc(Gfx **, uObjBg *);
-#else
- extern void guS2DEmuSetScissor(u32, u32, u32, u32, u8);
- extern void guS2DEmuBgRect1Cyc(Gfx **, uObjBg *);
-#endif
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-}
-#endif
-#endif /* _GS2DEX_H_ */
-
-/*======== End of gs2dex.h ========*/
diff --git a/include/PR/gu.h b/include/PR/gu.h
deleted file mode 100644
index 9b34e19f0..000000000
--- a/include/PR/gu.h
+++ /dev/null
@@ -1,55 +0,0 @@
-#ifndef _ULTRA64_GU_H_
-#define _ULTRA64_GU_H_
-
-#include <PR/mbi.h>
-#include <PR/ultratypes.h>
-#include "common_structs.h"
-
-#define GU_PI 3.1415926
-/* Functions */
-
-void guPerspectiveF(float mf[4][4], u16 *perspNorm, float fovy, float aspect,
- float near, float far, float scale);
-void guPerspective(Mtx *m, u16 *perspNorm, float fovy, float aspect, float near,
- float far, float scale);
-void guFrustum(Mtx *m, float left, float right, float bottom, float top,
- float near, float far, float scale);
-void guOrtho(Mtx *m, float left, float right, float bottom, float top,
- float near, float far, float scale);
-void guTranslate(Mtx *m, float x, float y, float z);
-void guRotate(Mtx *m, float a, float x, float y, float z);
-void guScale(Mtx *m, float x, float y, float z);
-void guMtxF2L(float mf[4][4], Mtx *m);
-void guMtxIdent(Mtx *m);
-void guMtxIdentF(float mf[4][4]);
-void guMtxL2F(float mf[4][4], Mtx *m);
-void guNormalize(float *, float *, float *);
-
-
-void guLookAt(Mtx *,
- f32,
- f32,
- f32,
- f32,
- f32,
- f32,
- f32,
- f32,
- f32);
-
-void guLookAtF(f32[4][4],
- f32,
- f32,
- f32,
- f32,
- f32,
- f32,
- f32,
- f32,
- f32);
-
-/* Used only in Fast3DEX2 */
-void guLookAtReflect (Mtx *m, LookAt *l, float xEye, float yEye, float zEye,
- float xAt, float yAt, float zAt,
- float xUp, float yUp, float zUp);
-#endif
diff --git a/include/PR/libaudio.h b/include/PR/libaudio.h
index c374a9ff3..209a43227 100644
--- a/include/PR/libaudio.h
+++ b/include/PR/libaudio.h
@@ -1,7 +1,7 @@
#ifndef _ULTRA64_LIBAUDIO_H_
#define _ULTRA64_LIBAUDIO_H_
-#include "abi.h"
+#include <libultra/abi.h>
typedef struct
{
diff --git a/include/PR/libultra.h b/include/PR/libultra.h
deleted file mode 100644
index eaccc0113..000000000
--- a/include/PR/libultra.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef _LIBULTRA_H
-#define _LIBULTRA_H
-
-#define TV_TYPE_NTSC 1
-#define TV_TYPE_PAL 0
-#define TV_TYPE_MPAL 2
-
-#define RESET_TYPE_COLD_RESET 0
-#define RESET_TYPE_NMI 1
-#define RESET_TYPE_BOOT_DISK 2
-
-extern u32 osTvType;
-extern u32 osRomBase;
-extern u32 osResetType;
-extern u32 osMemSize;
-extern s32 osAppNmiBuffer[16];
-
-#endif /* _LIBULTRA_H */
diff --git a/include/PR/mbi.h b/include/PR/mbi.h
deleted file mode 100644
index 6d54a00e2..000000000
--- a/include/PR/mbi.h
+++ /dev/null
@@ -1,101 +0,0 @@
-#ifndef _MBI_H_
-#define _MBI_H_
-
-/**************************************************************************
- * *
- * Copyright (C) 1994, Silicon Graphics, Inc. *
- * *
- * These coded instructions, statements, and computer programs contain *
- * unpublished proprietary information of Silicon Graphics, Inc., and *
- * are protected by Federal copyright law. They may not be disclosed *
- * to third parties or copied or duplicated in any form, in whole or *
- * in part, without the prior written consent of Silicon Graphics, Inc. *
- * *
- **************************************************************************/
-
-/**************************************************************************
- *
- * $Revision: 1.136 $
- * $Date: 1999/01/05 13:04:00 $
- * $Source: /hosts/gate3/exdisk2/cvs/N64OS/Master/cvsmdev2/PR/include/mbi.h,v $
- *
- **************************************************************************/
-
-/*
- * 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) \
- ((unsigned int) (((unsigned int)(v) & ((0x01 << (w)) - 1)) << (s)))
-#define _SHIFTR(v, s, w) \
- ((unsigned int)(((unsigned int)(v) >> (s)) & ((0x01 << (w)) - 1)))
-
-#define _SHIFT _SHIFTL /* old, for compatibility only */
-
-#define G_ON (1)
-#define G_OFF (0)
-
-/**************************************************************************
- *
- * Graphics Binary Interface
- *
- **************************************************************************/
-
-#include <PR/gbi.h>
-
-/**************************************************************************
- *
- * Audio Binary Interface
- *
- **************************************************************************/
-
-#include <PR/abi.h>
-
-/**************************************************************************
- *
- * Task list
- *
- **************************************************************************/
-
-#define M_GFXTASK 1
-#define M_AUDTASK 2
-#define M_VIDTASK 3
-#define M_HVQTASK 6
-#define M_HVQMTASK 7
-
-/**************************************************************************
- *
- * Segment macros and definitions
- *
- **************************************************************************/
-
-#define NUM_SEGMENTS (16)
-#define SEGMENT_OFFSET(a) ((unsigned int)(a) & 0x00ffffff)
-#define SEGMENT_NUMBER(a) (((unsigned int)(a) << 4) >> 28)
-#define SEGMENT_NUMBER2(a) ((unsigned int)(a) >> 24)
-#define SEGMENT_ADDR(num, off) (((num) << 24) + (off))
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-#endif /* !_MBI_H_ */
diff --git a/include/PR/os.h b/include/PR/os.h
deleted file mode 100644
index e710ccaa8..000000000
--- a/include/PR/os.h
+++ /dev/null
@@ -1,800 +0,0 @@
-
-/*====================================================================
- * os.h
- *
- * Copyright 1995, Silicon Graphics, Inc.
- * All Rights Reserved.
- *
- * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics,
- * Inc.; the contents of this file may not be disclosed to third
- * parties, copied or duplicated in any form, in whole or in part,
- * without the prior written permission of Silicon Graphics, Inc.
- *
- * RESTRICTED RIGHTS LEGEND:
- * Use, duplication or disclosure by the Government is subject to
- * restrictions as set forth in subdivision (c)(1)(ii) of the Rights
- * in Technical Data and Computer Software clause at DFARS
- * 252.227-7013, and/or in similar or successor clauses in the FAR,
- * DOD or NASA FAR Supplement. Unpublished - rights reserved under the
- * Copyright Laws of the United States.
- *====================================================================*/
-
-/**************************************************************************
- *
- * $Revision: 1.149 $
- * $Date: 1997/12/15 04:30:52 $
- * $Source: /disk6/Master/cvsmdev2/PR/include/os.h,v $
- *
- **************************************************************************/
-
-
-#ifndef _OS_H_
-#define _OS_H_
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-extern "C" {
-#endif
-
-#include <PR/ultratypes.h>
-#include "PR/os_message.h"
-
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/**************************************************************************
- *
- * Type definitions
- *
- */
-
-/*
- * Structure for device manager block
- */
-typedef struct {
- s32 active; /* Status flag */
- OSThread *thread; /* Calling thread */
- OSMesgQueue *cmdQueue; /* Command queue */
- OSMesgQueue *evtQueue; /* Event queue */
- OSMesgQueue *acsQueue; /* Access queue */
- /* Raw DMA routine */
- s32 (*dma)(s32, u32, void *, u32);
- s32 (*edma)(OSPiHandle *, s32, u32, void *, u32);
-} OSDevMgr;
-
-/*
- * Structure for file system
- */
-
-
-
-typedef struct {
- int status;
- OSMesgQueue *queue;
- int channel;
- u8 id[32];
- u8 label[32];
- int version;
- int dir_size;
- int inode_table; /* block location */
- int minode_table; /* mirrioring inode_table */
- int dir_table; /* block location */
- int inode_start_page; /* page # */
- u8 banks;
- u8 activebank;
-} OSPfs;
-
-
-typedef struct {
- u32 file_size; /* bytes */
- u32 game_code;
- u16 company_code;
- char ext_name[4];
- char game_name[16];
-} OSPfsState;
-
-/*
- * Structure for Profiler
- */
-typedef struct {
- u16 *histo_base; /* histogram base */
- u32 histo_size; /* histogram size */
- u32 *text_start; /* start of text segment */
- u32 *text_end; /* end of text segment */
-} OSProf;
-
-#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
-
-/**************************************************************************
- *
- * Global definitions
- *
- */
-
-/* Thread states */
-
-#define OS_STATE_STOPPED 1
-#define OS_STATE_RUNNABLE 2
-#define OS_STATE_RUNNING 4
-#define OS_STATE_WAITING 8
-
-/* Events */
-#ifdef _FINALROM
-#define OS_NUM_EVENTS 15
-#else
-#define OS_NUM_EVENTS 23
-#endif
-
-#define OS_EVENT_SW1 0 /* CPU SW1 interrupt */
-#define OS_EVENT_SW2 1 /* CPU SW2 interrupt */
-#define OS_EVENT_CART 2 /* Cartridge interrupt: used by rmon */
-#define OS_EVENT_COUNTER 3 /* Counter int: used by VI/Timer Mgr */
-#define OS_EVENT_SP 4 /* SP task done interrupt */
-#define OS_EVENT_SI 5 /* SI (controller) interrupt */
-#define OS_EVENT_AI 6 /* AI interrupt */
-#define OS_EVENT_VI 7 /* VI interrupt: used by VI/Timer Mgr */
-#define OS_EVENT_PI 8 /* PI interrupt: used by PI Manager */
-#define OS_EVENT_DP 9 /* DP full sync interrupt */
-#define OS_EVENT_CPU_BREAK 10 /* CPU breakpoint: used by rmon */
-#define OS_EVENT_SP_BREAK 11 /* SP breakpoint: used by rmon */
-#define OS_EVENT_FAULT 12 /* CPU fault event: used by rmon */
-#define OS_EVENT_THREADSTATUS 13 /* CPU thread status: used by rmon */
-#define OS_EVENT_PRENMI 14 /* Pre NMI interrupt */
-#ifndef _FINALROM
-#define OS_EVENT_RDB_READ_DONE 15 /* RDB read ok event: used by rmon */
-#define OS_EVENT_RDB_LOG_DONE 16 /* read of log data complete */
-#define OS_EVENT_RDB_DATA_DONE 17 /* read of hostio data complete */
-#define OS_EVENT_RDB_REQ_RAMROM 18 /* host needs ramrom access */
-#define OS_EVENT_RDB_FREE_RAMROM 19 /* host is done with ramrom access */
-#define OS_EVENT_RDB_DBG_DONE 20
-#define OS_EVENT_RDB_FLUSH_PROF 21
-#define OS_EVENT_RDB_ACK_PROF 22
-#endif
-
-/* Flags for debugging purpose */
-
-#define OS_FLAG_CPU_BREAK 1 /* Break exception has occurred */
-#define OS_FLAG_FAULT 2 /* CPU fault has occurred */
-
-/* Interrupt masks */
-
-#define OS_IM_NONE 0x00000001
-#define OS_IM_SW1 0x00000501
-#define OS_IM_SW2 0x00000601
-#define OS_IM_CART 0x00000c01
-#define OS_IM_PRENMI 0x00001401
-#define OS_IM_RDBWRITE 0x00002401
-#define OS_IM_RDBREAD 0x00004401
-#define OS_IM_COUNTER 0x00008401
-#define OS_IM_CPU 0x0000ff01
-#define OS_IM_SP 0x00010401
-#define OS_IM_SI 0x00020401
-#define OS_IM_AI 0x00040401
-#define OS_IM_VI 0x00080401
-#define OS_IM_PI 0x00100401
-#define OS_IM_DP 0x00200401
-#define OS_IM_ALL 0x003fff01
-#define RCP_IMASK 0x003f0000
-#define RCP_IMASKSHIFT 16
-
-/* Recommended thread priorities for the system threads */
-
-#define OS_PRIORITY_MAX 255
-#define OS_PRIORITY_VIMGR 254
-#define OS_PRIORITY_RMON 250
-#define OS_PRIORITY_RMONSPIN 200
-#define OS_PRIORITY_PIMGR 150
-#define OS_PRIORITY_SIMGR 140
-#define OS_PRIORITY_APPMAX 127
-#define OS_PRIORITY_IDLE 0 /* Must be 0 */
-
-
-/* Flags to turn blocking on/off when sending/receiving message */
-
-#define OS_MESG_NOBLOCK 0
-#define OS_MESG_BLOCK 1
-
-/* Flags to indicate direction of data transfer */
-
-#define OS_READ 0 /* device -> RDRAM */
-#define OS_WRITE 1 /* device <- RDRAM */
-#define OS_OTHERS 2 /* for Leo disk only */
-
-/*
- * I/O message types
- */
-#define OS_MESG_TYPE_BASE (10)
-#define OS_MESG_TYPE_LOOPBACK (OS_MESG_TYPE_BASE+0)
-#define OS_MESG_TYPE_DMAREAD (OS_MESG_TYPE_BASE+1)
-#define OS_MESG_TYPE_DMAWRITE (OS_MESG_TYPE_BASE+2)
-#define OS_MESG_TYPE_VRETRACE (OS_MESG_TYPE_BASE+3)
-#define OS_MESG_TYPE_COUNTER (OS_MESG_TYPE_BASE+4)
-#define OS_MESG_TYPE_EDMAREAD (OS_MESG_TYPE_BASE+5)
-#define OS_MESG_TYPE_EDMAWRITE (OS_MESG_TYPE_BASE+6)
-
-/*
- * I/O message priority
- */
-#define OS_MESG_PRI_NORMAL 0
-#define OS_MESG_PRI_HIGH 1
-
-/*
- * Page size argument for TLB routines
- */
-#define OS_PM_4K 0x0000000
-#define OS_PM_16K 0x0006000
-#define OS_PM_64K 0x001e000
-#define OS_PM_256K 0x007e000
-#define OS_PM_1M 0x01fe000
-#define OS_PM_4M 0x07fe000
-#define OS_PM_16M 0x1ffe000
-
-/*
- * Stack size for I/O device managers: PIM (PI Manager), VIM (VI Manager),
- * SIM (SI Manager)
- *
- */
-#define OS_PIM_STACKSIZE 4096
-#define OS_VIM_STACKSIZE 4096
-#define OS_SIM_STACKSIZE 4096
-
-#define OS_MIN_STACKSIZE 72
-
-/*
- * Values for osTvType
- */
-#define OS_TV_PAL 0
-#define OS_TV_NTSC 1
-#define OS_TV_MPAL 2
-
-/*
- * Video Interface (VI) mode type
- */
-#define OS_VI_NTSC_LPN1 0 /* NTSC */
-#define OS_VI_NTSC_LPF1 1
-#define OS_VI_NTSC_LAN1 2
-#define OS_VI_NTSC_LAF1 3
-#define OS_VI_NTSC_LPN2 4
-#define OS_VI_NTSC_LPF2 5
-#define OS_VI_NTSC_LAN2 6
-#define OS_VI_NTSC_LAF2 7
-#define OS_VI_NTSC_HPN1 8
-#define OS_VI_NTSC_HPF1 9
-#define OS_VI_NTSC_HAN1 10
-#define OS_VI_NTSC_HAF1 11
-#define OS_VI_NTSC_HPN2 12
-#define OS_VI_NTSC_HPF2 13
-
-#define OS_VI_PAL_LPN1 14 /* PAL */
-#define OS_VI_PAL_LPF1 15
-#define OS_VI_PAL_LAN1 16
-#define OS_VI_PAL_LAF1 17
-#define OS_VI_PAL_LPN2 18
-#define OS_VI_PAL_LPF2 19
-#define OS_VI_PAL_LAN2 20
-#define OS_VI_PAL_LAF2 21
-#define OS_VI_PAL_HPN1 22
-#define OS_VI_PAL_HPF1 23
-#define OS_VI_PAL_HAN1 24
-#define OS_VI_PAL_HAF1 25
-#define OS_VI_PAL_HPN2 26
-#define OS_VI_PAL_HPF2 27
-
-#define OS_VI_MPAL_LPN1 28 /* MPAL - mainly Brazil */
-#define OS_VI_MPAL_LPF1 29
-#define OS_VI_MPAL_LAN1 30
-#define OS_VI_MPAL_LAF1 31
-#define OS_VI_MPAL_LPN2 32
-#define OS_VI_MPAL_LPF2 33
-#define OS_VI_MPAL_LAN2 34
-#define OS_VI_MPAL_LAF2 35
-#define OS_VI_MPAL_HPN1 36
-#define OS_VI_MPAL_HPF1 37
-#define OS_VI_MPAL_HAN1 38
-#define OS_VI_MPAL_HAF1 39
-#define OS_VI_MPAL_HPN2 40
-#define OS_VI_MPAL_HPF2 41
-
-/*
- * Video Interface (VI) special features
- */
-#define OS_VI_GAMMA_ON 0x0001
-#define OS_VI_GAMMA_OFF 0x0002
-#define OS_VI_GAMMA_DITHER_ON 0x0004
-#define OS_VI_GAMMA_DITHER_OFF 0x0008
-#define OS_VI_DIVOT_ON 0x0010
-#define OS_VI_DIVOT_OFF 0x0020
-#define OS_VI_DITHER_FILTER_ON 0x0040
-#define OS_VI_DITHER_FILTER_OFF 0x0080
-
-/*
- * Video Interface (VI) mode attribute bit
- */
-#define OS_VI_BIT_NONINTERLACE 0x0001 /* lo-res */
-#define OS_VI_BIT_INTERLACE 0x0002 /* lo-res */
-#define OS_VI_BIT_NORMALINTERLACE 0x0004 /* hi-res */
-#define OS_VI_BIT_DEFLICKINTERLACE 0x0008 /* hi-res */
-#define OS_VI_BIT_ANTIALIAS 0x0010
-#define OS_VI_BIT_POINTSAMPLE 0x0020
-#define OS_VI_BIT_16PIXEL 0x0040
-#define OS_VI_BIT_32PIXEL 0x0080
-#define OS_VI_BIT_LORES 0x0100
-#define OS_VI_BIT_HIRES 0x0200
-#define OS_VI_BIT_NTSC 0x0400
-#define OS_VI_BIT_PAL 0x0800
-
-/*
- * Leo Disk
- */
-
-/* transfer mode */
-
-#define LEO_BLOCK_MODE 1
-#define LEO_TRACK_MODE 2
-#define LEO_SECTOR_MODE 3
-
-/*
- * Controllers number
- */
-
-#ifndef _HW_VERSION_1
-#define MAXCONTROLLERS 4
-#else
-#define MAXCONTROLLERS 6
-#endif
-
-/* controller errors */
-#define CONT_NO_RESPONSE_ERROR 0x8
-#define CONT_OVERRUN_ERROR 0x4
-#ifdef _HW_VERSION_1
-#define CONT_FRAME_ERROR 0x2
-#define CONT_COLLISION_ERROR 0x1
-#endif
-
-/* Controller type */
-
-#define CONT_ABSOLUTE 0x0001
-#define CONT_RELATIVE 0x0002
-#define CONT_JOYPORT 0x0004
-#define CONT_EEPROM 0x8000
-#define CONT_EEP16K 0x4000
-#define CONT_TYPE_MASK 0x1f07
-#define CONT_TYPE_NORMAL 0x0005
-#define CONT_TYPE_MOUSE 0x0002
-
-/* Controller status */
-
-#define CONT_CARD_ON 0x01
-#define CONT_CARD_PULL 0x02
-#define CONT_ADDR_CRC_ER 0x04
-#define CONT_EEPROM_BUSY 0x80
-
-/* EEPROM TYPE */
-
-#define EEPROM_TYPE_4K 0x01
-#define EEPROM_TYPE_16K 0x02
-
-/* Buttons */
-
-#define CONT_A 0x8000
-#define CONT_B 0x4000
-#define CONT_G 0x2000
-#define CONT_START 0x1000
-#define CONT_UP 0x0800
-#define CONT_DOWN 0x0400
-#define CONT_LEFT 0x0200
-#define CONT_RIGHT 0x0100
-#define CONT_L 0x0020
-#define CONT_R 0x0010
-#define CONT_E 0x0008
-#define CONT_D 0x0004
-#define CONT_C 0x0002
-#define CONT_F 0x0001
-
-/* Nintendo's official button names */
-
-#define A_BUTTON CONT_A
-#define B_BUTTON CONT_B
-#define L_TRIG CONT_L
-#define R_TRIG CONT_R
-#define Z_TRIG CONT_G
-#define START_BUTTON CONT_START
-#define U_JPAD CONT_UP
-#define L_JPAD CONT_LEFT
-#define R_JPAD CONT_RIGHT
-#define D_JPAD CONT_DOWN
-#define U_CBUTTONS CONT_E
-#define L_CBUTTONS CONT_C
-#define R_CBUTTONS CONT_F
-#define D_CBUTTONS CONT_D
-
-/* File System size */
-#define OS_PFS_VERSION 0x0200
-#define OS_PFS_VERSION_HI (OS_PFS_VERSION >> 8)
-#define OS_PFS_VERSION_LO (OS_PFS_VERSION & 255)
-
-#define PFS_FILE_NAME_LEN 16
-#define PFS_FILE_EXT_LEN 4
-#define BLOCKSIZE 32 /* bytes */
-#define PFS_ONE_PAGE 8 /* blocks */
-#define PFS_MAX_BANKS 62
-
-/* File System flag */
-
-#define PFS_READ 0
-#define PFS_WRITE 1
-#define PFS_CREATE 2
-
-/* File System status */
-#define PFS_INITIALIZED 0x1
-#define PFS_CORRUPTED 0x2 /* File system was corrupted */
-
-/* File System error number */
-
-#define PFS_ERR_NOPACK 1 /* no memory card is plugged or */
-#define PFS_ERR_NEW_PACK 2 /* ram pack has been changed to a */
- /* different one */
-#define PFS_ERR_INCONSISTENT 3 /* need to run Pfschecker */
-#define PFS_ERR_CONTRFAIL CONT_OVERRUN_ERROR
-#define PFS_ERR_INVALID 5 /* invalid parameter or file not exist*/
-#define PFS_ERR_BAD_DATA 6 /* the data read from pack are bad*/
-#define PFS_DATA_FULL 7 /* no free pages on ram pack */
-#define PFS_DIR_FULL 8 /* no free directories on ram pack*/
-#define PFS_ERR_EXIST 9 /* file exists */
-#define PFS_ERR_ID_FATAL 10 /* dead ram pack */
-#define PFS_ERR_DEVICE 11 /* wrong device type*/
-
-/* definition for EEPROM */
-
-#define EEPROM_MAXBLOCKS 64
-#define EEP16K_MAXBLOCKS 256
-#define EEPROM_BLOCK_SIZE 8
-
-/*
- * PI/EPI
- */
-#define PI_DOMAIN1 0
-#define PI_DOMAIN2 1
-
-/*
- * Profiler constants
- */
-#define PROF_MIN_INTERVAL 50 /* microseconds */
-
-/*
- * Boot addresses
- */
-#define BOOT_ADDRESS_ULTRA 0x80000400
-#define BOOT_ADDRESS_COSIM 0x80002000
-#define BOOT_ADDRESS_EMU 0x20010000
-#define BOOT_ADDRESS_INDY 0x88100000
-
-/*
- * Size of buffer the retains contents after NMI
- */
-#define OS_APP_NMI_BUFSIZE 64
-
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/**************************************************************************
- *
- * Macro definitions
- *
- */
-
-/* PARTNER-N64 */
-#ifdef PTN64
-#define osReadHost osReadHost_pt
-#define osWriteHost osWriteHost_pt
-#endif
-
-/* Get count of valid messages in queue */
-#define MQ_GET_COUNT(mq) ((mq)->validCount)
-
-/* Figure out if message queue is empty or full */
-#define MQ_IS_EMPTY(mq) (MQ_GET_COUNT(mq) == 0)
-#define MQ_IS_FULL(mq) (MQ_GET_COUNT(mq) >= (mq)->msgCount)
-
-/*
- * CPU counter increments at 3/4 of bus clock rate:
- *
- * Bus Clock Proc Clock Counter (1/2 Proc Clock)
- * --------- ---------- ------------------------
- * 62.5 Mhz 93.75 Mhz 46.875 Mhz
- */
-extern u64 osClockRate;
-
-#define OS_CLOCK_RATE 62500000LL
-#define OS_CPU_COUNTER (OS_CLOCK_RATE*3/4)
-#define OS_NSEC_TO_CYCLES(n) (((u64)(n)*(OS_CPU_COUNTER/15625000LL))/(1000000000LL/15625000LL))
-#define OS_USEC_TO_CYCLES(n) (((u64)(n)*(OS_CPU_COUNTER/15625LL))/(1000000LL/15625LL))
-#define OS_CYCLES_TO_NSEC(c) (((u64)(c)*(1000000000LL/15625000LL))/(OS_CPU_COUNTER/15625000LL))
-#define OS_CYCLES_TO_USEC(c) (((u64)(c)*(1000000LL/15625LL))/(OS_CPU_COUNTER/15625LL))
-
-/**************************************************************************
- *
- * Extern variables
- *
- */
-extern OSViMode osViModeTable[]; /* Global VI mode table */
-
-extern OSViMode osViModeNtscLpn1; /* Individual VI NTSC modes */
-extern OSViMode osViModeNtscLpf1;
-extern OSViMode osViModeNtscLan1;
-extern OSViMode osViModeNtscLaf1;
-extern OSViMode osViModeNtscLpn2;
-extern OSViMode osViModeNtscLpf2;
-extern OSViMode osViModeNtscLan2;
-extern OSViMode osViModeNtscLaf2;
-extern OSViMode osViModeNtscHpn1;
-extern OSViMode osViModeNtscHpf1;
-extern OSViMode osViModeNtscHan1;
-extern OSViMode osViModeNtscHaf1;
-extern OSViMode osViModeNtscHpn2;
-extern OSViMode osViModeNtscHpf2;
-
-extern OSViMode osViModePalLpn1; /* Individual VI PAL modes */
-extern OSViMode osViModePalLpf1;
-extern OSViMode osViModePalLan1;
-extern OSViMode osViModePalLaf1;
-extern OSViMode osViModePalLpn2;
-extern OSViMode osViModePalLpf2;
-extern OSViMode osViModePalLan2;
-extern OSViMode osViModePalLaf2;
-extern OSViMode osViModePalHpn1;
-extern OSViMode osViModePalHpf1;
-extern OSViMode osViModePalHan1;
-extern OSViMode osViModePalHaf1;
-extern OSViMode osViModePalHpn2;
-extern OSViMode osViModePalHpf2;
-
-extern OSViMode osViModeMpalLpn1; /* Individual VI MPAL modes */
-extern OSViMode osViModeMpalLpf1;
-extern OSViMode osViModeMpalLan1;
-extern OSViMode osViModeMpalLaf1;
-extern OSViMode osViModeMpalLpn2;
-extern OSViMode osViModeMpalLpf2;
-extern OSViMode osViModeMpalLan2;
-extern OSViMode osViModeMpalLaf2;
-extern OSViMode osViModeMpalHpn1;
-extern OSViMode osViModeMpalHpf1;
-extern OSViMode osViModeMpalHan1;
-extern OSViMode osViModeMpalHaf1;
-extern OSViMode osViModeMpalHpn2;
-extern OSViMode osViModeMpalHpf2;
-
-extern s32 osRomType; /* Bulk or cartridge ROM. 0=cartridge 1=bulk */
-extern u32 osRomBase; /* Rom base address of the game image */
-extern u32 osTvType; /* 0 = PAL, 1 = NTSC, 2 = MPAL */
-extern u32 osResetType; /* 0 = cold reset, 1 = NMI */
-extern s32 osCicId;
-extern s32 osVersion;
-extern u32 osMemSize; /* Memory Size */
-extern s32 osAppNMIBuffer[];
-
-extern OSIntMask __OSGlobalIntMask; /* global interrupt mask */
-extern OSPiHandle *__osPiTable; /* The head of OSPiHandle link list */
-extern OSPiHandle *__osDiskHandle; /* For exceptasm to get disk info*/
-
-
-
-/**************************************************************************
- *
- * Function prototypes
- *
- */
-
-/* Thread operations */
-
-extern void osCreateThread(OSThread *, OSId, void (*)(void *),
- void *, void *, OSPri);
-extern void osDestroyThread(OSThread *);
-extern void osYieldThread(void);
-extern void osStartThread(OSThread *);
-extern void osStopThread(OSThread *);
-extern OSId osGetThreadId(OSThread *);
-extern void osSetThreadPri(OSThread *, OSPri);
-extern OSPri osGetThreadPri(OSThread *);
-
-/* Message operations */
-
-extern void osCreateMesgQueue(OSMesgQueue *, OSMesg *, s32);
-extern s32 osSendMesg(OSMesgQueue *, OSMesg, s32);
-extern s32 osJamMesg(OSMesgQueue *, OSMesg, s32);
-extern s32 osRecvMesg(OSMesgQueue *, OSMesg *, s32);
-
-/* Event operations */
-
-extern void osSetEventMesg(OSEvent, OSMesgQueue *, OSMesg);
-
-/* Interrupt operations */
-
-extern OSIntMask osGetIntMask(void);
-extern OSIntMask osSetIntMask(OSIntMask);
-
-/* RDB port operations */
-
-extern void osInitRdb(u8 *sendBuf, u32 sendSize);
-
-/* Cache operations and macros */
-
-extern void osInvalDCache(void *, size_t);
-extern void osInvalICache(void *, size_t);
-extern void osWritebackDCache(void *, size_t);
-extern void osWritebackDCacheAll(void);
-
-#define OS_DCACHE_ROUNDUP_ADDR(x) (void *)(((((u32)(x)+0xf)/0x10)*0x10))
-#define OS_DCACHE_ROUNDUP_SIZE(x) (u32)(((((u32)(x)+0xf)/0x10)*0x10))
-
-/* TLB management routines */
-
-extern void osMapTLB(s32, OSPageMask, void *, u32, u32, s32);
-extern void osMapTLBRdb(void);
-extern void osUnmapTLB(s32);
-extern void osUnmapTLBAll(void);
-extern void osSetTLBASID(s32);
-
-/* Address translation routines and macros */
-
-extern u32 osVirtualToPhysical(void *);
-extern void * osPhysicalToVirtual(u32);
-
-#define OS_K0_TO_PHYSICAL(x) (u32)(((char *)(x)-0x80000000))
-#define OS_K1_TO_PHYSICAL(x) (u32)(((char *)(x)-0xa0000000))
-
-#define OS_PHYSICAL_TO_K0(x) (void *)(((u32)(x)+0x80000000))
-#define OS_PHYSICAL_TO_K1(x) (void *)(((u32)(x)+0xa0000000))
-
-/* I/O operations */
-
-/* Audio interface (Ai) */
-extern u32 osAiGetStatus(void);
-extern u32 osAiGetLength(void);
-extern s32 osAiSetFrequency(u32);
-extern s32 osAiSetNextBuffer(void *, u32);
-
-/* Display processor interface (Dp) */
-extern u32 osDpGetStatus(void);
-extern void osDpSetStatus(u32);
-extern void osDpGetCounters(u32 *);
-extern s32 osDpSetNextBuffer(void *, u64);
-
-/* Peripheral interface (Pi) */
-extern u32 osPiGetStatus(void);
-extern s32 osPiGetDeviceType(void);
-extern s32 osPiRawWriteIo(u32, u32);
-extern s32 osPiRawReadIo(u32, u32 *);
-extern s32 osPiRawStartDma(s32, u32, void *, u32);
-extern s32 osPiWriteIo(u32, u32);
-extern s32 osPiReadIo(u32, u32 *);
-extern s32 osPiStartDma(OSIoMesg *, s32, s32, u32, void *, u32,
- OSMesgQueue *);
-extern void osCreatePiManager(OSPri, OSMesgQueue *, OSMesg *, s32);
-
-/* Video interface (Vi) */
-extern u32 osViGetStatus(void);
-extern u32 osViGetCurrentMode(void);
-extern u32 osViGetCurrentLine(void);
-extern u32 osViGetCurrentField(void);
-extern void *osViGetCurrentFramebuffer(void);
-extern void *osViGetNextFramebuffer(void);
-extern void osViSetXScale(f32);
-extern void osViSetYScale(f32);
-extern void osViSetSpecialFeatures(u32);
-extern void osViSetMode(OSViMode *);
-extern void osViSetEvent(OSMesgQueue *, OSMesg, u32);
-extern void osViSwapBuffer(void *);
-extern void osViBlack(u8);
-extern void osViFade(u8, u16);
-extern void osViRepeatLine(u8);
-extern void osCreateViManager(OSPri);
-
-/* Timer interface */
-
-extern OSTime osGetTime(void);
-extern void osSetTime(OSTime);
-extern u32 osSetTimer(OSTimer *, OSTime, OSTime,
- OSMesgQueue *, OSMesg);
-extern int osStopTimer(OSTimer *);
-
-/* Controller interface */
-
-extern s32 osContInit(OSMesgQueue *, u8 *, OSContStatus *);
-extern s32 osContReset(OSMesgQueue *, OSContStatus *);
-extern s32 osContStartQuery(OSMesgQueue *);
-extern s32 osContStartReadData(OSMesgQueue *);
-#ifndef _HW_VERSION_1
-extern s32 osContSetCh(u8);
-#endif
-extern void osContGetQuery(OSContStatus *);
-extern void osContGetReadData(OSContPad *);
-
-/* file system interface */
-
-extern s32 osPfsInitPak(OSMesgQueue *, OSPfs *, int);
-extern s32 osPfsRepairId(OSPfs *);
-extern s32 osPfsInit(OSMesgQueue *, OSPfs *, int);
-extern s32 osPfsReFormat(OSPfs *, OSMesgQueue *, int);
-extern s32 osPfsChecker(OSPfs *);
-extern s32 osPfsAllocateFile(OSPfs *, u16, u32, u8 *, u8 *, int, s32 *);
-extern s32 osPfsFindFile(OSPfs *, u16, u32, u8 *, u8 *, s32 *);
-extern s32 osPfsDeleteFile(OSPfs *, u16, u32, u8 *, u8 *);
-extern s32 osPfsReadWriteFile(OSPfs *, s32, u8, int, int, u8 *);
-extern s32 osPfsFileState(OSPfs *, s32, OSPfsState *);
-extern s32 osPfsGetLabel(OSPfs *, u8 *, int *);
-extern s32 osPfsSetLabel(OSPfs *, u8 *);
-extern s32 osPfsIsPlug(OSMesgQueue *, u8 *);
-extern s32 osPfsFreeBlocks(OSPfs *, s32 *);
-extern s32 osPfsNumFiles(OSPfs *, s32 *, s32 *);
-
-/* EEPROM interface */
-
-extern s32 osEepromProbe(OSMesgQueue *);
-extern s32 osEepromRead(OSMesgQueue *, u8, u8 *);
-extern s32 osEepromWrite(OSMesgQueue *, u8, u8 *);
-extern s32 osEepromLongRead(OSMesgQueue *, u8, u8 *, s32);
-extern s32 osEepromLongWrite(OSMesgQueue *, u8, u8 *, s32);
-
-/* MOTOR interface */
-
-extern s32 osMotorInit(OSMesgQueue *, OSPfs *, int);
-extern s32 osMotorStop(OSPfs *);
-extern s32 osMotorStart(OSPfs *);
-
-/* Enhanced PI interface */
-
-extern OSPiHandle *osCartRomInit(void);
-extern OSPiHandle *osLeoDiskInit(void);
-extern OSPiHandle *osDriveRomInit(void);
-
-extern s32 osEPiDeviceType(OSPiHandle *, OSPiInfo *);
-extern s32 osEPiRawWriteIo(OSPiHandle *, u32 , u32);
-extern s32 osEPiRawReadIo(OSPiHandle *, u32 , u32 *);
-extern s32 osEPiRawStartDma(OSPiHandle *, s32 , u32 , void *, u32 );
-extern s32 osEPiWriteIo(OSPiHandle *, u32 , u32 );
-extern s32 osEPiReadIo(OSPiHandle *, u32 , u32 *);
-extern s32 osEPiStartDma(OSPiHandle *, OSIoMesg *, s32);
-extern s32 osEPiLinkHandle(OSPiHandle *);
-
-/* Profiler Interface */
-
-extern void osProfileInit(OSProf *, u32 profcnt);
-extern void osProfileStart(u32);
-extern void osProfileFlush(void);
-extern void osProfileStop(void);
-
-/* Game <> Host data transfer functions */
-
-extern s32 osTestHost(void);
-extern void osReadHost(void *, u32);
-extern void osWriteHost(void *, u32);
-extern void osAckRamromRead(void);
-extern void osAckRamromWrite(void);
-
-
-/* byte string operations */
-
-extern void bcopy(const void *, void *, size_t);
-extern int bcmp(const void *, const void *, int);
-extern void bzero(void *, size_t);
-
-/* Miscellaneous operations */
-
-extern void osInitialize(void);
-extern u32 osGetCount(void);
-extern void osExit(void);
-extern u32 osGetMemSize(void);
-
-/* Printf */
-
-extern int sprintf(char *s, const char *fmt, ...);
-extern void osSyncPrintf(const char *fmt, ...);
-extern void osAsyncPrintf(const char *fmt, ...);
-extern int osSyncGetChars(char *buf);
-extern int osAsyncGetChars(char *buf);
-
-#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-}
-#endif
-
-#endif /* !_OS_H */
diff --git a/include/PR/os_ai.h b/include/PR/os_ai.h
deleted file mode 100644
index f89d87cfe..000000000
--- a/include/PR/os_ai.h
+++ /dev/null
@@ -1,92 +0,0 @@
-
-/*====================================================================
- * os_ai.h
- *
- * Copyright 1995, Silicon Graphics, Inc.
- * All Rights Reserved.
- *
- * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics,
- * Inc.; the contents of this file may not be disclosed to third
- * parties, copied or duplicated in any form, in whole or in part,
- * without the prior written permission of Silicon Graphics, Inc.
- *
- * RESTRICTED RIGHTS LEGEND:
- * Use, duplication or disclosure by the Government is subject to
- * restrictions as set forth in subdivision (c)(1)(ii) of the Rights
- * in Technical Data and Computer Software clause at DFARS
- * 252.227-7013, and/or in similar or successor clauses in the FAR,
- * DOD or NASA FAR Supplement. Unpublished - rights reserved under the
- * Copyright Laws of the United States.
- *====================================================================*/
-
-/*---------------------------------------------------------------------*
- Copyright (C) 1998 Nintendo. (Originated by SGI)
-
- $RCSfile: os_ai.h,v $
- $Revision: 1.1 $
- $Date: 1998/10/09 08:01:04 $
- *---------------------------------------------------------------------*/
-
-#ifndef _OS_AI_H_
-#define _OS_AI_H_
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-extern "C" {
-#endif
-
-#include <PR/ultratypes.h>
-
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/**************************************************************************
- *
- * Type definitions
- *
- */
-
-
-#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
-
-/**************************************************************************
- *
- * Global definitions
- *
- */
-
-
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/**************************************************************************
- *
- * Macro definitions
- *
- */
-
-
-/**************************************************************************
- *
- * Extern variables
- *
- */
-
-
-/**************************************************************************
- *
- * Function prototypes
- *
- */
-
-/* Audio interface (Ai) */
-extern u32 osAiGetStatus(void);
-extern u32 osAiGetLength(void);
-extern s32 osAiSetFrequency(u32);
-extern s32 osAiSetNextBuffer(void *, u32);
-
-
-#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-}
-#endif
-
-#endif /* !_OS_AI_H_ */
diff --git a/include/PR/os_cache.h b/include/PR/os_cache.h
deleted file mode 100644
index 93d53c5f1..000000000
--- a/include/PR/os_cache.h
+++ /dev/null
@@ -1,96 +0,0 @@
-
-/*====================================================================
- * os_cache.h
- *
- * Copyright 1995, Silicon Graphics, Inc.
- * All Rights Reserved.
- *
- * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics,
- * Inc.; the contents of this file may not be disclosed to third
- * parties, copied or duplicated in any form, in whole or in part,
- * without the prior written permission of Silicon Graphics, Inc.
- *
- * RESTRICTED RIGHTS LEGEND:
- * Use, duplication or disclosure by the Government is subject to
- * restrictions as set forth in subdivision (c)(1)(ii) of the Rights
- * in Technical Data and Computer Software clause at DFARS
- * 252.227-7013, and/or in similar or successor clauses in the FAR,
- * DOD or NASA FAR Supplement. Unpublished - rights reserved under the
- * Copyright Laws of the United States.
- *====================================================================*/
-
-/*---------------------------------------------------------------------*
- Copyright (C) 1998 Nintendo. (Originated by SGI)
-
- $RCSfile: os_cache.h,v $
- $Revision: 1.1 $
- $Date: 1998/10/09 08:01:04 $
- *---------------------------------------------------------------------*/
-
-#ifndef _OS_CACHE_H_
-#define _OS_CACHE_H_
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-extern "C" {
-#endif
-
-#include <PR/ultratypes.h>
-
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/**************************************************************************
- *
- * Type definitions
- *
- */
-
-
-#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
-
-/**************************************************************************
- *
- * Global definitions
- *
- */
-
-
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/**************************************************************************
- *
- * Macro definitions
- *
- */
-
-#define OS_DCACHE_ROUNDUP_ADDR(x) (void *)(((((u32)(x)+0xf)/0x10)*0x10))
-#define OS_DCACHE_ROUNDUP_SIZE(x) (u32)(((((u32)(x)+0xf)/0x10)*0x10))
-
-
-/**************************************************************************
- *
- * Extern variables
- *
- */
-
-
-/**************************************************************************
- *
- * Function prototypes
- *
- */
-
-/* Cache operations and macros */
-
-extern void osInvalDCache(void *, size_t);
-extern void osInvalICache(void *, size_t);
-extern void osWritebackDCache(void *, size_t);
-extern void osWritebackDCacheAll(void);
-
-
-#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-}
-#endif
-
-#endif /* !_OS_CACHE_H_ */
diff --git a/include/PR/os_cont.h b/include/PR/os_cont.h
deleted file mode 100644
index 2b989a5ab..000000000
--- a/include/PR/os_cont.h
+++ /dev/null
@@ -1,207 +0,0 @@
-
-/*====================================================================
- * os_cont.h
- *
- * Copyright 1995, Silicon Graphics, Inc.
- * All Rights Reserved.
- *
- * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics,
- * Inc.; the contents of this file may not be disclosed to third
- * parties, copied or duplicated in any form, in whole or in part,
- * without the prior written permission of Silicon Graphics, Inc.
- *
- * RESTRICTED RIGHTS LEGEND:
- * Use, duplication or disclosure by the Government is subject to
- * restrictions as set forth in subdivision (c)(1)(ii) of the Rights
- * in Technical Data and Computer Software clause at DFARS
- * 252.227-7013, and/or in similar or successor clauses in the FAR,
- * DOD or NASA FAR Supplement. Unpublished - rights reserved under the
- * Copyright Laws of the United States.
- *====================================================================*/
-
-/*---------------------------------------------------------------------*
- Copyright (C) 1998 Nintendo. (Originated by SGI)
-
- $RCSfile: os_cont.h,v $
- $Revision: 1.1 $
- $Date: 1998/10/09 08:01:05 $
- *---------------------------------------------------------------------*/
-
-#ifndef _OS_CONT_H_
-#define _OS_CONT_H_
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-extern "C" {
-#endif
-
-#include <PR/ultratypes.h>
-#include "os_message.h"
-
-
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/**************************************************************************
- *
- * Type definitions
- *
- */
-
-/*
- * Structure for controllers
- */
-
-typedef struct {
- u16 type; /* Controller Type */
- u8 status; /* Controller status */
- u8 errnum;
-}OSContStatus;
-
-typedef struct {
- u16 button;
- s8 stick_x; /* -80 <= stick_x <= 80 */
- s8 stick_y; /* -80 <= stick_y <= 80 */
- u8 errno;
-} OSContPad;
-
-typedef struct {
- void *address; /* Ram pad Address: 11 bits */
- u8 databuffer[32]; /* address of the data buffer */
- u8 addressCrc; /* CRC code for address */
- u8 dataCrc; /* CRC code for data */
- u8 errno;
-} OSContRamIo;
-
-
-#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
-
-/**************************************************************************
- *
- * Global definitions
- *
- */
-
-/*
- * Controllers number
- */
-
-#ifndef _HW_VERSION_1
-#define MAXCONTROLLERS 4
-#else
-#define MAXCONTROLLERS 6
-#endif
-
-/* controller errors */
-#define CONT_NO_RESPONSE_ERROR 0x8
-#define CONT_OVERRUN_ERROR 0x4
-#ifdef _HW_VERSION_1
-#define CONT_FRAME_ERROR 0x2
-#define CONT_COLLISION_ERROR 0x1
-#endif
-
-/* Controller type */
-
-#define CONT_ABSOLUTE 0x0001
-#define CONT_RELATIVE 0x0002
-#define CONT_JOYPORT 0x0004
-#define CONT_EEPROM 0x8000
-#define CONT_EEP16K 0x4000
-#define CONT_TYPE_MASK 0x1f07
-#define CONT_TYPE_NORMAL 0x0005
-#define CONT_TYPE_MOUSE 0x0002
-#define CONT_TYPE_VOICE 0x0100
-
-/* Controller status */
-
-#define CONT_CARD_ON 0x01
-#define CONT_CARD_PULL 0x02
-#define CONT_ADDR_CRC_ER 0x04
-#define CONT_EEPROM_BUSY 0x80
-
-/* Buttons */
-
-#define CONT_A 0x8000
-#define CONT_B 0x4000
-#define CONT_G 0x2000
-#define CONT_START 0x1000
-#define CONT_UP 0x0800
-#define CONT_DOWN 0x0400
-#define CONT_LEFT 0x0200
-#define CONT_RIGHT 0x0100
-#define CONT_L 0x0020
-#define CONT_R 0x0010
-#define CONT_E 0x0008
-#define CONT_D 0x0004
-#define CONT_C 0x0002
-#define CONT_F 0x0001
-
-/* Nintendo's official button names */
-
-#define A_BUTTON CONT_A
-#define B_BUTTON CONT_B
-#define L_TRIG CONT_L
-#define R_TRIG CONT_R
-#define Z_TRIG CONT_G
-#define START_BUTTON CONT_START
-#define U_JPAD CONT_UP
-#define L_JPAD CONT_LEFT
-#define R_JPAD CONT_RIGHT
-#define D_JPAD CONT_DOWN
-#define U_CBUTTONS CONT_E
-#define L_CBUTTONS CONT_C
-#define R_CBUTTONS CONT_F
-#define D_CBUTTONS CONT_D
-
-/* Controller error number */
-
-#define CONT_ERR_NO_CONTROLLER PFS_ERR_NOPACK /* 1 */
-#define CONT_ERR_CONTRFAIL CONT_OVERRUN_ERROR /* 4 */
-#define CONT_ERR_INVALID PFS_ERR_INVALID /* 5 */
-#define CONT_ERR_DEVICE PFS_ERR_DEVICE /* 11 */
-#define CONT_ERR_NOT_READY 12
-#define CONT_ERR_VOICE_MEMORY 13
-#define CONT_ERR_VOICE_WORD 14
-#define CONT_ERR_VOICE_NO_RESPONSE 15
-
-
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/**************************************************************************
- *
- * Macro definitions
- *
- */
-
-
-/**************************************************************************
- *
- * Extern variables
- *
- */
-
-
-/**************************************************************************
- *
- * Function prototypes
- *
- */
-
-/* Controller interface */
-
-extern s32 osContInit(OSMesgQueue *, u8 *, OSContStatus *);
-extern s32 osContReset(OSMesgQueue *, OSContStatus *);
-extern s32 osContStartQuery(OSMesgQueue *);
-extern s32 osContStartReadData(OSMesgQueue *);
-#ifndef _HW_VERSION_1
-extern s32 osContSetCh(u8);
-#endif
-extern void osContGetQuery(OSContStatus *);
-extern void osContGetReadData(OSContPad *);
-
-
-#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-}
-#endif
-
-#endif /* !_OS_CONT_H_ */
diff --git a/include/PR/os_eeprom.h b/include/PR/os_eeprom.h
deleted file mode 100644
index b3bca8144..000000000
--- a/include/PR/os_eeprom.h
+++ /dev/null
@@ -1,107 +0,0 @@
-
-/*====================================================================
- * os_eeprom.h
- *
- * Copyright 1995, Silicon Graphics, Inc.
- * All Rights Reserved.
- *
- * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics,
- * Inc.; the contents of this file may not be disclosed to third
- * parties, copied or duplicated in any form, in whole or in part,
- * without the prior written permission of Silicon Graphics, Inc.
- *
- * RESTRICTED RIGHTS LEGEND:
- * Use, duplication or disclosure by the Government is subject to
- * restrictions as set forth in subdivision (c)(1)(ii) of the Rights
- * in Technical Data and Computer Software clause at DFARS
- * 252.227-7013, and/or in similar or successor clauses in the FAR,
- * DOD or NASA FAR Supplement. Unpublished - rights reserved under the
- * Copyright Laws of the United States.
- *====================================================================*/
-
-/*---------------------------------------------------------------------*
- Copyright (C) 1998 Nintendo. (Originated by SGI)
-
- $RCSfile: os_eeprom.h,v $
- $Revision: 1.1 $
- $Date: 1998/10/09 08:01:06 $
- *---------------------------------------------------------------------*/
-
-#ifndef _OS_EEPROM_H_
-#define _OS_EEPROM_H_
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-extern "C" {
-#endif
-
-#include <PR/ultratypes.h>
-#include "os_message.h"
-
-
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/**************************************************************************
- *
- * Type definitions
- *
- */
-
-
-#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
-
-/**************************************************************************
- *
- * Global definitions
- *
- */
-
-/* EEPROM TYPE */
-
-#define EEPROM_TYPE_4K 0x01
-#define EEPROM_TYPE_16K 0x02
-
-/* definition for EEPROM */
-
-#define EEPROM_MAXBLOCKS 64
-#define EEP16K_MAXBLOCKS 256
-#define EEPROM_BLOCK_SIZE 8
-
-
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/**************************************************************************
- *
- * Macro definitions
- *
- */
-
-
-/**************************************************************************
- *
- * Extern variables
- *
- */
-
-
-/**************************************************************************
- *
- * Function prototypes
- *
- */
-
-/* EEPROM interface */
-
-extern s32 osEepromProbe(OSMesgQueue *);
-extern s32 osEepromRead(OSMesgQueue *, u8, u8 *);
-extern s32 osEepromWrite(OSMesgQueue *, u8, u8 *);
-extern s32 osEepromLongRead(OSMesgQueue *, u8, u8 *, int);
-extern s32 osEepromLongWrite(OSMesgQueue *, u8, u8 *, int);
-
-
-#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-}
-#endif
-
-#endif /* !_OS_EEPROM_H_ */
diff --git a/include/PR/os_exception.h b/include/PR/os_exception.h
deleted file mode 100644
index 245e5e697..000000000
--- a/include/PR/os_exception.h
+++ /dev/null
@@ -1,119 +0,0 @@
-
-/*====================================================================
- * os_exception.h
- *
- * Copyright 1995, Silicon Graphics, Inc.
- * All Rights Reserved.
- *
- * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics,
- * Inc.; the contents of this file may not be disclosed to third
- * parties, copied or duplicated in any form, in whole or in part,
- * without the prior written permission of Silicon Graphics, Inc.
- *
- * RESTRICTED RIGHTS LEGEND:
- * Use, duplication or disclosure by the Government is subject to
- * restrictions as set forth in subdivision (c)(1)(ii) of the Rights
- * in Technical Data and Computer Software clause at DFARS
- * 252.227-7013, and/or in similar or successor clauses in the FAR,
- * DOD or NASA FAR Supplement. Unpublished - rights reserved under the
- * Copyright Laws of the United States.
- *====================================================================*/
-
-/*---------------------------------------------------------------------*
- Copyright (C) 1998 Nintendo. (Originated by SGI)
-
- $RCSfile: os_exception.h,v $
- $Revision: 1.1 $
- $Date: 1998/10/09 08:01:07 $
- *---------------------------------------------------------------------*/
-
-#ifndef _OS_EXCEPTION_H_
-#define _OS_EXCEPTION_H_
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-extern "C" {
-#endif
-
-#include <PR/ultratypes.h>
-
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/**************************************************************************
- *
- * Type definitions
- *
- */
-
-typedef u32 OSIntMask;
-typedef u32 OSHWIntr;
-
-#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
-
-/**************************************************************************
- *
- * Global definitions
- *
- */
-
-/* Flags for debugging purpose */
-
-#define OS_FLAG_CPU_BREAK 1 /* Break exception has occurred */
-#define OS_FLAG_FAULT 2 /* CPU fault has occurred */
-
-/* Interrupt masks */
-
-#define OS_IM_NONE 0x00000001
-#define OS_IM_SW1 0x00000501
-#define OS_IM_SW2 0x00000601
-#define OS_IM_CART 0x00000c01
-#define OS_IM_PRENMI 0x00001401
-#define OS_IM_RDBWRITE 0x00002401
-#define OS_IM_RDBREAD 0x00004401
-#define OS_IM_COUNTER 0x00008401
-#define OS_IM_CPU 0x0000ff01
-#define OS_IM_SP 0x00010401
-#define OS_IM_SI 0x00020401
-#define OS_IM_AI 0x00040401
-#define OS_IM_VI 0x00080401
-#define OS_IM_PI 0x00100401
-#define OS_IM_DP 0x00200401
-#define OS_IM_ALL 0x003fff01
-#define RCP_IMASK 0x003f0000
-#define RCP_IMASKSHIFT 16
-
-
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/**************************************************************************
- *
- * Macro definitions
- *
- */
-
-
-/**************************************************************************
- *
- * Extern variables
- *
- */
-
-
-/**************************************************************************
- *
- * Function prototypes
- *
- */
-
-/* Interrupt operations */
-
-extern OSIntMask osGetIntMask(void);
-extern OSIntMask osSetIntMask(OSIntMask);
-
-
-#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-}
-#endif
-
-#endif /* !_OS_EXCEPTION_H_ */
diff --git a/include/PR/os_internal.h b/include/PR/os_internal.h
deleted file mode 100644
index a18e03674..000000000
--- a/include/PR/os_internal.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef _ULTRA64_OS_INTERNAL_H_
-#define _ULTRA64_OS_INTERNAL_H_
-
-/* Internal functions used by the operating system */
-/* Do not include this header in application code */
-
-/* Variables */
-
-//extern u64 osClockRate;
-
-/* Functions */
-
-/*u32 __osProbeTLB(void *);
-u32 __osDisableInt(void);
-void __osRestoreInt(u32);*/
-OSThread *__osGetCurrFaultedThread(void);
-
-#endif
diff --git a/include/PR/os_libc.h b/include/PR/os_libc.h
deleted file mode 100644
index 94111c0b6..000000000
--- a/include/PR/os_libc.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef _OS_LIBC_H_
-#define _OS_LIBC_H_
-
-#include "ultratypes.h"
-
-// Old deprecated functions from strings.h, replaced by memcpy/memset.
-extern void bcopy(const void *, void *, size_t);
-extern void bzero(void *, size_t);
-
-#endif /* !_OS_LIBC_H_ */
diff --git a/include/PR/os_message.h b/include/PR/os_message.h
deleted file mode 100644
index 71e769866..000000000
--- a/include/PR/os_message.h
+++ /dev/null
@@ -1,164 +0,0 @@
-
-/*====================================================================
- * os_message.h
- *
- * Copyright 1995, Silicon Graphics, Inc.
- * All Rights Reserved.
- *
- * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics,
- * Inc.; the contents of this file may not be disclosed to third
- * parties, copied or duplicated in any form, in whole or in part,
- * without the prior written permission of Silicon Graphics, Inc.
- *
- * RESTRICTED RIGHTS LEGEND:
- * Use, duplication or disclosure by the Government is subject to
- * restrictions as set forth in subdivision (c)(1)(ii) of the Rights
- * in Technical Data and Computer Software clause at DFARS
- * 252.227-7013, and/or in similar or successor clauses in the FAR,
- * DOD or NASA FAR Supplement. Unpublished - rights reserved under the
- * Copyright Laws of the United States.
- *====================================================================*/
-
-/*---------------------------------------------------------------------*
- Copyright (C) 1998 Nintendo. (Originated by SGI)
-
- $RCSfile: os_message.h,v $
- $Revision: 1.1 $
- $Date: 1998/10/09 08:01:15 $
- *---------------------------------------------------------------------*/
-
-#ifndef _OS_MESSAGE_H_
-#define _OS_MESSAGE_H_
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-extern "C" {
-#endif
-
-#include <PR/ultratypes.h>
-#include <PR/os_thread.h>
-
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/**************************************************************************
- *
- * Type definitions
- *
- */
-
-typedef u32 OSEvent;
-
-/*
- * Structure for message
- */
-typedef void * OSMesg;
-
-/*
- * Structure for message queue
- */
-typedef struct OSMesgQueue_s {
- OSThread *mtqueue; /* Queue to store threads blocked
- on empty mailboxes (receive) */
- OSThread *fullqueue; /* Queue to store threads blocked
- on full mailboxes (send) */
- s32 validCount; /* Contains number of valid message */
- s32 first; /* Points to first valid message */
- s32 msgCount; /* Contains total # of messages */
- OSMesg *msg; /* Points to message buffer array */
-} OSMesgQueue;
-
-
-#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
-
-/**************************************************************************
- *
- * Global definitions
- *
- */
-
-/* Events */
-#ifdef _FINALROM
-#define OS_NUM_EVENTS 15
-#else
-#define OS_NUM_EVENTS 23
-#endif
-
-#define OS_EVENT_SW1 0 /* CPU SW1 interrupt */
-#define OS_EVENT_SW2 1 /* CPU SW2 interrupt */
-#define OS_EVENT_CART 2 /* Cartridge interrupt: used by rmon */
-#define OS_EVENT_COUNTER 3 /* Counter int: used by VI/Timer Mgr */
-#define OS_EVENT_SP 4 /* SP task done interrupt */
-#define OS_EVENT_SI 5 /* SI (controller) interrupt */
-#define OS_EVENT_AI 6 /* AI interrupt */
-#define OS_EVENT_VI 7 /* VI interrupt: used by VI/Timer Mgr */
-#define OS_EVENT_PI 8 /* PI interrupt: used by PI Manager */
-#define OS_EVENT_DP 9 /* DP full sync interrupt */
-#define OS_EVENT_CPU_BREAK 10 /* CPU breakpoint: used by rmon */
-#define OS_EVENT_SP_BREAK 11 /* SP breakpoint: used by rmon */
-#define OS_EVENT_FAULT 12 /* CPU fault event: used by rmon */
-#define OS_EVENT_THREADSTATUS 13 /* CPU thread status: used by rmon */
-#define OS_EVENT_PRENMI 14 /* Pre NMI interrupt */
-#ifndef _FINALROM
-#define OS_EVENT_RDB_READ_DONE 15 /* RDB read ok event: used by rmon */
-#define OS_EVENT_RDB_LOG_DONE 16 /* read of log data complete */
-#define OS_EVENT_RDB_DATA_DONE 17 /* read of hostio data complete */
-#define OS_EVENT_RDB_REQ_RAMROM 18 /* host needs ramrom access */
-#define OS_EVENT_RDB_FREE_RAMROM 19 /* host is done with ramrom access */
-#define OS_EVENT_RDB_DBG_DONE 20
-#define OS_EVENT_RDB_FLUSH_PROF 21
-#define OS_EVENT_RDB_ACK_PROF 22
-#endif
-
-/* Flags to turn blocking on/off when sending/receiving message */
-
-#define OS_MESG_NOBLOCK 0
-#define OS_MESG_BLOCK 1
-
-
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/**************************************************************************
- *
- * Macro definitions
- *
- */
-
-/* Get count of valid messages in queue */
-#define MQ_GET_COUNT(mq) ((mq)->validCount)
-
-/* Figure out if message queue is empty or full */
-#define MQ_IS_EMPTY(mq) (MQ_GET_COUNT(mq) == 0)
-#define MQ_IS_FULL(mq) (MQ_GET_COUNT(mq) >= (mq)->msgCount)
-
-
-/**************************************************************************
- *
- * Extern variables
- *
- */
-
-
-/**************************************************************************
- *
- * Function prototypes
- *
- */
-
-/* Message operations */
-
-extern void osCreateMesgQueue(OSMesgQueue *, OSMesg *, s32);
-extern s32 osSendMesg(OSMesgQueue *, OSMesg, s32);
-extern s32 osJamMesg(OSMesgQueue *, OSMesg, s32);
-extern s32 osRecvMesg(OSMesgQueue *, OSMesg *, s32);
-
-/* Event operations */
-
-extern void osSetEventMesg(OSEvent, OSMesgQueue *, OSMesg);
-
-
-#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-}
-#endif
-
-#endif /* !_OS_MESSAGE_H_ */
diff --git a/include/PR/os_misc.h b/include/PR/os_misc.h
deleted file mode 100644
index 71e111f13..000000000
--- a/include/PR/os_misc.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef _ULTRA64_OS_MISC_H_
-#define _ULTRA64_OS_MISC_H_
-#include <PR/ultratypes.h>
-/* Miscellaneous OS functions */
-
-void osInitialize(void);
-u32 osGetCount(void);
-
-uintptr_t osVirtualToPhysical(void *);
-
-#endif
diff --git a/include/PR/os_pi.h b/include/PR/os_pi.h
deleted file mode 100644
index 4bdf45f53..000000000
--- a/include/PR/os_pi.h
+++ /dev/null
@@ -1,80 +0,0 @@
-#ifndef _ULTRA64_PI_H_
-#define _ULTRA64_PI_H_
-
-/* Ultra64 Parallel Interface */
-
-/* Types */
-
-typedef struct {
- void *dramAddr;
- void *C2Addr;
- u32 sectorSize;
- u32 C1ErrNum;
- u32 C1ErrSector[4];
-} __OSBlockInfo;
-
-typedef struct {
- u32 cmdType; // 0
- u16 transferMode; // 4
- u16 blockNum; // 6
- s32 sectorNum; // 8
- uintptr_t devAddr; // c
- u32 errStatus; //error status added moved to blockinfo
- u32 bmCtlShadow; // 10
- u32 seqCtlShadow; // 14
- __OSBlockInfo block[2]; // 18
-} __OSTranxInfo;
-
-typedef struct OSPiHandle_s {
- struct OSPiHandle_s *next;
- u8 type;
- u8 latency;
- u8 pageSize;
- u8 relDuration;
- u8 pulse;
- u8 domain;
- u32 baseAddress;
- u32 speed;
- __OSTranxInfo transferInfo;
-} OSPiHandle;
-
-typedef struct {
- u8 type;
- uintptr_t address;
-} OSPiInfo;
-
-typedef struct {
- u16 type;
- u8 pri;
- u8 status;
- OSMesgQueue *retQueue;
-} OSIoMesgHdr;
-
-typedef struct {
- /*0x00*/ OSIoMesgHdr hdr;
- /*0x08*/ void *dramAddr;
- /*0x0C*/ uintptr_t devAddr;
- /*0x10*/ size_t size;
- OSPiHandle *piHandle; // from the official definition
-} OSIoMesg;
-
-/* Definitions */
-
-#define OS_READ 0 // device -> RDRAM
-#define OS_WRITE 1 // device <- RDRAM
-
-#define OS_MESG_PRI_NORMAL 0
-#define OS_MESG_PRI_HIGH 1
-
-/* Functions */
-
-s32 osPiStartDma(OSIoMesg *mb, s32 priority, s32 direction, uintptr_t devAddr, void *vAddr,
- size_t nbytes, OSMesgQueue *mq);
-void osCreatePiManager(OSPri pri, OSMesgQueue *cmdQ, OSMesg *cmdBuf, s32 cmdMsgCnt);
-OSMesgQueue *osPiGetCmdQueue(void);
-s32 osPiWriteIo(uintptr_t devAddr, u32 data);
-s32 osPiReadIo(uintptr_t devAddr, u32 *data);
-
-s32 osPiRawStartDma(s32 dir, u32 cart_addr, void *dram_addr, size_t size);
-s32 osEPiRawStartDma(OSPiHandle *piHandle, s32 dir, u32 cart_addr, void *dram_addr, size_t size);
-#endif
diff --git a/include/PR/os_rdp.h b/include/PR/os_rdp.h
deleted file mode 100644
index 6b3d288ce..000000000
--- a/include/PR/os_rdp.h
+++ /dev/null
@@ -1,92 +0,0 @@
-
-/*====================================================================
- * os_rdp.h
- *
- * Copyright 1995, Silicon Graphics, Inc.
- * All Rights Reserved.
- *
- * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics,
- * Inc.; the contents of this file may not be disclosed to third
- * parties, copied or duplicated in any form, in whole or in part,
- * without the prior written permission of Silicon Graphics, Inc.
- *
- * RESTRICTED RIGHTS LEGEND:
- * Use, duplication or disclosure by the Government is subject to
- * restrictions as set forth in subdivision (c)(1)(ii) of the Rights
- * in Technical Data and Computer Software clause at DFARS
- * 252.227-7013, and/or in similar or successor clauses in the FAR,
- * DOD or NASA FAR Supplement. Unpublished - rights reserved under the
- * Copyright Laws of the United States.
- *====================================================================*/
-
-/*---------------------------------------------------------------------*
- Copyright (C) 1998 Nintendo. (Originated by SGI)
-
- $RCSfile: os_rdp.h,v $
- $Revision: 1.1 $
- $Date: 1998/10/09 08:01:16 $
- *---------------------------------------------------------------------*/
-
-#ifndef _OS_RDP_H_
-#define _OS_RDP_H_
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-extern "C" {
-#endif
-
-#include <PR/ultratypes.h>
-
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/**************************************************************************
- *
- * Type definitions
- *
- */
-
-
-#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
-
-/**************************************************************************
- *
- * Global definitions
- *
- */
-
-
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/**************************************************************************
- *
- * Macro definitions
- *
- */
-
-
-/**************************************************************************
- *
- * Extern variables
- *
- */
-
-
-/**************************************************************************
- *
- * Function prototypes
- *
- */
-
-/* Display processor interface (Dp) */
-extern u32 osDpGetStatus(void);
-extern void osDpSetStatus(u32);
-extern void osDpGetCounters(u32 *);
-extern s32 osDpSetNextBuffer(void *, u64);
-
-
-#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-}
-#endif
-
-#endif /* !_OS_RDP_H_ */
diff --git a/include/PR/os_thread.h b/include/PR/os_thread.h
deleted file mode 100644
index 76e528b50..000000000
--- a/include/PR/os_thread.h
+++ /dev/null
@@ -1,75 +0,0 @@
-#ifndef _ULTRA64_THREAD_H_
-#define _ULTRA64_THREAD_H_
-#include "ultratypes.h"
-/* Recommended priorities for system threads */
-#define OS_PRIORITY_MAX 255
-#define OS_PRIORITY_VIMGR 254
-#define OS_PRIORITY_RMON 250
-#define OS_PRIORITY_RMONSPIN 200
-#define OS_PRIORITY_PIMGR 150
-#define OS_PRIORITY_SIMGR 140
-#define OS_PRIORITY_APPMAX 127
-#define OS_PRIORITY_IDLE 0
-
-#define OS_STATE_STOPPED 1
-#define OS_STATE_RUNNABLE 2
-#define OS_STATE_RUNNING 4
-#define OS_STATE_WAITING 8
-
-/* Types */
-
-typedef s32 OSPri;
-typedef s32 OSId;
-
-typedef union
-{
- struct {f32 f_odd; f32 f_even;} f;
-} __OSfp;
-
-typedef struct
-{
- /* registers */
- /*0x20*/ u64 at, v0, v1, a0, a1, a2, a3;
- /*0x58*/ u64 t0, t1, t2, t3, t4, t5, t6, t7;
- /*0x98*/ u64 s0, s1, s2, s3, s4, s5, s6, s7;
- /*0xD8*/ u64 t8, t9, gp, sp, s8, ra;
- /*0x108*/ u64 lo, hi;
- /*0x118*/ u32 sr, pc, cause, badvaddr, rcp;
- /*0x12C*/ u32 fpcsr;
- __OSfp fp0, fp2, fp4, fp6, fp8, fp10, fp12, fp14;
- __OSfp fp16, fp18, fp20, fp22, fp24, fp26, fp28, fp30;
-} __OSThreadContext;
-
-typedef struct
-{
- u32 flag;
- u32 count;
- u64 time;
-} __OSThreadprofile_s;
-
-typedef struct OSThread_s
-{
- /*0x00*/ struct OSThread_s *next;
- /*0x04*/ OSPri priority;
- /*0x08*/ struct OSThread_s **queue;
- /*0x0C*/ struct OSThread_s *tlnext;
- /*0x10*/ u16 state;
- /*0x12*/ u16 flags;
- /*0x14*/ OSId id;
- /*0x18*/ int fp;
- /*0x1C*/ __OSThreadprofile_s *thprof;
- /*0x20*/ __OSThreadContext context;
-} OSThread;
-
-
-/* Functions */
-
-void osCreateThread(OSThread *thread, OSId id, void (*entry)(void *),
- void *arg, void *sp, OSPri pri);
-OSId osGetThreadId(OSThread *thread);
-OSPri osGetThreadPri(OSThread *thread);
-void osSetThreadPri(OSThread *thread, OSPri pri);
-void osStartThread(OSThread *thread);
-void osStopThread(OSThread *thread);
-
-#endif
diff --git a/include/PR/os_time.h b/include/PR/os_time.h
deleted file mode 100644
index 328e60150..000000000
--- a/include/PR/os_time.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef _ULTRA64_TIME_H_
-#define _ULTRA64_TIME_H_
-
-#include <PR/ultratypes.h>
-#include <PR/os_message.h>
-
-/* Types */
-
-typedef struct OSTimer_str
-{
- struct OSTimer_str *next;
- struct OSTimer_str *prev;
- u64 interval;
- u64 remaining;
- OSMesgQueue *mq;
- OSMesg *msg;
-} OSTimer;
-
-typedef u64 OSTime;
-
-/* Functions */
-
-OSTime osGetTime(void);
-void osSetTime(OSTime time);
-u32 osSetTimer(OSTimer *, OSTime, u64, OSMesgQueue *, OSMesg);
-
-#endif
diff --git a/include/PR/os_tlb.h b/include/PR/os_tlb.h
deleted file mode 100644
index 2cdd5c9c6..000000000
--- a/include/PR/os_tlb.h
+++ /dev/null
@@ -1,107 +0,0 @@
-
-/*====================================================================
- * os_tlb.h
- *
- * Copyright 1995, Silicon Graphics, Inc.
- * All Rights Reserved.
- *
- * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics,
- * Inc.; the contents of this file may not be disclosed to third
- * parties, copied or duplicated in any form, in whole or in part,
- * without the prior written permission of Silicon Graphics, Inc.
- *
- * RESTRICTED RIGHTS LEGEND:
- * Use, duplication or disclosure by the Government is subject to
- * restrictions as set forth in subdivision (c)(1)(ii) of the Rights
- * in Technical Data and Computer Software clause at DFARS
- * 252.227-7013, and/or in similar or successor clauses in the FAR,
- * DOD or NASA FAR Supplement. Unpublished - rights reserved under the
- * Copyright Laws of the United States.
- *====================================================================*/
-
-/*---------------------------------------------------------------------*
- Copyright (C) 1998 Nintendo. (Originated by SGI)
-
- $RCSfile: os_tlb.h,v $
- $Revision: 1.1 $
- $Date: 1998/10/09 08:01:20 $
- *---------------------------------------------------------------------*/
-
-#ifndef _OS_TLB_H_
-#define _OS_TLB_H_
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-extern "C" {
-#endif
-
-#include <PR/ultratypes.h>
-
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/**************************************************************************
- *
- * Type definitions
- *
- */
-
-typedef u32 OSPageMask;
-
-
-#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
-
-/**************************************************************************
- *
- * Global definitions
- *
- */
-
-/*
- * Page size argument for TLB routines
- */
-#define OS_PM_4K 0x0000000
-#define OS_PM_16K 0x0006000
-#define OS_PM_64K 0x001e000
-#define OS_PM_256K 0x007e000
-#define OS_PM_1M 0x01fe000
-#define OS_PM_4M 0x07fe000
-#define OS_PM_16M 0x1ffe000
-
-
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/**************************************************************************
- *
- * Macro definitions
- *
- */
-
-
-/**************************************************************************
- *
- * Extern variables
- *
- */
-
-
-/**************************************************************************
- *
- * Function prototypes
- *
- */
-
-/* TLB management routines */
-
-extern void osMapTLB(s32, OSPageMask, void *, u32, u32, s32);
-extern void osMapTLBRdb(void);
-extern void osUnmapTLB(s32);
-extern void osUnmapTLBAll(void);
-extern void osSetTLBASID(s32);
-
-
-#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-}
-#endif
-
-#endif /* !_OS_TLB_H_ */
diff --git a/include/PR/os_vi.h b/include/PR/os_vi.h
deleted file mode 100644
index 98fb4ed31..000000000
--- a/include/PR/os_vi.h
+++ /dev/null
@@ -1,117 +0,0 @@
-#ifndef _ULTRA64_VI_H_
-#define _ULTRA64_VI_H_
-
-#include <PR/ultratypes.h>
-#include <PR/os_message.h>
-
-/* Ultra64 Video Interface */
-
-
-/* Special Features */
-#define OS_VI_GAMMA_ON 0x0001
-#define OS_VI_GAMMA_OFF 0x0002
-#define OS_VI_GAMMA_DITHER_ON 0x0004
-#define OS_VI_GAMMA_DITHER_OFF 0x0008
-#define OS_VI_DIVOT_ON 0x0010
-#define OS_VI_DIVOT_OFF 0x0020
-#define OS_VI_DITHER_FILTER_ON 0x0040
-#define OS_VI_DITHER_FILTER_OFF 0x0080
-
-#define OS_VI_GAMMA 0x08
-#define OS_VI_GAMMA_DITHER 0x04
-#define OS_VI_DIVOT 0x10
-#define OS_VI_DITHER_FILTER 0x10000
-#define OS_VI_UNK200 0x200
-#define OS_VI_UNK100 0x100
-
-
-/* Types */
-
-typedef struct
-{
- u32 ctrl;
- u32 width;
- u32 burst;
- u32 vSync;
- u32 hSync;
- u32 leap;
- u32 hStart;
- u32 xScale;
- u32 vCurrent;
-} OSViCommonRegs;
-
-typedef struct
-{
- u32 origin;
- u32 yScale;
- u32 vStart;
- u32 vBurst;
- u32 vIntr;
-} OSViFieldRegs;
-
-typedef struct
-{
- u8 type;
- OSViCommonRegs comRegs;
- OSViFieldRegs fldRegs[2];
-} OSViMode;
-
-typedef struct
-{
- /* 0x00 */ u16 unk00; //some kind of flags. swap buffer sets to 0x10
- /* 0x02 */ u16 retraceCount;
- /* 0x04 */ void* buffer;
- /* 0x08 */ OSViMode *modep;
- /* 0x0c */ u32 features;
- /* 0x10 */ OSMesgQueue *mq;
- /* 0x14 */ OSMesg *msg;
- /* 0x18 */ u32 unk18;
- /* 0x1c */ u32 unk1c;
- /* 0x20 */ u32 unk20;
- /* 0x24 */ f32 unk24;
- /* 0x28 */ u16 unk28;
- /* 0x2c */ u32 unk2c;
-} OSViContext;
-
-void osCreateViManager(OSPri pri);
-void osViSetMode(OSViMode *mode);
-void osViSetEvent(OSMesgQueue *mq, OSMesg msg, u32 retraceCount);
-void osViBlack(u8 active);
-void osViSetSpecialFeatures(u32 func);
-void osViSwapBuffer(void *vaddr);
-
-
-#define OS_VI_NTSC_LPN1 0 /* NTSC */
-#define OS_VI_NTSC_LPF1 1
-#define OS_VI_NTSC_LAN1 2
-#define OS_VI_NTSC_LAF1 3
-#define OS_VI_NTSC_LPN2 4
-#define OS_VI_NTSC_LPF2 5
-#define OS_VI_NTSC_LAN2 6
-#define OS_VI_NTSC_LAF2 7
-#define OS_VI_NTSC_HPN1 8
-#define OS_VI_NTSC_HPF1 9
-#define OS_VI_NTSC_HAN1 10
-#define OS_VI_NTSC_HAF1 11
-#define OS_VI_NTSC_HPN2 12
-#define OS_VI_NTSC_HPF2 13
-
-#define OS_VI_PAL_LPN1 14 /* PAL */
-#define OS_VI_PAL_LPF1 15
-#define OS_VI_PAL_LAN1 16
-#define OS_VI_PAL_LAF1 17
-#define OS_VI_PAL_LPN2 18
-#define OS_VI_PAL_LPF2 19
-#define OS_VI_PAL_LAN2 20
-#define OS_VI_PAL_LAF2 21
-#define OS_VI_PAL_HPN1 22
-#define OS_VI_PAL_HPF1 23
-#define OS_VI_PAL_HAN1 24
-#define OS_VI_PAL_HAF1 25
-#define OS_VI_PAL_HPN2 26
-#define OS_VI_PAL_HPF2 27
-
-extern OSViMode osViModeTable[]; /* Global VI mode table */
-
-
-#endif
diff --git a/include/PR/rcp.h b/include/PR/rcp.h
deleted file mode 100644
index 68ce9682d..000000000
--- a/include/PR/rcp.h
+++ /dev/null
@@ -1,881 +0,0 @@
-#ifndef _RCP_H_
-#define _RCP_H_
-
-/**************************************************************************
- * *
- * Copyright (C) 1995, Silicon Graphics, Inc. *
- * *
- * These coded instructions, statements, and computer programs contain *
- * unpublished proprietary information of Silicon Graphics, Inc., and *
- * are protected by Federal copyright law. They may not be disclosed *
- * to third parties or copied or duplicated in any form, in whole or *
- * in part, without the prior written consent of Silicon Graphics, Inc. *
- * *
- **************************************************************************/
-
-/**************************************************************************
- *
- * File: rcp.h
- *
- * This file contains register and bit definitions for RCP memory map.
- * $Revision: 1.20 $
- * $Date: 1997/07/23 08:35:21 $
- * $Source: /disk6/Master/cvsmdev2/PR/include/rcp.h,v $
- *
- **************************************************************************/
-
-#include <PR/R4300.h>
-#include <PR/ultratypes.h>
-
-/**********************************************************************
- *
- * Here is a quick overview of the RCP memory map:
- *
-
-0x0000_0000 .. 0x03ef_ffff RDRAM memory
-0x03f0_0000 .. 0x03ff_ffff RDRAM registers
-
- RCP registers (see below)
-0x0400_0000 .. 0x040f_ffff SP registers
-0x0410_0000 .. 0x041f_ffff DP command registers
-0x0420_0000 .. 0x042f_ffff DP span registers
-0x0430_0000 .. 0x043f_ffff MI registers
-0x0440_0000 .. 0x044f_ffff VI registers
-0x0450_0000 .. 0x045f_ffff AI registers
-0x0460_0000 .. 0x046f_ffff PI registers
-0x0470_0000 .. 0x047f_ffff RI registers
-0x0480_0000 .. 0x048f_ffff SI registers
-0x0490_0000 .. 0x04ff_ffff unused
-
-0x0500_0000 .. 0x05ff_ffff cartridge domain 2
-0x0600_0000 .. 0x07ff_ffff cartridge domain 1
-0x0800_0000 .. 0x0fff_ffff cartridge domain 2
-0x1000_0000 .. 0x1fbf_ffff cartridge domain 1
-
-0x1fc0_0000 .. 0x1fc0_07bf PIF Boot Rom (1984 bytes)
-0x1fc0_07c0 .. 0x1fc0_07ff PIF (JoyChannel) RAM (64 bytes)
-0x1fc0_0800 .. 0x1fcf_ffff Reserved
-0x1fd0_0000 .. 0x7fff_ffff cartridge domain 1
-0x8000_0000 .. 0xffff_ffff external SysAD device
-
-The Indy development board use cartridge domain 1:
-0x1000_0000 .. 0x10ff_ffff RAMROM
-0x1800_0000 .. 0x1800_0003 GIO interrupt (6 bits valid in 4 bytes)
-0x1800_0400 .. 0x1800_0403 GIO sync (6 bits valid in 4 bytes)
-0x1800_0800 .. 0x1800_0803 CART interrupt (6 bits valid in 4 bytes)
-
-
-
-**************************************************************************/
-
-
-/*************************************************************************
- * RDRAM Memory (Assumes that maximum size is 4 MB)
- */
-#define RDRAM_0_START 0x00000000
-#define RDRAM_0_END 0x001FFFFF
-#define RDRAM_1_START 0x00200000
-#define RDRAM_1_END 0x003FFFFF
-
-#define RDRAM_START RDRAM_0_START
-#define RDRAM_END RDRAM_1_END
-
-
-/*************************************************************************
- * Address predicates
- */
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-#define IS_RDRAM(x) ((unsigned)(x) >= RDRAM_START && \
- (unsigned)(x) < RDRAM_END)
-#endif
-
-
-/*************************************************************************
- * RDRAM Registers (0x03f0_0000 .. 0x03ff_ffff)
- */
-#define RDRAM_BASE_REG 0x03F00000
-
-#define RDRAM_CONFIG_REG (RDRAM_BASE_REG+0x00)
-#define RDRAM_DEVICE_TYPE_REG (RDRAM_BASE_REG+0x00)
-#define RDRAM_DEVICE_ID_REG (RDRAM_BASE_REG+0x04)
-#define RDRAM_DELAY_REG (RDRAM_BASE_REG+0x08)
-#define RDRAM_MODE_REG (RDRAM_BASE_REG+0x0c)
-#define RDRAM_REF_INTERVAL_REG (RDRAM_BASE_REG+0x10)
-#define RDRAM_REF_ROW_REG (RDRAM_BASE_REG+0x14)
-#define RDRAM_RAS_INTERVAL_REG (RDRAM_BASE_REG+0x18)
-#define RDRAM_MIN_INTERVAL_REG (RDRAM_BASE_REG+0x1c)
-#define RDRAM_ADDR_SELECT_REG (RDRAM_BASE_REG+0x20)
-#define RDRAM_DEVICE_MANUF_REG (RDRAM_BASE_REG+0x24)
-
-#define RDRAM_0_DEVICE_ID 0
-#define RDRAM_1_DEVICE_ID 1
-
-#define RDRAM_RESET_MODE 0
-#define RDRAM_ACTIVE_MODE 1
-#define RDRAM_STANDBY_MODE 2
-
-#define RDRAM_LENGTH (2*512*2048)
-#define RDRAM_0_BASE_ADDRESS (RDRAM_0_DEVICE_ID*RDRAM_LENGTH)
-#define RDRAM_1_BASE_ADDRESS (RDRAM_1_DEVICE_ID*RDRAM_LENGTH)
-
-#define RDRAM_0_CONFIG 0x00000
-#define RDRAM_1_CONFIG 0x00400
-#define RDRAM_GLOBAL_CONFIG 0x80000
-
-
-/*************************************************************************
- * PIF Physical memory map (total size = 2 KB)
- *
- * Size Description Mode
- * 1FC007FF +-------+-----------------+-----+
- * | 64 B | JoyChannel RAM | R/W |
- * 1FC007C0 +-------+-----------------+-----+
- * |1984 B | Boot ROM | * | * = Reserved
- * 1FC00000 +-------+-----------------+-----+
- *
- */
-#define PIF_ROM_START 0x1FC00000
-#define PIF_ROM_END 0x1FC007BF
-#define PIF_RAM_START 0x1FC007C0
-#define PIF_RAM_END 0x1FC007FF
-
-
-/*************************************************************************
- * Controller channel
- * Each game controller channel has 4 error bits that are defined in bit 6-7 of
- * the Rx and Tx data size area bytes. Programmers need to clear these bits
- * when setting the Tx/Rx size area values for a channel
- */
-#define CHNL_ERR_NORESP 0x80 /* Bit 7 (Rx): No response error */
-#define CHNL_ERR_OVERRUN 0x40 /* Bit 6 (Rx): Overrun error */
-#define CHNL_ERR_FRAME 0x80 /* Bit 7 (Tx): Frame error */
-#define CHNL_ERR_COLLISION 0x40 /* Bit 6 (Tx): Collision error */
-
-#define CHNL_ERR_MASK 0xC0 /* Bit 6-7: channel errors */
-
-
-/*************************************************************************
- * External device info
- */
-#define DEVICE_TYPE_CART 0 /* ROM cartridge */
-#define DEVICE_TYPE_BULK 1 /* ROM bulk */
-#define DEVICE_TYPE_64DD 2 /* 64 Disk Drive */
-#define DEVICE_TYPE_SRAM 3 /* SRAM */
-
-/*************************************************************************
- * SP Memory
- */
-#define SP_DMEM_START 0x04000000 /* read/write */
-#define SP_DMEM_END 0x04000FFF
-#define SP_IMEM_START 0x04001000 /* read/write */
-#define SP_IMEM_END 0x04001FFF
-
-/*************************************************************************
- * SP CP0 Registers
- */
-
-#define SP_BASE_REG 0x04040000
-
-/* SP memory address (R/W): [11:0] DMEM/IMEM address; [12] 0=DMEM,1=IMEM */
-#define SP_MEM_ADDR_REG (SP_BASE_REG+0x00) /* Master */
-
-/* SP DRAM DMA address (R/W): [23:0] RDRAM address */
-#define SP_DRAM_ADDR_REG (SP_BASE_REG+0x04) /* Slave */
-
-/* SP read DMA length (R/W): [11:0] length, [19:12] count, [31:20] skip */
-/* direction: I/DMEM <- RDRAM */
-#define SP_RD_LEN_REG (SP_BASE_REG+0x08) /* R/W: read len */
-
-/* SP write DMA length (R/W): [11:0] length, [19:12] count, [31:20] skip */
-/* direction: I/DMEM -> RDRAM */
-#define SP_WR_LEN_REG (SP_BASE_REG+0x0C) /* R/W: write len */
-
-/* SP status (R/W): [14:0] valid bits; see below for write/read mode */
-#define SP_STATUS_REG (SP_BASE_REG+0x10)
-
-/* SP DMA full (R): [0] valid bit; dma full */
-#define SP_DMA_FULL_REG (SP_BASE_REG+0x14)
-
-/* SP DMA busy (R): [0] valid bit; dma busy */
-#define SP_DMA_BUSY_REG (SP_BASE_REG+0x18)
-
-/* SP semaphore (R/W): Read: [0] semaphore flag (set on read) */
-/* Write: [] clear semaphore flag */
-#define SP_SEMAPHORE_REG (SP_BASE_REG+0x1C)
-
-/* SP PC (R/W): [11:0] program counter */
-#define SP_PC_REG 0x04080000
-
-/* SP MEM address: bit 12 specifies if address is IMEM or DMEM */
-#define SP_DMA_DMEM 0x0000 /* Bit 12: 0=DMEM, 1=IMEM */
-#define SP_DMA_IMEM 0x1000 /* Bit 12: 0=DMEM, 1=IMEM */
-
-/*
- * Values to clear/set bit in status reg (SP_STATUS_REG - write)
- */
-#define SP_CLR_HALT 0x00001 /* Bit 0: clear halt */
-#define SP_SET_HALT 0x00002 /* Bit 1: set halt */
-#define SP_CLR_BROKE 0x00004 /* Bit 2: clear broke */
-#define SP_CLR_INTR 0x00008 /* Bit 3: clear intr */
-#define SP_SET_INTR 0x00010 /* Bit 4: set intr */
-#define SP_CLR_SSTEP 0x00020 /* Bit 5: clear sstep */
-#define SP_SET_SSTEP 0x00040 /* Bit 6: set sstep */
-#define SP_CLR_INTR_BREAK 0x00080 /* Bit 7: clear intr on break */
-#define SP_SET_INTR_BREAK 0x00100 /* Bit 8: set intr on break */
-#define SP_CLR_SIG0 0x00200 /* Bit 9: clear signal 0 */
-#define SP_SET_SIG0 0x00400 /* Bit 10: set signal 0 */
-#define SP_CLR_SIG1 0x00800 /* Bit 11: clear signal 1 */
-#define SP_SET_SIG1 0x01000 /* Bit 12: set signal 1 */
-#define SP_CLR_SIG2 0x02000 /* Bit 13: clear signal 2 */
-#define SP_SET_SIG2 0x04000 /* Bit 14: set signal 2 */
-#define SP_CLR_SIG3 0x08000 /* Bit 15: clear signal 3 */
-#define SP_SET_SIG3 0x10000 /* Bit 16: set signal 3 */
-#define SP_CLR_SIG4 0x20000 /* Bit 17: clear signal 4 */
-#define SP_SET_SIG4 0x40000 /* Bit 18: set signal 4 */
-#define SP_CLR_SIG5 0x80000 /* Bit 19: clear signal 5 */
-#define SP_SET_SIG5 0x100000 /* Bit 20: set signal 5 */
-#define SP_CLR_SIG6 0x200000 /* Bit 21: clear signal 6 */
-#define SP_SET_SIG6 0x400000 /* Bit 22: set signal 6 */
-#define SP_CLR_SIG7 0x800000 /* Bit 23: clear signal 7 */
-#define SP_SET_SIG7 0x1000000 /* Bit 24: set signal 7 */
-
-/*
- * Patterns to interpret status reg (SP_STATUS_REG - read)
- */
-#define SP_STATUS_HALT 0x001 /* Bit 0: halt */
-#define SP_STATUS_BROKE 0x002 /* Bit 1: broke */
-#define SP_STATUS_DMA_BUSY 0x004 /* Bit 2: dma busy */
-#define SP_STATUS_DMA_FULL 0x008 /* Bit 3: dma full */
-#define SP_STATUS_IO_FULL 0x010 /* Bit 4: io full */
-#define SP_STATUS_SSTEP 0x020 /* Bit 5: single step */
-#define SP_STATUS_INTR_BREAK 0x040 /* Bit 6: interrupt on break */
-#define SP_STATUS_SIG0 0x080 /* Bit 7: signal 0 set */
-#define SP_STATUS_SIG1 0x100 /* Bit 8: signal 1 set */
-#define SP_STATUS_SIG2 0x200 /* Bit 9: signal 2 set */
-#define SP_STATUS_SIG3 0x400 /* Bit 10: signal 3 set */
-#define SP_STATUS_SIG4 0x800 /* Bit 11: signal 4 set */
-#define SP_STATUS_SIG5 0x1000 /* Bit 12: signal 5 set */
-#define SP_STATUS_SIG6 0x2000 /* Bit 13: signal 6 set */
-#define SP_STATUS_SIG7 0x4000 /* Bit 14: signal 7 set */
-
-/*
- * Use of SIG bits
- */
-#define SP_CLR_YIELD SP_CLR_SIG0
-#define SP_SET_YIELD SP_SET_SIG0
-#define SP_STATUS_YIELD SP_STATUS_SIG0
-#define SP_CLR_YIELDED SP_CLR_SIG1
-#define SP_SET_YIELDED SP_SET_SIG1
-#define SP_STATUS_YIELDED SP_STATUS_SIG1
-#define SP_CLR_TASKDONE SP_CLR_SIG2
-#define SP_SET_TASKDONE SP_SET_SIG2
-#define SP_STATUS_TASKDONE SP_STATUS_SIG2
-#define SP_CLR_RSPSIGNAL SP_CLR_SIG3
-#define SP_SET_RSPSIGNAL SP_SET_SIG3
-#define SP_STATUS_RSPSIGNAL SP_STATUS_SIG3
-#define SP_CLR_CPUSIGNAL SP_CLR_SIG4
-#define SP_SET_CPUSIGNAL SP_SET_SIG4
-#define SP_STATUS_CPUSIGNAL SP_STATUS_SIG4
-
-/* SP IMEM BIST REG (R/W): [6:0] BIST status bits; see below for detail */
-#define SP_IBIST_REG 0x04080004
-
-/*
- * Patterns to interpret status reg (SP_BIST_REG - write)
- */
-#define SP_IBIST_CHECK 0x01 /* Bit 0: BIST check */
-#define SP_IBIST_GO 0x02 /* Bit 1: BIST go */
-#define SP_IBIST_CLEAR 0x04 /* Bit 2: BIST clear */
-
-/*
- * Patterns to interpret status reg (SP_BIST_REG - read)
- */
-/* First 2 bits are same as in write mode:
- * Bit 0: BIST check; Bit 1: BIST go
- */
-#define SP_IBIST_DONE 0x04 /* Bit 2: BIST done */
-#define SP_IBIST_FAILED 0x78 /* Bit [6:3]: BIST fail */
-
-
-/*************************************************************************
- * DP Command Registers
- */
-#define DPC_BASE_REG 0x04100000
-
-/* DP CMD DMA start (R/W): [23:0] DMEM/RDRAM start address */
-#define DPC_START_REG (DPC_BASE_REG+0x00)
-
-/* DP CMD DMA end (R/W): [23:0] DMEM/RDRAM end address */
-#define DPC_END_REG (DPC_BASE_REG+0x04)
-
-/* DP CMD DMA end (R): [23:0] DMEM/RDRAM current address */
-#define DPC_CURRENT_REG (DPC_BASE_REG+0x08)
-
-/* DP CMD status (R/W): [9:0] valid bits - see below for definitions */
-#define DPC_STATUS_REG (DPC_BASE_REG+0x0C)
-
-/* DP clock counter (R): [23:0] clock counter */
-#define DPC_CLOCK_REG (DPC_BASE_REG+0x10)
-
-/* DP buffer busy counter (R): [23:0] clock counter */
-#define DPC_BUFBUSY_REG (DPC_BASE_REG+0x14)
-
-/* DP pipe busy counter (R): [23:0] clock counter */
-#define DPC_PIPEBUSY_REG (DPC_BASE_REG+0x18)
-
-/* DP TMEM load counter (R): [23:0] clock counter */
-#define DPC_TMEM_REG (DPC_BASE_REG+0x1C)
-
-/*
- * Values to clear/set bit in status reg (DPC_STATUS_REG - write)
- */
-#define DPC_CLR_XBUS_DMEM_DMA 0x0001 /* Bit 0: clear xbus_dmem_dma */
-#define DPC_SET_XBUS_DMEM_DMA 0x0002 /* Bit 1: set xbus_dmem_dma */
-#define DPC_CLR_FREEZE 0x0004 /* Bit 2: clear freeze */
-#define DPC_SET_FREEZE 0x0008 /* Bit 3: set freeze */
-#define DPC_CLR_FLUSH 0x0010 /* Bit 4: clear flush */
-#define DPC_SET_FLUSH 0x0020 /* Bit 5: set flush */
-#define DPC_CLR_TMEM_CTR 0x0040 /* Bit 6: clear tmem ctr */
-#define DPC_CLR_PIPE_CTR 0x0080 /* Bit 7: clear pipe ctr */
-#define DPC_CLR_CMD_CTR 0x0100 /* Bit 8: clear cmd ctr */
-#define DPC_CLR_CLOCK_CTR 0x0200 /* Bit 9: clear clock ctr */
-
-/*
- * Patterns to interpret status reg (DPC_STATUS_REG - read)
- */
-#define DPC_STATUS_XBUS_DMEM_DMA 0x001 /* Bit 0: xbus_dmem_dma */
-#define DPC_STATUS_FREEZE 0x002 /* Bit 1: freeze */
-#define DPC_STATUS_FLUSH 0x004 /* Bit 2: flush */
-/*#define DPC_STATUS_FROZEN 0x008*/ /* Bit 3: frozen */
-#define DPC_STATUS_START_GCLK 0x008 /* Bit 3: start gclk */
-#define DPC_STATUS_TMEM_BUSY 0x010 /* Bit 4: tmem busy */
-#define DPC_STATUS_PIPE_BUSY 0x020 /* Bit 5: pipe busy */
-#define DPC_STATUS_CMD_BUSY 0x040 /* Bit 6: cmd busy */
-#define DPC_STATUS_CBUF_READY 0x080 /* Bit 7: cbuf ready */
-#define DPC_STATUS_DMA_BUSY 0x100 /* Bit 8: dma busy */
-#define DPC_STATUS_END_VALID 0x200 /* Bit 9: end valid */
-#define DPC_STATUS_START_VALID 0x400 /* Bit 10: start valid */
-
-
-/*************************************************************************
- * DP Span Registers
- */
-#define DPS_BASE_REG 0x04200000
-
-/* DP tmem bist (R/W): [10:0] BIST status bits; see below for detail */
-#define DPS_TBIST_REG (DPS_BASE_REG+0x00)
-
-/* DP span test mode (R/W): [0] Span buffer test access enable */
-#define DPS_TEST_MODE_REG (DPS_BASE_REG+0x04)
-
-/* DP span buffer test address (R/W): [6:0] bits; see below for detail */
-#define DPS_BUFTEST_ADDR_REG (DPS_BASE_REG+0x08)
-
-/* DP span buffer test data (R/W): [31:0] span buffer data */
-#define DPS_BUFTEST_DATA_REG (DPS_BASE_REG+0x0C)
-
-/*
- * Patterns to interpret status reg (DPS_TMEM_BIST_REG - write)
- */
-#define DPS_TBIST_CHECK 0x01 /* Bit 0: BIST check */
-#define DPS_TBIST_GO 0x02 /* Bit 1: BIST go */
-#define DPS_TBIST_CLEAR 0x04 /* Bit 2: BIST clear */
-
-/*
- * Patterns to interpret status reg (DPS_TMEM_BIST_REG - read)
- */
-/* First 2 bits are same as in write mode:
- * Bit 0: BIST check; Bit 1: BIST go
- */
-#define DPS_TBIST_DONE 0x004 /* Bit 2: BIST done */
-#define DPS_TBIST_FAILED 0x7F8 /* Bit [10:3]: BIST fail */
-
-
-/*************************************************************************
- * MIPS Interface (MI) Registers
- */
-#define MI_BASE_REG 0x04300000
-
-/*
- * MI init mode (W): [6:0] init length, [7] clear init mode, [8] set init mode
- * [9/10] clear/set ebus test mode, [11] clear DP interrupt
- * (R): [6:0] init length, [7] init mode, [8] ebus test mode
- */
-#define MI_INIT_MODE_REG (MI_BASE_REG+0x00)
-#define MI_MODE_REG MI_INIT_MODE_REG
-
-/*
- * Values to clear/set bit in mode reg (MI_MODE_REG - write)
- */
-#define MI_CLR_INIT 0x0080 /* Bit 7: clear init mode */
-#define MI_SET_INIT 0x0100 /* Bit 8: set init mode */
-#define MI_CLR_EBUS 0x0200 /* Bit 9: clear ebus test */
-#define MI_SET_EBUS 0x0400 /* Bit 10: set ebus test mode */
-#define MI_CLR_DP_INTR 0x0800 /* Bit 11: clear dp interrupt */
-#define MI_CLR_RDRAM 0x1000 /* Bit 12: clear RDRAM reg */
-#define MI_SET_RDRAM 0x2000 /* Bit 13: set RDRAM reg mode */
-
-/*
- * Patterns to interpret mode reg (MI_MODE_REG - read)
- */
-#define MI_MODE_INIT 0x0080 /* Bit 7: init mode */
-#define MI_MODE_EBUS 0x0100 /* Bit 8: ebus test mode */
-#define MI_MODE_RDRAM 0x0200 /* Bit 9: RDRAM reg mode */
-
-/* MI version (R): [7:0] io, [15:8] rac, [23:16] rdp, [31:24] rsp */
-#define MI_VERSION_REG (MI_BASE_REG+0x04)
-#define MI_NOOP_REG MI_VERSION_REG
-
-/* MI interrupt (R): [5:0] valid bits - see below for bit patterns */
-#define MI_INTR_REG (MI_BASE_REG+0x08)
-
-/*
- * MI interrupt mask (W): [11:0] valid bits - see below for bit patterns
- * (R): [5:0] valid bits - see below for bit patterns
- */
-#define MI_INTR_MASK_REG (MI_BASE_REG+0x0C)
-
-/*
- * The following are values to check for interrupt setting (MI_INTR_REG)
- */
-#define MI_INTR_SP 0x01 /* Bit 0: SP intr */
-#define MI_INTR_SI 0x02 /* Bit 1: SI intr */
-#define MI_INTR_AI 0x04 /* Bit 2: AI intr */
-#define MI_INTR_VI 0x08 /* Bit 3: VI intr */
-#define MI_INTR_PI 0x10 /* Bit 4: PI intr */
-#define MI_INTR_DP 0x20 /* Bit 5: DP intr */
-
-/*
- * The following are values to clear/set various interrupt bit mask
- * They can be ORed together to manipulate multiple bits
- * (MI_INTR_MASK_REG - write)
- */
-#define MI_INTR_MASK_CLR_SP 0x0001 /* Bit 0: clear SP mask */
-#define MI_INTR_MASK_SET_SP 0x0002 /* Bit 1: set SP mask */
-#define MI_INTR_MASK_CLR_SI 0x0004 /* Bit 2: clear SI mask */
-#define MI_INTR_MASK_SET_SI 0x0008 /* Bit 3: set SI mask */
-#define MI_INTR_MASK_CLR_AI 0x0010 /* Bit 4: clear AI mask */
-#define MI_INTR_MASK_SET_AI 0x0020 /* Bit 5: set AI mask */
-#define MI_INTR_MASK_CLR_VI 0x0040 /* Bit 6: clear VI mask */
-#define MI_INTR_MASK_SET_VI 0x0080 /* Bit 7: set VI mask */
-#define MI_INTR_MASK_CLR_PI 0x0100 /* Bit 8: clear PI mask */
-#define MI_INTR_MASK_SET_PI 0x0200 /* Bit 9: set PI mask */
-#define MI_INTR_MASK_CLR_DP 0x0400 /* Bit 10: clear DP mask */
-#define MI_INTR_MASK_SET_DP 0x0800 /* Bit 11: set DP mask */
-
-/*
- * The following are values to check for interrupt mask setting
- * (MI_INTR_MASK_REG - read)
- */
-#define MI_INTR_MASK_SP 0x01 /* Bit 0: SP intr mask */
-#define MI_INTR_MASK_SI 0x02 /* Bit 1: SI intr mask */
-#define MI_INTR_MASK_AI 0x04 /* Bit 2: AI intr mask */
-#define MI_INTR_MASK_VI 0x08 /* Bit 3: VI intr mask */
-#define MI_INTR_MASK_PI 0x10 /* Bit 4: PI intr mask */
-#define MI_INTR_MASK_DP 0x20 /* Bit 5: DP intr mask */
-
-
-/*************************************************************************
- * Video Interface (VI) Registers
- */
-#define VI_BASE_REG 0x04400000
-
-/* VI status/control (R/W): [15-0] valid bits:
- * [1:0] = type[1:0] (pixel size)
- * 0: blank (no data, no sync)
- * 1: reserved
- * 2: 5/5/5/3 ("16" bit)
- * 3: 8/8/8/8 (32 bit)
- * [2] = gamma_dither_enable (normally on, unless "special effect")
- * [3] = gamma_enable (normally on, unless MPEG/JPEG)
- * [4] = divot_enable (normally on if antialiased, unless decal lines)
- * [5] = reserved - always off
- * [6] = serrate (always on if interlaced, off if not)
- * [7] = reserved - diagnostics only
- * [9:8] = anti-alias (aa) mode[1:0]
- * 0: aa & resamp (always fetch extra lines)
- * 1: aa & resamp (fetch extra lines if needed)
- * 2: resamp only (treat as all fully covered)
- * 3: neither (replicate pixels, no interpolate)
- * [11] = reserved - diagnostics only
- * [15:12] = reserved
- *
- */
-#define VI_STATUS_REG (VI_BASE_REG+0x00)
-#define VI_CONTROL_REG VI_STATUS_REG
-
-/* VI origin (R/W): [23:0] frame buffer origin in bytes */
-#define VI_ORIGIN_REG (VI_BASE_REG+0x04)
-#define VI_DRAM_ADDR_REG VI_ORIGIN_REG
-
-/* VI width (R/W): [11:0] frame buffer line width in pixels */
-#define VI_WIDTH_REG (VI_BASE_REG+0x08)
-#define VI_H_WIDTH_REG VI_WIDTH_REG
-
-/* VI vertical intr (R/W): [9:0] interrupt when current half-line = V_INTR */
-#define VI_INTR_REG (VI_BASE_REG+0x0C)
-#define VI_V_INTR_REG VI_INTR_REG
-
-/*
- * VI current vertical line (R/W): [9:0] current half line, sampled once per
- * line (the lsb of V_CURRENT is constant within a field, and in
- * interlaced modes gives the field number - which is constant for non-
- * interlaced modes)
- * - Any write to this register will clear interrupt line
- */
-#define VI_CURRENT_REG (VI_BASE_REG+0x10)
-#define VI_V_CURRENT_LINE_REG VI_CURRENT_REG
-
-/*
- * VI video timing (R/W): [ 7: 0] horizontal sync width in pixels,
- * [15: 8] color burst width in pixels,
- * [19:16] vertical sync width in half lines,
- * [29:20] start of color burst in pixels from h-sync
- */
-#define VI_BURST_REG (VI_BASE_REG+0x14)
-#define VI_TIMING_REG VI_BURST_REG
-
-/* VI vertical sync (R/W): [9:0] number of half-lines per field */
-#define VI_V_SYNC_REG (VI_BASE_REG+0x18)
-
-/* VI horizontal sync (R/W): [11: 0] total duration of a line in 1/4 pixel
- * [20:16] a 5-bit leap pattern used for PAL only
- * (h_sync_period)
- */
-#define VI_H_SYNC_REG (VI_BASE_REG+0x1C)
-
-/*
- * VI horizontal sync leap (R/W): [11: 0] identical to h_sync_period
- * [27:16] identical to h_sync_period
- */
-#define VI_LEAP_REG (VI_BASE_REG+0x20)
-#define VI_H_SYNC_LEAP_REG VI_LEAP_REG
-
-/*
- * VI horizontal video (R/W): [ 9: 0] end of active video in screen pixels
- * : [25:16] start of active video in screen pixels
- */
-#define VI_H_START_REG (VI_BASE_REG+0x24)
-#define VI_H_VIDEO_REG VI_H_START_REG
-
-/*
- * VI vertical video (R/W): [ 9: 0] end of active video in screen half-lines
- * : [25:16] start of active video in screen half-lines
- */
-#define VI_V_START_REG (VI_BASE_REG+0x28)
-#define VI_V_VIDEO_REG VI_V_START_REG
-
-/*
- * VI vertical burst (R/W): [ 9: 0] end of color burst enable in half-lines
- * : [25:16] start of color burst enable in half-lines
- */
-#define VI_V_BURST_REG (VI_BASE_REG+0x2C)
-
-/* VI x-scale (R/W): [11: 0] 1/horizontal scale up factor (2.10 format)
- * [27:16] horizontal subpixel offset (2.10 format)
- */
-#define VI_X_SCALE_REG (VI_BASE_REG+0x30)
-
-/* VI y-scale (R/W): [11: 0] 1/vertical scale up factor (2.10 format)
- * [27:16] vertical subpixel offset (2.10 format)
- */
-#define VI_Y_SCALE_REG (VI_BASE_REG+0x34)
-
-/*
- * Patterns to interpret VI_CONTROL_REG
- */
-#define VI_CTRL_TYPE_16 0x00002 /* Bit [1:0] pixel size: 16 bit */
-#define VI_CTRL_TYPE_32 0x00003 /* Bit [1:0] pixel size: 32 bit */
-#define VI_CTRL_GAMMA_DITHER_ON 0x00004 /* Bit 2: default = on */
-#define VI_CTRL_GAMMA_ON 0x00008 /* Bit 3: default = on */
-#define VI_CTRL_DIVOT_ON 0x00010 /* Bit 4: default = on */
-#define VI_CTRL_SERRATE_ON 0x00040 /* Bit 6: on if interlaced */
-#define VI_CTRL_ANTIALIAS_MASK 0x00300 /* Bit [9:8] anti-alias mode */
-#define VI_CTRL_DITHER_FILTER_ON 0x10000 /* Bit 16: dither-filter mode */
-
-/*
- * Possible video clocks (NTSC or PAL)
- */
-#define VI_NTSC_CLOCK 48681812 /* Hz = 48.681812 MHz */
-#define VI_PAL_CLOCK 49656530 /* Hz = 49.656530 MHz */
-#define VI_MPAL_CLOCK 48628316 /* Hz = 48.628316 MHz */
-
-
-/*************************************************************************
- * Audio Interface (AI) Registers
- *
- * The address and length registers are double buffered; that is, they
- * can be written twice before becoming full.
- * The address must be written before the length.
- */
-#define AI_BASE_REG 0x04500000
-
-/* AI DRAM address (W): [23:0] starting RDRAM address (8B-aligned) */
-#define AI_DRAM_ADDR_REG (AI_BASE_REG+0x00) /* R0: DRAM address */
-
-/* AI length (R/W): [14:0] transfer length (v1.0) - Bottom 3 bits are ignored */
-/* [17:0] transfer length (v2.0) - Bottom 3 bits are ignored */
-#define AI_LEN_REG (AI_BASE_REG+0x04) /* R1: Length */
-
-/* AI control (W): [0] DMA enable - if LSB == 1, DMA is enabled */
-#define AI_CONTROL_REG (AI_BASE_REG+0x08) /* R2: DMA Control */
-
-/*
- * AI status (R): [31]/[0] ai_full (addr & len buffer full), [30] ai_busy
- * Note that a 1->0 transition in ai_full will set interrupt
- * (W): clear audio interrupt
- */
-#define AI_STATUS_REG (AI_BASE_REG+0x0C) /* R3: Status */
-
-/*
- * AI DAC sample period register (W): [13:0] dac rate
- * - vid_clock/(dperiod + 1) is the DAC sample rate
- * - (dperiod + 1) >= 66 * (aclockhp + 1) must be true
- */
-#define AI_DACRATE_REG (AI_BASE_REG+0x10) /* R4: DAC rate 14-lsb*/
-
-/*
- * AI bit rate (W): [3:0] bit rate (abus clock half period register - aclockhp)
- * - vid_clock/(2 * (aclockhp + 1)) is the DAC clock rate
- * - The abus clock stops if aclockhp is zero
- */
-#define AI_BITRATE_REG (AI_BASE_REG+0x14) /* R5: Bit rate 4-lsb */
-
-/* Value for control register */
-#define AI_CONTROL_DMA_ON 0x01 /* LSB = 1: DMA enable*/
-#define AI_CONTROL_DMA_OFF 0x00 /* LSB = 1: DMA enable*/
-
-/* Value for status register */
-#define AI_STATUS_FIFO_FULL 0x80000000 /* Bit 31: full */
-#define AI_STATUS_DMA_BUSY 0x40000000 /* Bit 30: busy */
-
-/* DAC rate = video clock / audio frequency
- * - DAC rate >= (66 * Bit rate) must be true
- */
-#define AI_MAX_DAC_RATE 16384 /* 14-bit+1 */
-#define AI_MIN_DAC_RATE 132
-
-/* Bit rate <= (DAC rate / 66) */
-#define AI_MAX_BIT_RATE 16 /* 4-bit+1 */
-#define AI_MIN_BIT_RATE 2
-
-/*
- * Maximum and minimum values for audio frequency based on video clocks
- * max frequency = (video clock / min dac rate)
- * min frequency = (video clock / max dac rate)
- */
-#define AI_NTSC_MAX_FREQ 368000 /* 368 KHz */
-#define AI_NTSC_MIN_FREQ 3000 /* 3 KHz ~ 2971 Hz */
-
-#define AI_PAL_MAX_FREQ 376000 /* 376 KHz */
-#define AI_PAL_MIN_FREQ 3050 /* 3 KHz ~ 3031 Hz */
-
-#define AI_MPAL_MAX_FREQ 368000 /* 368 KHz */
-#define AI_MPAL_MIN_FREQ 3000 /* 3 KHz ~ 2968 Hz */
-
-
-/*************************************************************************
- * Peripheral Interface (PI) Registers
- */
-#define PI_BASE_REG 0x04600000
-
-/* PI DRAM address (R/W): [23:0] starting RDRAM address */
-#define PI_DRAM_ADDR_REG (PI_BASE_REG+0x00) /* DRAM address */
-
-/* PI pbus (cartridge) address (R/W): [31:0] starting AD16 address */
-#define PI_CART_ADDR_REG (PI_BASE_REG+0x04)
-
-/* PI read length (R/W): [23:0] read data length */
-#define PI_RD_LEN_REG (PI_BASE_REG+0x08)
-
-/* PI write length (R/W): [23:0] write data length */
-#define PI_WR_LEN_REG (PI_BASE_REG+0x0C)
-
-/*
- * PI status (R): [0] DMA busy, [1] IO busy, [2], error
- * (W): [0] reset controller (and abort current op), [1] clear intr
- */
-#define PI_STATUS_REG (PI_BASE_REG+0x10)
-
-/* PI dom1 latency (R/W): [7:0] domain 1 device latency */
-#define PI_BSD_DOM1_LAT_REG (PI_BASE_REG+0x14)
-
-/* PI dom1 pulse width (R/W): [7:0] domain 1 device R/W strobe pulse width */
-#define PI_BSD_DOM1_PWD_REG (PI_BASE_REG+0x18)
-
-/* PI dom1 page size (R/W): [3:0] domain 1 device page size */
-#define PI_BSD_DOM1_PGS_REG (PI_BASE_REG+0x1C) /* page size */
-
-/* PI dom1 release (R/W): [1:0] domain 1 device R/W release duration */
-#define PI_BSD_DOM1_RLS_REG (PI_BASE_REG+0x20)
-
-/* PI dom2 latency (R/W): [7:0] domain 2 device latency */
-#define PI_BSD_DOM2_LAT_REG (PI_BASE_REG+0x24) /* Domain 2 latency */
-
-/* PI dom2 pulse width (R/W): [7:0] domain 2 device R/W strobe pulse width */
-#define PI_BSD_DOM2_PWD_REG (PI_BASE_REG+0x28) /* pulse width */
-
-/* PI dom2 page size (R/W): [3:0] domain 2 device page size */
-#define PI_BSD_DOM2_PGS_REG (PI_BASE_REG+0x2C) /* page size */
-
-/* PI dom2 release (R/W): [1:0] domain 2 device R/W release duration */
-#define PI_BSD_DOM2_RLS_REG (PI_BASE_REG+0x30) /* release duration */
-
-#define PI_DOMAIN1_REG PI_BSD_DOM1_LAT_REG
-#define PI_DOMAIN2_REG PI_BSD_DOM2_LAT_REG
-
-#define PI_DOM_LAT_OFS 0x00
-#define PI_DOM_PWD_OFS 0x04
-#define PI_DOM_PGS_OFS 0x08
-#define PI_DOM_RLS_OFS 0x0C
-
-/*
- * PI status register has 3 bits active when read from (PI_STATUS_REG - read)
- * Bit 0: DMA busy - set when DMA is in progress
- * Bit 1: IO busy - set when IO is in progress
- * Bit 2: Error - set when CPU issues IO request while DMA is busy
- */
-#define PI_STATUS_ERROR 0x04
-#define PI_STATUS_IO_BUSY 0x02
-#define PI_STATUS_DMA_BUSY 0x01
-
-/* PI status register has 2 bits active when written to:
- * Bit 0: When set, reset PIC
- * Bit 1: When set, clear interrupt flag
- * The values of the two bits can be ORed together to both reset PIC and
- * clear interrupt at the same time.
- *
- * Note:
- * - The PIC does generate an interrupt at the end of each DMA. CPU
- * needs to clear the interrupt flag explicitly (from an interrupt
- * handler) by writing into the STATUS register with bit 1 set.
- *
- * - When a DMA completes, the interrupt flag is set. CPU can issue
- * another request even while the interrupt flag is set (as long as
- * PIC is idle). However, it is the CPU's responsibility for
- * maintaining accurate correspondence between DMA completions and
- * interrupts.
- *
- * - When PIC is reset, if PIC happens to be busy, an interrupt will
- * be generated as PIC returns to idle. Otherwise, no interrupt will
- * be generated and PIC remains idle.
- */
-/*
- * Values to clear interrupt/reset PIC (PI_STATUS_REG - write)
- */
-#define PI_STATUS_RESET 0x01
-#define PI_SET_RESET PI_STATUS_RESET
-
-#define PI_STATUS_CLR_INTR 0x02
-#define PI_CLR_INTR PI_STATUS_CLR_INTR
-
-#define PI_DMA_BUFFER_SIZE 128
-
-#define PI_DOM1_ADDR1 0x06000000 /* to 0x07FFFFFF */
-#define PI_DOM1_ADDR2 0x10000000 /* to 0x1FBFFFFF */
-#define PI_DOM1_ADDR3 0x1FD00000 /* to 0x7FFFFFFF */
-#define PI_DOM2_ADDR1 0x05000000 /* to 0x05FFFFFF */
-#define PI_DOM2_ADDR2 0x08000000 /* to 0x0FFFFFFF */
-
-
-/*************************************************************************
- * RDRAM Interface (RI) Registers
- */
-#define RI_BASE_REG 0x04700000
-
-/* RI mode (R/W): [1:0] operating mode, [2] stop T active, [3] stop R active */
-#define RI_MODE_REG (RI_BASE_REG+0x00)
-
-/* RI config (R/W): [5:0] current control input, [6] current control enable */
-#define RI_CONFIG_REG (RI_BASE_REG+0x04)
-
-/* RI current load (W): [] any write updates current control register */
-#define RI_CURRENT_LOAD_REG (RI_BASE_REG+0x08)
-
-/* RI select (R/W): [2:0] receive select, [2:0] transmit select */
-#define RI_SELECT_REG (RI_BASE_REG+0x0C)
-
-/* RI refresh (R/W): [7:0] clean refresh delay, [15:8] dirty refresh delay,
- * [16] refresh bank, [17] refresh enable
- * [18] refresh optimize
- */
-#define RI_REFRESH_REG (RI_BASE_REG+0x10)
-#define RI_COUNT_REG RI_REFRESH_REG
-
-/* RI latency (R/W): [3:0] DMA latency/overlap */
-#define RI_LATENCY_REG (RI_BASE_REG+0x14)
-
-/* RI error (R): [0] nack error, [1] ack error */
-#define RI_RERROR_REG (RI_BASE_REG+0x18)
-
-/* RI error (W): [] any write clears all error bits */
-#define RI_WERROR_REG (RI_BASE_REG+0x1C)
-
-
-/*************************************************************************
- * Serial Interface (SI) Registers
- */
-#define SI_BASE_REG 0x04800000
-
-/* SI DRAM address (R/W): [23:0] starting RDRAM address */
-#define SI_DRAM_ADDR_REG (SI_BASE_REG+0x00) /* R0: DRAM address */
-
-/* SI address read 64B (W): [] any write causes a 64B DMA write */
-#define SI_PIF_ADDR_RD64B_REG (SI_BASE_REG+0x04) /* R1: 64B PIF->DRAM */
-
-/* Address SI_BASE_REG + (0x08, 0x0c, 0x14) are reserved */
-
-/* SI address write 64B (W): [] any write causes a 64B DMA read */
-#define SI_PIF_ADDR_WR64B_REG (SI_BASE_REG+0x10) /* R4: 64B DRAM->PIF */
-
-/*
- * SI status (W): [] any write clears interrupt
- * (R): [0] DMA busy, [1] IO read busy, [2] reserved
- * [3] DMA error, [12] interrupt
- */
-#define SI_STATUS_REG (SI_BASE_REG+0x18) /* R6: Status */
-
-/* SI status register has the following bits active:
- * 0: DMA busy - set when DMA is in progress
- * 1: IO busy - set when IO access is in progress
- * 3: DMA error - set when there are overlapping DMA requests
- * 12: Interrupt - Interrupt set
- */
-#define SI_STATUS_DMA_BUSY 0x0001
-#define SI_STATUS_RD_BUSY 0x0002
-#define SI_STATUS_DMA_ERROR 0x0008
-#define SI_STATUS_INTERRUPT 0x1000
-
-/*************************************************************************
- * Development Board GIO Control Registers
- */
-
-#define GIO_BASE_REG 0x18000000
-
-/* Game to Host Interrupt */
-#define GIO_GIO_INTR_REG (GIO_BASE_REG+0x000)
-
-/* Game to Host SYNC */
-#define GIO_GIO_SYNC_REG (GIO_BASE_REG+0x400)
-
-/* Host to Game Interrupt */
-#define GIO_CART_INTR_REG (GIO_BASE_REG+0x800)
-
-
-/*************************************************************************
- * Common macros
- */
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-#define IO_READ(addr) (*(vu32 *)PHYS_TO_K1(addr))
-#define IO_WRITE(addr,data) (*(vu32 *)PHYS_TO_K1(addr)=(u32)(data))
-#define RCP_STAT_PRINT \
- rmonPrintf("current=%x start=%x end=%x dpstat=%x spstat=%x\n", \
- IO_READ(DPC_CURRENT_REG), \
- IO_READ(DPC_START_REG), \
- IO_READ(DPC_END_REG), \
- IO_READ(DPC_STATUS_REG), \
- IO_READ(SP_STATUS_REG))
-
-#endif
-
-#endif /* _RCP_H_ */
diff --git a/include/PR/sptask.h b/include/PR/sptask.h
deleted file mode 100644
index ebb3ee9dd..000000000
--- a/include/PR/sptask.h
+++ /dev/null
@@ -1,230 +0,0 @@
-/**************************************************************************
- * *
- * Copyright (C) 1995, Silicon Graphics, Inc. *
- * *
- * These coded instructions, statements, and computer programs contain *
- * unpublished proprietary information of Silicon Graphics, Inc., and *
- * are protected by Federal copyright law. They may not be disclosed *
- * to third parties or copied or duplicated in any form, in whole or *
- * in part, without the prior written consent of Silicon Graphics, Inc. *
- * *
- **************************************************************************/
-
-/**************************************************************************
- *
- * $Revision: 1.9 $
- * $Date: 1998/03/05 06:40:29 $
- * $Source: /exdisk2/cvs/N64OS/Master/cvsmdev2/PR/include/sptask.h,v $
- *
- **************************************************************************/
-
-#ifndef _SPTASK_H_
-#define _SPTASK_H_
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-extern "C" {
-#endif
-
-#include <PR/ultratypes.h>
-
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/**************************************************************************
- *
- * Type definitions
- *
- */
-
-/*
- * Task List Structure.
- *
- * Things an app might pass to the SP via the task list.
- * Not every task ucode would need/use every field, but
- *
- * - type (audio, gfx, video, ...)
- * - flags
- * - wait for DP to drain before running new task
- * - SEE BIT DEFINITIONS UNDER "Task Flags field"
- * - pointer to boot ucode
- * - size of boot ucode
- * - pointer to ucode
- * - size of ucode
- * - pointer to initial DMEM data
- * - size of initial DMEM data
- * - pointer to DRAM stack
- * - size of DRAM stack (max)
- * - pointer to output buffer
- * - pointer to store output buffer length
- * - generic data pointer (for display list, etc.)
- * - generic data length (for display list, etc.)
- * - pointer to buffer where to store saved DMEM (in yield case)
- * - size of buffer to store saved DMEM.
- *
- * IMPORTANT!!! Watch alignment issues.
- *
- * IMPORTANT!!! Watch data cache issues. The RCP may write data into the
- * dram_stack, output_buff, output_buff_size, and the yield_data_ptr areas.
- * These buffers should be cache aligned and use the entire line (16 bytes) to
- * avoid corruption by writebacks by the CPU (cache tearing).
- *
- * IMPORTANT!!! all addresses are virtual addresses. Library does
- * any necessary translation.
- *
- */
-typedef struct
-{
- /*0x00*/ u32 type;
- /*0x04*/ u32 flags;
-
- /*0x08*/ u64 *ucode_boot;
- /*0x0C*/ u32 ucode_boot_size;
-
- /*0x10*/ u64 *ucode;
- /*0x14*/ u32 ucode_size;
-
- /*0x18*/ u64 *ucode_data;
- /*0x1C*/ u32 ucode_data_size;
-
- /*0x20*/ u64 *dram_stack;
- /*0x24*/ u32 dram_stack_size;
-
- /*0x28*/ u64 *output_buff;
- /*0x2C*/ u64 *output_buff_size;
-
- /*0x30*/ u64 *data_ptr;
- /*0x34*/ u32 data_size;
-
- /*0x38*/ u64 *yield_data_ptr;
- /*0x3C*/ u32 yield_data_size;
-} OSTask_t; // size = 0x40
-
-typedef union {
- OSTask_t t;
- long long int force_structure_alignment;
-} OSTask;
-
-typedef u32 OSYieldResult;
-#endif /* _LANGUAGE_C */
-
-
-/*
- * Task Flags field
- */
-#define OS_TASK_YIELDED 0x0001
-#define OS_TASK_DP_WAIT 0x0002
-#define OS_TASK_LOADABLE 0x0004
-#define OS_TASK_SP_ONLY 0x0008
-#define OS_TASK_USR0 0x0010
-#define OS_TASK_USR1 0x0020
-#define OS_TASK_USR2 0x0040
-#define OS_TASK_USR3 0x0080
-
-/*
- * Size of Yield buffer. The taskHdrPtr->t.yield_data_ptr must point to a
- * buffer of this size. (The size is in bytes). ONLY If the task will NEVER
- * yield it may be a null pointer. The buffer must be aligned to a 64 bit
- * boundary. The taskHdrPtr->t.yield_data_ptr must be set to point to the
- * buffer BEFORE the task is started.
- */
-#if (defined(F3DEX_GBI) || defined(F3DLP_GBI) || defined(F3DEX_GBI_2))
-#ifdef F3D_OLD
-#define OS_YIELD_DATA_SIZE 0xD00
-#else
-#define OS_YIELD_DATA_SIZE 0xC00
-#endif
-#else
-#define OS_YIELD_DATA_SIZE 0x900
-#endif
-
-//! @todo These defines shouldn't exist - PR/rcp.h has them properly defined (ultralib)
-/* Flags */
-#define M_TASK_FLAG0 1
-#define M_TASK_FLAG1 2
-
-/* SpStatus */
-#define SPSTATUS_CLEAR_HALT 0x00000001
-#define SPSTATUS_SET_HALT 0x00000002
-#define SPSTATUS_CLEAR_BROKE 0x00000004
-#define SPSTATUS_CLEAR_INTR 0x00000008
-#define SPSTATUS_SET_INTR 0x00000010
-#define SPSTATUS_CLEAR_SSTEP 0x00000020
-#define SPSTATUS_SET_SSTEP 0x00000040
-#define SPSTATUS_CLEAR_INTR_ON_BREAK 0x00000080
-#define SPSTATUS_SET_INTR_ON_BREAK 0x00000100
-#define SPSTATUS_CLEAR_SIGNAL0 0x00000200
-#define SPSTATUS_SET_SIGNAL0 0x00000400
-#define SPSTATUS_CLEAR_SIGNAL1 0x00000800
-#define SPSTATUS_SET_SIGNAL1 0x00001000
-#define SPSTATUS_CLEAR_SIGNAL2 0x00002000
-#define SPSTATUS_SET_SIGNAL2 0x00004000
-#define SPSTATUS_CLEAR_SIGNAL3 0x00008000
-#define SPSTATUS_SET_SIGNAL3 0x00010000
-#define SPSTATUS_CLEAR_SIGNAL4 0x00020000
-#define SPSTATUS_SET_SIGNAL4 0x00040000
-#define SPSTATUS_CLEAR_SIGNAL5 0x00080000
-#define SPSTATUS_SET_SIGNAL5 0x00100000
-#define SPSTATUS_CLEAR_SIGNAL6 0x00200000
-#define SPSTATUS_SET_SIGNAL6 0x00800000
-#define SPSTATUS_CLEAR_SIGNAL7 0x01000000
-#define SPSTATUS_SET_SIGNAL7 0x02000000
-
-#define SPSTATUS_HALT 0x0001
-#define SPSTATUS_BROKE 0x0002
-#define SPSTATUS_DMA_BUSY 0x0004
-#define SPSTATUS_DMA_FULL 0x0008
-#define SPSTATUS_IO_FULL 0x0010
-#define SPSTATUS_SINGLE_STEP 0x0020
-#define SPSTATUS_INTERRUPT_ON_BREAK 0x0040
-#define SPSTATUS_SIGNAL0_SET 0x0080
-#define SPSTATUS_SIGNAL1_SET 0x0100
-#define SPSTATUS_SIGNAL2_SET 0x0200
-#define SPSTATUS_SIGNAL3_SET 0x0400
-#define SPSTATUS_SIGNAL4_SET 0x0800
-#define SPSTATUS_SIGNAL5_SET 0x1000
-#define SPSTATUS_SIGNAL6_SET 0x2000
-#define SPSTATUS_SIGNAL7_SET 0x4000
-
-#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
-/**************************************************************************
- *
- * Macro definitions
- *
- */
-
-/*
- * this macro simulates atomic action.
- */
-#define osSpTaskStart(p) \
- osSpTaskLoad(p); \
- osSpTaskStartGo(p);
-
-/**************************************************************************
- *
- * Extern variables
- *
- */
-
-
-/**************************************************************************
- *
- * Function prototypes
- *
- */
-
-/*
- * break this up into two steps for debugging.
- */
-extern void osSpTaskLoad(OSTask *task);
-extern void osSpTaskStartGo(OSTask *task);
-
-extern void osSpTaskYield(void);
-extern OSYieldResult osSpTaskYielded(OSTask *task);
-
-#endif /* _LANGUAGE_C */
-
-#ifdef _LANGUAGE_C_PLUS_PLUS
-}
-#endif
-
-#endif /* !_SPTASK_H */
diff --git a/include/PR/ucode.h b/include/PR/ucode.h
deleted file mode 100644
index f86d3047a..000000000
--- a/include/PR/ucode.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef _ULTRA64_UCODE_H_
-#define _ULTRA64_UCODE_H_
-
-#define SP_DRAM_STACK_SIZE8 0x400
-#define SP_UCODE_SIZE 0x1000
-#define SP_UCODE_DATA_SIZE 0x800
-
-// standard boot ucode
-extern u64 rspF3DBootStart[], rspF3DBootEnd[];
-
-// F3D ucode
-extern u64 gspF3DEXTextStart[], gspF3DEXTextEnd[];
-
-extern u64 gspF3DLXTextStart[], gspF3DLXTextEnd[];
-
-// F3D ucode data
-extern u64 gspF3DEXDataStart[], gspF3DEXDataEnd[];
-
-extern u64 gspF3DLXDataStart[], gspF3DLXDataEnd[];
-
-// aspMain (audio) ucode
-extern u64 rspAspMainStart[], rspAspMainEnd[];
-
-// aspMain ucode data
-extern u64 rspAspMainDataStart[], rspAspMainDataEnd[];
-
-#endif
diff --git a/include/PR/ultratypes.h b/include/PR/ultratypes.h
deleted file mode 100644
index 5a7ba5a93..000000000
--- a/include/PR/ultratypes.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef _ULTRA64_TYPES_H_
-#define _ULTRA64_TYPES_H_
-
-#ifndef NULL
-#define NULL (void *)0
-#endif
-
-#define TRUE 1
-#define FALSE 0
-
-typedef signed char s8;
-typedef unsigned char u8;
-typedef signed short int s16;
-typedef unsigned short int u16;
-typedef signed int s32;
-typedef unsigned int u32;
-typedef signed long long int s64;
-typedef unsigned long long int u64;
-
-typedef signed int bool;
-typedef signed char bool8;
-typedef unsigned char ubool8;
-
-typedef volatile u8 vu8;
-typedef volatile u16 vu16;
-typedef volatile u32 vu32;
-typedef volatile u64 vu64;
-typedef volatile s8 vs8;
-typedef volatile s16 vs16;
-typedef volatile s32 vs32;
-typedef volatile s64 vs64;
-
-typedef float f32;
-typedef double f64;
-
-#ifdef TARGET_N64
-typedef u32 size_t;
-typedef s32 ssize_t;
-typedef u32 uintptr_t;
-typedef s32 intptr_t;
-typedef s32 ptrdiff_t;
-#else
-#include <stddef.h>
-typedef ptrdiff_t ssize_t;
-#endif
-
-#endif