diff --git a/configure.py b/configure.py index 9a34585143..562361665d 100755 --- a/configure.py +++ b/configure.py @@ -262,6 +262,9 @@ async def main(): version = versions[0] f.write(f"compiler_command = \"{cpp} -Iver/{version}/build/include -Iinclude -Isrc -DPERMUTER -D _LANGUAGE_C -D _FINALROM -D VERSION={version} -ffreestanding -DF3DEX_GBI_2 -D_MIPS_SZLONG=32 {args.cflags} -D SCRIPT(...)={{}} | {iconv} | tools/{os_dir}/cc1 -O2 -quiet -G 0 -mcpu=vr4300 -mfix4300 -mips3 -mgp32 -mfp32 -Wuninitialized -Wshadow {args.cflags} -o - | tools/{os_dir}/mips-nintendo-nu64-as -EB -G 0 -\"\n") f.write(f"assembler_command = \"{cross}as -march=vr4300 -mabi=32\"\n") + f.write("\n") + f.write("[preserve_macros]\n") + f.write("g[DS]P.*\" = \"void\n") # $version n.rule("cpp", diff --git a/include/PR/gbi.h b/include/PR/gbi.h index 9c76ae06b5..35075b7d92 100755 --- a/include/PR/gbi.h +++ b/include/PR/gbi.h @@ -1,4577 +1,4577 @@ -/************************************************************************** - * * - * 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.140 $ - * $Date: 1999/05/19 08:37:59 $ - * $Source: /hosts/gate3/exdisk2/cvs/N64OS/Master/cvsmdev2/PR/include/gbi.h,v $ - * - **************************************************************************/ - -#ifndef _GBI_H_ -#define _GBI_H_ - -#include - -/* - * To use the F3DEX ucodes, define F3DEX_GBI before include this file. - * - * #define F3DEX_GBI - * #include - * - * 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) -#if (defined(F3DEX_GBI)||defined(F3DLP_GBI)) -# define G_MODIFYVTX (G_IMMFIRST-13) -# define G_TRI2 (G_IMMFIRST-14) -# define G_BRANCH_Z (G_IMMFIRST-15) -# define G_LOAD_UCODE (G_IMMFIRST-16) -#else -# define G_RDPHALF_CONT (G_IMMFIRST-13) -#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_MODULATEIA TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0 -#define G_CC_MODULATEIDECALA TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0 -#define G_CC_MODULATERGB G_CC_MODULATEI -#define G_CC_MODULATERGBA G_CC_MODULATEIA -#define G_CC_MODULATERGBDECALA G_CC_MODULATEIDECALA -#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_DECALRGB 0, 0, 0, TEXEL0, 0, 0, 0, SHADE -#define G_CC_DECALRGBA 0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0 -#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_ADDRGB 1, 0, TEXEL0, SHADE, 0, 0, 0, SHADE -#define G_CC_ADDRGBDECALA 1, 0, TEXEL0, SHADE, 0, 0, 0, TEXEL0 -#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_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) - - - -#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_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 long 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}}} } - -/* - * Graphics DMA Packet - */ -typedef struct { - int cmd:8; - unsigned int par:8; - unsigned int len:16; - unsigned int 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 */ - unsigned int 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; - -#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 - -/* - * Textured rectangles are 128 bits not 64 bits - */ -typedef struct { - unsigned long w0; - unsigned long w1; - unsigned long w2; - unsigned long w3; -} TexRect; - -/* - * Generic Gfx Packet - */ -typedef struct { - unsigned int w0; - unsigned int w1; -} Gwords; - -/* - * This union is the fundamental type of the display list. - * It is, by law, exactly 64 bits in size. - */ -typedef union { - Gwords words; - 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; - 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 = (unsigned int)(s); \ -} - -#define gsDma0p(c, s, l) \ -{{ \ - _SHIFTL((c), 24, 8) | _SHIFTL((l), 0, 24), (unsigned int)(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 = (unsigned int)(s); \ -} - -#define gsDma1p(c, s, l, p) \ -{{ \ - (_SHIFTL((c), 24, 8) | _SHIFTL((p), 16, 8) | \ - _SHIFTL((l), 0, 16)), \ - (unsigned int)(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 = (unsigned int)(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)), \ - (unsigned int)(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 = (unsigned int)(v); \ -} -# define gsSPVertex(v, n, v0) \ -{{ \ - (_SHIFTL(G_VTX,24,8)|_SHIFTL((n),12,8)|_SHIFTL((v0)+(n),1,7)), \ - (unsigned int)(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 = (unsigned int)(p0); \ -} - -#define gsImmp1(c, p0) \ -{{ \ - _SHIFTL((c), 24, 8), (unsigned int)(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 = (unsigned int) (dat); \ -} - -#define gsImmp21(c, p0, p1, dat) \ -{{ \ - _SHIFTL((c), 24, 8) | _SHIFTL((p0), 8, 16) | _SHIFTL((p1), 0, 8),\ - (unsigned int) (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)) -# 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) \ -}} - -/*** - *** 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 /* 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) \ -}} - -#endif /* F3DEX_GBI/F3DLP_GBI */ - -#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) \ -}} - -#else -#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 = (unsigned int)(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), \ - (unsigned int)(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 = (unsigned int)(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), \ - (unsigned int)(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 = (unsigned int)(uc_dstart); \ - _g = (Gfx *)(pkt); \ - _g->words.w0 = (_SHIFTL(G_LOAD_UCODE,24,8)| \ - _SHIFTL((int)(uc_dsize)-1,0,16)); \ - _g->words.w1 = (unsigned int)(uc_start); \ -} - -#define gsSPLoadUcodeEx(uc_start, uc_dstart, uc_dsize) \ -{{ _SHIFTL(G_RDPHALF_1,24,8), \ - (unsigned int)(uc_dstart), }}, \ -{{ _SHIFTL(G_LOAD_UCODE,24,8)| \ - _SHIFTL((int)(uc_dsize)-1,0,16), \ - (unsigned int)(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 = (unsigned int)(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), \ - (unsigned int)(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 gsDPSetHilite1Tile(tile, hilite, width, height) \ - gsDPSetTileSize(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) -#define gsDPSetHilite2Tile(tile, hilite, width, height) \ - gsDPSetTileSize(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 - -#define gSPPerspNormalize(pkt, s) gMoveWd(pkt, G_MW_PERSPNORM, 0, (s)) -#define gsSPPerspNormalize(s) gsMoveWd( G_MW_PERSPNORM, 0, (s)) - -#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)) - -#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) \ -}} -#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 = (unsigned int)(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), \ - (unsigned int)(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)<>3), 0, \ - G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ - shifts); \ - gDPSetTileSize(pkt, G_TX_RENDERTILE, \ - (uls)<>3), tmem, \ - G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ - shifts); \ - gDPLoadSync(pkt); \ - gDPLoadTile( pkt, G_TX_LOADTILE, \ - (uls)<>3), tmem, \ - rtile, pal, cmt, maskt, shiftt, cms, masks, \ - shifts); \ - gDPSetTileSize(pkt, rtile, \ - (uls)<>3), 0, \ - G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ - shifts), \ - gsDPLoadSync(), \ - gsDPLoadTile( G_TX_LOADTILE, \ - (uls)<>3), 0, \ - G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks,\ - shifts), \ - gsDPSetTileSize(G_TX_RENDERTILE, \ - (uls)<>3), \ - tmem, G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, \ - masks, shifts), \ - gsDPLoadSync(), \ - gsDPLoadTile( G_TX_LOADTILE, \ - (uls)<>3), \ - tmem, rtile, pal, cmt, maskt, shiftt, cms, masks, \ - shifts), \ - gsDPSetTileSize(rtile, \ - (uls)<>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)<>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)<>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)<>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)<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)); \ -} - -#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))) - -#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)));\ -} - -/* 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))); \ -} - -#define gsDPWord(wordhi, wordlo) \ - gsImmp1(G_RDPHALF_1, (unsigned int)(wordhi)), \ - gsImmp1(G_RDPHALF_2, (unsigned int)(wordlo)) - -#define gDPWord(pkt, wordhi, wordlo) \ -{ \ - Gfx *_g = (Gfx *)(pkt); \ - \ - gImmp1(pkt, G_RDPHALF_1, (unsigned int)(wordhi)); \ - gImmp1(pkt, G_RDPHALF_2, (unsigned int)(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_ */ +/************************************************************************** + * * + * 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.140 $ + * $Date: 1999/05/19 08:37:59 $ + * $Source: /hosts/gate3/exdisk2/cvs/N64OS/Master/cvsmdev2/PR/include/gbi.h,v $ + * + **************************************************************************/ + +#ifndef _GBI_H_ +#define _GBI_H_ + +#include + +/* + * To use the F3DEX ucodes, define F3DEX_GBI before include this file. + * + * #define F3DEX_GBI + * #include + * + * 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) +#if (defined(F3DEX_GBI)||defined(F3DLP_GBI)) +# define G_MODIFYVTX (G_IMMFIRST-13) +# define G_TRI2 (G_IMMFIRST-14) +# define G_BRANCH_Z (G_IMMFIRST-15) +# define G_LOAD_UCODE (G_IMMFIRST-16) +#else +# define G_RDPHALF_CONT (G_IMMFIRST-13) +#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_MODULATEIA TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0 +#define G_CC_MODULATEIDECALA TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0 +#define G_CC_MODULATERGB G_CC_MODULATEI +#define G_CC_MODULATERGBA G_CC_MODULATEIA +#define G_CC_MODULATERGBDECALA G_CC_MODULATEIDECALA +#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_DECALRGB 0, 0, 0, TEXEL0, 0, 0, 0, SHADE +#define G_CC_DECALRGBA 0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0 +#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_ADDRGB 1, 0, TEXEL0, SHADE, 0, 0, 0, SHADE +#define G_CC_ADDRGBDECALA 1, 0, TEXEL0, SHADE, 0, 0, 0, TEXEL0 +#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_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) + + + +#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_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 long 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}}} } + +/* + * Graphics DMA Packet + */ +typedef struct { + int cmd:8; + unsigned int par:8; + unsigned int len:16; + unsigned int 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 */ + unsigned int 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; + +#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 + +/* + * Textured rectangles are 128 bits not 64 bits + */ +typedef struct { + unsigned long w0; + unsigned long w1; + unsigned long w2; + unsigned long w3; +} TexRect; + +/* + * Generic Gfx Packet + */ +typedef struct { + unsigned int w0; + unsigned int w1; +} Gwords; + +/* + * This union is the fundamental type of the display list. + * It is, by law, exactly 64 bits in size. + */ +typedef union { + Gwords words; + 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; + 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 = (unsigned int)(s); \ +} + +#define gsDma0p(c, s, l) \ +{{ \ + _SHIFTL((c), 24, 8) | _SHIFTL((l), 0, 24), (unsigned int)(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 = (unsigned int)(s); \ +} + +#define gsDma1p(c, s, l, p) \ +{{ \ + (_SHIFTL((c), 24, 8) | _SHIFTL((p), 16, 8) | \ + _SHIFTL((l), 0, 16)), \ + (unsigned int)(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 = (unsigned int)(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)), \ + (unsigned int)(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 = (unsigned int)(v); \ +} +# define gsSPVertex(v, n, v0) \ +{{ \ + (_SHIFTL(G_VTX,24,8)|_SHIFTL((n),12,8)|_SHIFTL((v0)+(n),1,7)), \ + (unsigned int)(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 = (unsigned int)(p0); \ +} + +#define gsImmp1(c, p0) \ +{{ \ + _SHIFTL((c), 24, 8), (unsigned int)(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 = (unsigned int) (dat); \ +} + +#define gsImmp21(c, p0, p1, dat) \ +{{ \ + _SHIFTL((c), 24, 8) | _SHIFTL((p0), 8, 16) | _SHIFTL((p1), 0, 8),\ + (unsigned int) (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)) +# 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) \ +}} + +/*** + *** 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 /* 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) \ +}} + +#endif /* F3DEX_GBI/F3DLP_GBI */ + +#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) \ +}} + +#else +#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 = (unsigned int)(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), \ + (unsigned int)(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 = (unsigned int)(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), \ + (unsigned int)(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 = (unsigned int)(uc_dstart); \ + _g = (Gfx *)(pkt); \ + _g->words.w0 = (_SHIFTL(G_LOAD_UCODE,24,8)| \ + _SHIFTL((int)(uc_dsize)-1,0,16)); \ + _g->words.w1 = (unsigned int)(uc_start); \ +} + +#define gsSPLoadUcodeEx(uc_start, uc_dstart, uc_dsize) \ +{{ _SHIFTL(G_RDPHALF_1,24,8), \ + (unsigned int)(uc_dstart), }}, \ +{{ _SHIFTL(G_LOAD_UCODE,24,8)| \ + _SHIFTL((int)(uc_dsize)-1,0,16), \ + (unsigned int)(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 = (unsigned int)(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), \ + (unsigned int)(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 gsDPSetHilite1Tile(tile, hilite, width, height) \ + gsDPSetTileSize(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) +#define gsDPSetHilite2Tile(tile, hilite, width, height) \ + gsDPSetTileSize(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 + +#define gSPPerspNormalize(pkt, s) gMoveWd(pkt, G_MW_PERSPNORM, 0, (s)) +#define gsSPPerspNormalize(s) gsMoveWd( G_MW_PERSPNORM, 0, (s)) + +#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)) + +#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) \ +}} +#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 = (unsigned int)(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), \ + (unsigned int)(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)<>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, \ + (uls)<>3), tmem, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPLoadSync(pkt); \ + gDPLoadTile( pkt, G_TX_LOADTILE, \ + (uls)<>3), tmem, \ + rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts); \ + gDPSetTileSize(pkt, rtile, \ + (uls)<>3), 0, \ + G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPLoadSync(), \ + gsDPLoadTile( G_TX_LOADTILE, \ + (uls)<>3), 0, \ + G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks,\ + shifts), \ + gsDPSetTileSize(G_TX_RENDERTILE, \ + (uls)<>3), \ + tmem, G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, \ + masks, shifts), \ + gsDPLoadSync(), \ + gsDPLoadTile( G_TX_LOADTILE, \ + (uls)<>3), \ + tmem, rtile, pal, cmt, maskt, shiftt, cms, masks, \ + shifts), \ + gsDPSetTileSize(rtile, \ + (uls)<>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)<>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)<>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)<>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)<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)); \ +} + +#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))) + +#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)));\ +} + +/* 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))); \ +} + +#define gsDPWord(wordhi, wordlo) \ + gsImmp1(G_RDPHALF_1, (unsigned int)(wordhi)), \ + gsImmp1(G_RDPHALF_2, (unsigned int)(wordlo)) + +#define gDPWord(pkt, wordhi, wordlo) \ +{ \ + Gfx *_g = (Gfx *)(pkt); \ + \ + gImmp1(pkt, G_RDPHALF_1, (unsigned int)(wordhi)); \ + gImmp1(pkt, G_RDPHALF_2, (unsigned int)(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/common_structs.h b/include/common_structs.h index 1f3d5c90e9..03700c6d8f 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -192,7 +192,7 @@ typedef struct PlayerData { /* 0x2B4 */ u32 totalCoinsEarned; /* 0x2B8 */ s16 idleFrameCounter; /* frames with no inputs, overflows ever ~36 minutes of idling */ /* 0x2BA */ char unk_2BA[2]; - /* 0x2BC */ s32 frameCounter; /* increases by 2 per frame */ + /* 0x2BC */ u32 frameCounter; /* increases by 2 per frame */ /* 0x2C0 */ s16 quizzesAnswered; /* 0x2C2 */ s16 quizzesCorrect; /* 0x2C4 */ s32 unk_2C4[12]; @@ -666,7 +666,8 @@ typedef struct BattleStatus { /* 0x46C */ s32 battleState; /* 0 = load assets, 1 = create actors, 4 = start scripts, 7 & 8 = unk */ /* 0x470 */ char unk_470[10]; /* 0x47A */ u8 currentBattleSection; - /* 0x47B */ char unk_47B[21]; + /* 0x47B */ u8 unk_47B; + /* 0x47C */ char unk_47C[20]; } BattleStatus; // size = 0x490 typedef struct TextureHeader { @@ -1724,11 +1725,10 @@ typedef struct struct802E4B10 { // END ENTITY-SPECIFIC STRUCTS typedef struct { - /* 0x00000 */ Light l1[2]; - /* 0x00018 */ Light l2[2]; + /* 0x00000 */ LookAt lookAt[2]; /* 0x00030 */ Matrix4s camPerspMatrix[8]; // could only be length 4, unsure - /* 0x00230 */ s32 mainGfx[0x4100]; - /* 0x10630 */ s32 smallGfx[0x400]; // used by gfx_task_background + /* 0x00230 */ Gfx mainGfx[0x2080]; + /* 0x10630 */ Gfx backgroundGfx[0x200]; // used by gfx_task_background /* 0x11630 */ Matrix4s matrixStack[0x200]; } DisplayContext; // size = 0x19630 diff --git a/include/functions.h b/include/functions.h index 00b5d2068b..fad1d7ee60 100644 --- a/include/functions.h +++ b/include/functions.h @@ -93,6 +93,8 @@ s32 disable_player_input(void); void func_80027088(s32); +void get_dpad_input_radial(f32* angle, f32* magnitude); + void func_8006F8F0(f32, f32, f32); void func_8006FEF0(s32, f32, f32, f32, f32); void func_80070190(s32, f32, f32, f32, s32, f32, s32, s32); diff --git a/include/macros.h b/include/macros.h index f5b584dcbb..305f37a6bd 100644 --- a/include/macros.h +++ b/include/macros.h @@ -22,6 +22,11 @@ #define BADGE_MENU_PAGE(index) (&gBadgeMenuPages[index]) #define ITEM_MENU_PAGE(index) (&gItemMenuPages[index]) +#define OVERRIDE_FLAG_SET(flag) { s32* overrideFlags = &gOverrideFlags; *overrideFlags |= flag; } +#define OVERRIDE_FLAG_UNSET(flag) { s32* overrideFlags = &gOverrideFlags; *overrideFlags &= ~flag; } +#define OVERRIDE_FLAG_CHECK(flag) ({ s32* overrideFlags = &gOverrideFlags; *overrideFlags & flag; }) + + #define MAX_MAPVARS 16 #define MAX_MAPFLAGS 3 diff --git a/include/variables.h b/include/variables.h index bff5195ff6..2d515b0f05 100644 --- a/include/variables.h +++ b/include/variables.h @@ -99,7 +99,7 @@ extern PrintContext* D_802EB39C; extern s32 D_802E99DC; extern Entity* D_802EB3A0; -extern s32 D_8015C7D0[3]; +extern s32 D_8015C7D0[3]; // not size 3 extern UNK_TYPE D_0A0031E0; extern UNK_TYPE D_0A001508; @@ -205,7 +205,8 @@ extern s32 gStatsMenuIconIDs[12]; extern s32 gGameState; -extern s32 D_8009A650[1]; +extern s32 D_8009A64C; +extern s32 gOverrideFlags; extern u16 D_8009A6A0; extern u16 D_8009A6A2; extern u16 D_8009A6A4; @@ -299,7 +300,7 @@ extern OSDevMgr __osPiDevMgr; extern DisplayContext* gDisplayContext; extern Gfx* gMasterGfxPos; extern u16 gMatrixListPos; -extern u16 gCurrentDisplayContextIndex; +extern s32 gCurrentDisplayContextIndex; extern UNK_TYPE D_0A004350; extern UNK_TYPE D_0A0026F0; diff --git a/src/code_105F90.c b/src/code_105F90.c index 4a7410542c..beaed3399a 100644 --- a/src/code_105F90.c +++ b/src/code_105F90.c @@ -1,5 +1,10 @@ #include "common.h" +extern UNK_TYPE D_802EA728; +extern UNK_TYPE D_802EA760; +extern StaticEntityData D_802EA7BC; +extern UNK_TYPE D_802EB3C0; + INCLUDE_ASM(s32, "code_105F90", func_802E4710); INCLUDE_ASM(s32, "code_105F90", func_802E4730); @@ -22,10 +27,11 @@ void func_802E4B60(Entity* entity) { Entity* someEntity; entity->unk_3C = func_802E4AEC; - entity->alpha = 0xFF; + entity->alpha = 255; temp_s0 = entity->dataBuf; entity->flags |= 0x2000; someEntity = get_entity_by_index(temp_s0->unk_00); + if (temp_s0->unk_09 == 0) { temp_s0->unk_09 = 1; temp_s0->unk_01 = 2; @@ -70,8 +76,6 @@ void func_802E540C(Entity* entity) { func_802E4B10(entity); } -extern UNK_TYPE D_802EA728; - void func_802E5428(Entity* entity) { func_802E4B60(entity); func_80110BCC(entity, &D_802EA728); @@ -86,23 +90,19 @@ void func_802E548C(Entity* entity) { func_802E4E04(entity, 0); } -extern UNK_TYPE D_802EA760; - void func_802E54A8(Entity* entity) { func_80110BCC(entity, &D_802EA760); } -extern UNK_TYPE D_802EB3C0; - void func_802E54CC(Entity* entity) { - if ((gPlayerData.partners[1].enabled == 0) && (get_global_flag(0xF8405BE0) == 0)) { + if ((!gPlayerData.partners[1].enabled) && get_global_flag(SI_SAVE_FLAG(96)) == 0) { UNK_TYPE* ptr = &D_802EB3C0; *ptr = 0; load_string(0x1D0001, ptr); func_80027088(1); - D_8009A650[0] |= 0x40; + OVERRIDE_FLAG_SET(0x40); disable_player_input(); - set_global_flag(0xF8405BE0); + set_global_flag(SI_SAVE_FLAG(96)); return; } exec_entity_updatecmd(entity); @@ -112,23 +112,22 @@ void func_802E555C(Entity* entity) { if (D_802EB3C0) { exec_entity_updatecmd(entity); func_80027088(0); - D_8009A650[0] &= ~0x40; + OVERRIDE_FLAG_UNSET(0x40); enable_player_input(); } } s8 func_802E55A8(Entity* entity, StaticEntityData* data) { - s32 temp_s2; + s32 temp_s2 = D_8015C7D0[0]; Entity* someEntity; struct802E4B10* temp_v1; - s8 phi_v0; - temp_s2 = D_8015C7D0[0]; entity_init_Hammer23Block_normal(entity); someEntity = get_entity_by_index(create_entity(data, entity->position.x, entity->position.y, entity->position.z, 0.0f, 0x80000000)); temp_v1 = someEntity->dataBuf; temp_v1->unk_00 = entity->listIndex; + if (temp_s2 == 0) { temp_v1->unk_0A = 3; } else { @@ -136,8 +135,6 @@ s8 func_802E55A8(Entity* entity, StaticEntityData* data) { } } -extern StaticEntityData D_802EA7BC; - void func_802E5648(Entity* entity) { func_802E55A8(entity, &D_802EA7BC); } diff --git a/src/code_106EF0.c b/src/code_106EF0.c index eee23db9da..910daa0210 100644 --- a/src/code_106EF0.c +++ b/src/code_106EF0.c @@ -1,23 +1,20 @@ #include "common.h" -f32 func_802E5670(struct802E4B10* arg0, s32 arg1) { - s32 temp_v0; +extern StaticEntityData D_802EA934; - temp_v0 = arg0->unk_D0 - arg1; - if (arg0->unk_D0 - arg1 < 0) { - temp_v0 += 0x14; +f32 func_802E5670(struct802E4B10* arg0, s32 arg1) { + s32 idx = arg0->unk_D0 - arg1; + + if (idx < 0) { + idx += 20; } - return arg0->unk_D4[temp_v0]; + return arg0->unk_D4[idx]; } void func_802E5690(s32 entityIndex) { - s16 temp_a0; - Entity* someEntity; - Entity* someOtherEntity; - struct802E3650* temp; + Entity* someEntity = get_entity_by_index(entityIndex); + struct802E3650* temp = someEntity->dataBuf; - someEntity = get_entity_by_index(entityIndex); - temp = someEntity->dataBuf; if (temp->unk_12 >= 0) { Entity* someOtherEntity = get_entity_by_index(temp->unk_12); struct802E4B10* temp2 = someOtherEntity->dataBuf; @@ -29,32 +26,23 @@ s32 func_802E56D0(Entity* entity) { return func_802E3650(entity); } -extern StaticEntityData D_802EA934; - void func_802E56EC(Entity* entity) { - s16 entityIndex; - u8 temp_v0_2; - struct802E3650* temp_s0; + struct802E3650* temp_s0 = entity->dataBuf; - temp_s0 = entity->dataBuf; - if (temp_s0->unk_0A != 0xFFFF) { - if (get_global_flag(temp_s0->unk_0A) == 0) { - Entity* someEntity; - struct802E3650* temp2; + if (temp_s0->unk_0A != 0xFFFF && !get_global_flag(temp_s0->unk_0A)) { + Entity* someEntity; + struct802E3650* temp2; - entityIndex = create_entity(&D_802EA934, entity->position.x, entity->position.y, entity->position.z, 0.0f, 0x80000000); - temp_s0->unk_12 = entityIndex; - someEntity = get_entity_by_index(entityIndex); - temp2 = someEntity->dataBuf; - temp2->unk_00 = entity->listIndex; - } + temp_s0->unk_12 = create_entity(&D_802EA934, entity->position.x, entity->position.y, entity->position.z, 0.0f, 0x80000000); + someEntity = get_entity_by_index(temp_s0->unk_12); + temp2 = someEntity->dataBuf; + temp2->unk_00 = entity->listIndex; } } void func_802E578C(Entity* entity) { - struct802E3650* temp_s1; + struct802E3650* temp_s1 = entity->dataBuf; - temp_s1 = entity->dataBuf; entity_init_Hammer23Block_normal(entity); entity->rotation.y += 180.0f; temp_s1->unk_0A = 0xFFFF; @@ -82,7 +70,6 @@ void func_802E581C(Entity* entity) { INCLUDE_ASM(s32, "code_106EF0", func_802E586C); void func_802E5E50(Entity* entity) { - f32 clampedAngle; struct802E4B10* temp_s0 = entity->dataBuf; func_802E581C(entity); @@ -90,36 +77,33 @@ void func_802E5E50(Entity* entity) { entity->unk_3C = NULL; } - clampedAngle = clamp_angle(entity->rotation.y + 3.0); - entity->rotation.y = clampedAngle; - temp_s0->unk_D4[temp_s0->unk_D0] = clampedAngle; - if (++temp_s0->unk_D0 >= 0x15) { + entity->rotation.y = clamp_angle(entity->rotation.y + 3.0); + temp_s0->unk_D4[temp_s0->unk_D0] = entity->rotation.y; + + temp_s0->unk_D0++; + if (temp_s0->unk_D0 > 20) { temp_s0->unk_D0 = 0; } - if (temp_s0->unk_0A == 0) { - if (D_8009A650[0] == 0) { - if (--temp_s0->unk_02 <= 0) { - temp_s0->unk_02 = 0x32; - func_80070550(3, entity->position.x, entity->position.y, entity->position.z, 22.0f, 8.0f, 4, 0x14); - } + if (temp_s0->unk_0A == 0 && gOverrideFlags == 0) { + if (--temp_s0->unk_02 <= 0) { + temp_s0->unk_02 = 50; + func_80070550(3, entity->position.x, entity->position.y, entity->position.z, 22.0f, 8.0f, 4, 20); } } } void func_802E5F50(Entity* entity) { - struct802E3650* temp; + struct802E3650* temp = entity->dataBuf; - temp = entity->dataBuf; temp->unk_128 = &D_0A000328; temp->unk_12C = &D_0A000380; entity->unk_3C = func_802E586C; } void func_802E5F7C(Entity* entity) { - struct802E3650* temp; + struct802E3650* temp = entity->dataBuf; - temp = entity->dataBuf; temp->unk_128 = &D_0A000800; temp->unk_12C = &D_0A000750; entity->unk_3C = func_802E586C; diff --git a/src/code_10A230.c b/src/code_10A230.c index b2da09388b..cc1b34a084 100644 --- a/src/code_10A230.c +++ b/src/code_10A230.c @@ -22,17 +22,15 @@ void func_802E89B0(Entity* entity) { } void func_802E89F8(Entity* entity) { - s32 temp_v0; - struct802E89B0* temp; + struct802E89B0* temp = entity->dataBuf; - temp = entity->dataBuf; temp->unk_04--; if ((temp->unk_04 != -1) && (temp->unk_08 == 0)) { entity->position.y += 2.3125; - return; + } else { + temp->unk_04 = 0; + exec_entity_updatecmd(entity); } - temp->unk_04 = 0; - exec_entity_updatecmd(entity); } void func_802E8A58(Entity* entity) { @@ -44,15 +42,15 @@ void func_802E8A58(Entity* entity) { if (gCollisionStatus.currentFloor > 0) { temp->unk_04 = 1; } - return; + break; case 1: if (gCollisionStatus.currentFloor < 0) { temp->unk_04 = 2; } - return; + break; default: exec_entity_updatecmd(entity); - return; + break; } } else { exec_entity_updatecmd(entity); @@ -65,24 +63,22 @@ void func_802E8ADC(Entity* entity) { PlayerStatus* playerStatus = &gPlayerStatus; if ((entity->unk_06 & 1) != 0) { - *D_8009A650 |= 0x40; - if ((playerStatus->flags & 0x3000) == 0) { - s32 phi_v0 = playerStatus->stickAxis[0]; - s32 temp_a0 = playerStatus->stickAxis[1]; + OVERRIDE_FLAG_SET(0x40); - if (phi_v0 < 0) { - phi_v0 = -phi_v0; - } + if (!(playerStatus->flags & 0x3000)) { + s32 stickAxis0 = playerStatus->stickAxis[0]; + s32 stickAxis1 = playerStatus->stickAxis[1]; - if ((phi_v0 != 0) || (temp_a0 != 0)) { - if (atan2(0.0f, 0.0f, phi_v0, temp_a0) < 60.0f) { + stickAxis0 = abs(stickAxis0); + + if ((stickAxis0 != 0) || (stickAxis1 != 0)) { + if (atan2(0.0f, 0.0f, stickAxis0, stickAxis1) < 60.0f) { exec_entity_updatecmd(entity); - return; } } } } else { - *D_8009A650 &= ~0x40; + OVERRIDE_FLAG_UNSET(0x40); } } #else @@ -152,7 +148,7 @@ void func_802E8D74(Entity* entity) { void func_802E8E10(Entity* entity) { Bytecode* triggerScriptStart = ((Trigger*)entity->dataBuf)->scriptStart; - D_8009A650[0] &= ~0x40; + OVERRIDE_FLAG_UNSET(0x40); entity->boundScript = triggerScriptStart; func_80110678(entity); } diff --git a/src/code_111f0_len_860.c b/src/code_111f0_len_860.c index 6cb717ba48..75c7db5a2f 100644 --- a/src/code_111f0_len_860.c +++ b/src/code_111f0_len_860.c @@ -30,7 +30,9 @@ void func_80035E54(void) { *mapTransitonAlpha = 0xFF; nuContRmbForceStopEnd(); func_801382AC(mapTransitonAlpha); - D_8009A650[0] |= 8; + + OVERRIDE_FLAG_SET(0x8); + set_variable(0, SI_SAVE_VAR(1), (*gameStatus)->unk_A9); D_8009A5D8 = 0; } diff --git a/src/code_11a50_len_7a0.h b/src/code_11a50_len_7a0.h index 77ffa27ad4..cc5300a47b 100644 --- a/src/code_11a50_len_7a0.h +++ b/src/code_11a50_len_7a0.h @@ -2,7 +2,6 @@ #define _CODE_11A50_LEN_7A0_H_ #include "common.h" -#include "code_ebd0_len_6a0.h" #include "code_6e40_len_500.h" #endif diff --git a/src/code_181810.c b/src/code_181810.c index 295e724cc3..e0044d8c58 100644 --- a/src/code_181810.c +++ b/src/code_181810.c @@ -61,7 +61,7 @@ ApiStatus ActorSpeak(ScriptInstance* script, s32 isInitialCall) { clamp_printer_coords(gSpeakingActorPrintCtx, screenX, screenY); script->functionTemp[0].s = 0; - D_8009A650[0] |= 0x10; + OVERRIDE_FLAG_SET(0x10); if (gSpeakingActorTalkAnim >= 0) { func_80263E08(actor, part, gSpeakingActorTalkAnim); } @@ -102,7 +102,7 @@ ApiStatus ActorSpeak(ScriptInstance* script, s32 isInitialCall) { if (gSpeakingActorPrintIsDone == 1) { decrement_status_menu_disabled(); - D_8009A650[0] &= ~0x10; + OVERRIDE_FLAG_UNSET(0x10); return ApiStatus_DONE1; } } @@ -159,10 +159,10 @@ ApiStatus func_802536A8(ScriptInstance* script, s32 isInitialCall) { if (get_variable(script, *script->ptrReadPos) != 0) { battleStatus2->unk_92 |= 1; - D_8009A650[0] |= 0x80; + OVERRIDE_FLAG_SET(0x80); } else { battleStatus2->unk_92 &= ~1; - D_8009A650[0] &= ~0x80; + OVERRIDE_FLAG_UNSET(0x80); } return ApiStatus_DONE2; diff --git a/src/code_1b40_len_20b0.c b/src/code_1b40_len_20b0.c index 9fef5a0184..5f14dee934 100644 --- a/src/code_1b40_len_20b0.c +++ b/src/code_1b40_len_20b0.c @@ -1,4 +1,5 @@ #include "common.h" +#include "nu/nusys.h" s8 D_80074020 = 1; s8 D_80074021 = 5; @@ -13,7 +14,7 @@ s32 D_800741A8[] = { 0x00010000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, }; u16 gMatrixListPos = 0; u16 D_800741F2 = 0; -u16 gCurrentDisplayContextIndex = 0; +s32 gCurrentDisplayContextIndex = 0; s32 D_800741F8 = 0; s32 D_800741FC = 0; s32 D_80074200[] = { 0x028001E0, 0x01FF0000, 0x028001E0, 0x01FF0000 }; @@ -34,9 +35,137 @@ Gfx D_80074230[] = { gsSPEndDisplayList(), }; -INCLUDE_ASM(void, "code_1b40_len_20b0", step_game_loop); +extern DisplayContext D_80164000[]; +extern s16 D_8009A690; -INCLUDE_ASM(s32, "code_1b40_len_20b0", gfx_task_background); +void gfx_init_state(void); +void gfx_draw_background(void); + +void step_game_loop(void) { + PlayerData* playerData = &gPlayerData; + s8* temp80074021; + s16* temp80074182; + s16* temp800741A0; + s16* temp8009A690; + + update_input(); + + (*gGameStatusPtr)->frameCounter++; + + playerData->frameCounter += 2; + if (playerData->frameCounter > 215999999) { + playerData->frameCounter = 215999999; + } + + update_max_rumble_duration(); + + temp80074021 = &D_80074021; + if (*temp80074021 != 0) { + (*temp80074021)-- ; + if (*temp80074021 == 0) { + *temp80074021 = D_80074020; + } else { + return; + } + } + + func_8011BAE8(); + func_8003857C(); + update_dynamic_entities(); + update_triggers(); + update_scripts(); + update_messages(); + update_menu_icons(); + step_current_game_mode(); + update_entities(); + func_80138198(); + func_8014A548(); + update_ambient_sounds(); + func_80149734(); + update_windows(); + update_curtains(); + + if (OVERRIDE_FLAG_CHECK(0x20)) { + temp80074182 = &D_800741A2; + + switch (*temp80074182) { + case 0: + OVERRIDE_FLAG_SET(0x200); + disable_player_input(); + temp800741A0 = &D_800741A0; + if (*temp800741A0 == 255) { + *temp80074182 = 1; + D_8009A690 = 3; + } else { + *temp800741A0 += 10; + if (*temp800741A0 > 255) { + *temp800741A0 = 255; + } + } + break; + case 1: + OVERRIDE_FLAG_SET(0x8); + temp8009A690 = &D_8009A690; + (*temp8009A690)--; + if (*temp8009A690 == 0) { + func_80149838(); + set_game_mode(0); + OVERRIDE_FLAG_UNSET(0x20); + } + break; + } + } else { + D_800741A0 = 0; + D_800741A2 = 0; + } + + if (OVERRIDE_FLAG_CHECK(0x100)) { + OVERRIDE_FLAG_SET(0x1000); + } else { + OVERRIDE_FLAG_UNSET(0x1000); + } + + if (OVERRIDE_FLAG_CHECK(0x200)) { + OVERRIDE_FLAG_SET(0x2000); + } else { + OVERRIDE_FLAG_UNSET(0x2000); + } + + if (OVERRIDE_FLAG_CHECK(0x400)) { + OVERRIDE_FLAG_SET(0x4000); + } else { + OVERRIDE_FLAG_UNSET(0x4000); + } + + if (OVERRIDE_FLAG_CHECK(0x800)) { + OVERRIDE_FLAG_SET(0x8000); + } else { + OVERRIDE_FLAG_UNSET(0x8000); + } + + rand_int(1); +} + +void gfx_task_background(void) { + DisplayContext** gDisplayContextPtr = &gDisplayContext; + Gfx** gfx = &gMasterGfxPos; + DisplayContext* dispContexts = D_80164000; + + *gDisplayContextPtr = &dispContexts[gCurrentDisplayContextIndex]; + *gfx = &(*gDisplayContextPtr)->backgroundGfx[0]; + + gfx_init_state(); + gfx_draw_background(); + + gDPFullSync((*gfx)++); + gSPEndDisplayList((*gfx)++); + + // TODO these << 3 >> 3 shouldn't be necessary. There's almost definitely something we're missing here... + ASSERT((s32)((u32)((*gfx) - (*gDisplayContextPtr)->backgroundGfx) << 3 >> 3) < ARRAY_COUNT((*gDisplayContextPtr)->backgroundGfx)); + + nuGfxTaskStart(&gDisplayContext->backgroundGfx[0], (gMasterGfxPos - gDisplayContext->backgroundGfx) << 3, + NU_GFX_UCODE_F3DEX2, NU_SC_NOSWAPBUFFER); +} INCLUDE_ASM(s32, "code_1b40_len_20b0", gfx_draw_frame); @@ -53,7 +182,7 @@ void load_engine_data(void) { dma_copy(&code_code_A5DD0_ROM_START, &code_code_A5DD0_ROM_END, &code_code_A5DD0_VRAM); dma_copy(&code_code_10CC10_ROM_START, &code_code_10CC10_ROM_END, &code_code_10CC10_VRAM); - D_8009A650[0] = 0; + gOverrideFlags = 0; (*gGameStatusPtr)->unk_79 = 0; (*gameStatusPtrTemp2)->enableBackground = 0; (*gGameStatusPtr)->musicEnabled = 1; @@ -107,46 +236,41 @@ void load_engine_data(void) { gameStatus3->unk_48[i] = 0xC; } - D_8009A650[0] |= 8; + OVERRIDE_FLAG_SET(0x8); set_game_mode(0); } -//weird ordering issue -#ifdef NON_MATCHING void func_80027088(s32 arg0) { switch (arg0) { case 0: D_8009A5D8 = arg0; - *D_8009A650 &= ~0xF00; + OVERRIDE_FLAG_UNSET(0xF00); resume_all_group(3); break; case 1: D_8009A5D8 = arg0; - *D_8009A650 &= ~0xE00; - *D_8009A650 |= 0x100; + OVERRIDE_FLAG_UNSET(0xE00); + OVERRIDE_FLAG_SET(0x100); suspend_all_group(1); break; case 2: D_8009A5D8 = arg0; - *D_8009A650 &= ~0xC00; - *D_8009A650 |= 0x300; + OVERRIDE_FLAG_UNSET(0xC00); + OVERRIDE_FLAG_SET(0x300); suspend_all_group(2); break; case 3: D_8009A5D8 = arg0; - *D_8009A650 &= ~0x800; - *D_8009A650 |= 0x700; + OVERRIDE_FLAG_UNSET(0x800); + OVERRIDE_FLAG_SET(0x700); suspend_all_group(2); break; case 4: D_8009A5D8 = arg0; - *D_8009A650 |= 0xF00; + OVERRIDE_FLAG_SET(0xF00); break; } } -#else -INCLUDE_ASM(void, "code_1b40_len_20b0", func_80027088, s32 arg0); -#endif s32 func_80027190(void) { return D_8009A5D8; @@ -162,7 +286,7 @@ void gfx_init_state(void) { gSPDisplayList(gMasterGfxPos++, OS_K0_TO_PHYSICAL(&D_80074210)); } #else -INCLUDE_ASM(s32, "code_1b40_len_20b0", gfx_init_state); +INCLUDE_ASM(void, "code_1b40_len_20b0", gfx_init_state); #endif INCLUDE_ASM(s32, "code_1b40_len_20b0", func_800271FC); @@ -177,4 +301,4 @@ INCLUDE_ASM(s32, "code_1b40_len_20b0", func_800279B4); INCLUDE_ASM(s32, "code_1b40_len_20b0", func_80027BAC); -INCLUDE_ASM(s32, "code_1b40_len_20b0", gfx_draw_background); +INCLUDE_ASM(void, "code_1b40_len_20b0", gfx_draw_background); diff --git a/src/code_3251D0.c b/src/code_3251D0.c index bfd1e75839..1bef3a81d9 100644 --- a/src/code_3251D0.c +++ b/src/code_3251D0.c @@ -68,13 +68,13 @@ ApiStatus func_802BD388(ScriptInstance* script, s32 isInitialCall) { ApiStatus func_802BD3E4(ScriptInstance* script, s32 isInitialCall) { func_80027088(2); - D_8009A650[0] |= 0x200000; + OVERRIDE_FLAG_SET(0x200000); return ApiStatus_DONE2; } ApiStatus func_802BD41C(ScriptInstance* script, s32 isInitialCall) { func_80027088(0); - D_8009A650[0] &= ~0x200000; + OVERRIDE_FLAG_UNSET(0x200000); return ApiStatus_DONE2; } diff --git a/src/code_43F0.c b/src/code_43F0.c index 556f169312..c63d58db1d 100644 --- a/src/code_43F0.c +++ b/src/code_43F0.c @@ -79,7 +79,27 @@ INCLUDE_ASM(s32, "code_43F0", _heap_free); INCLUDE_ASM(s32, "code_43F0", _heap_realloc); -INCLUDE_ASM(s32, "code_43F0", cosine); +f32 cosine(s16 arg0) { + s16 temp360; + s16 idx; + + temp360 = arg0 % 360; + + if (temp360 < 0) { + temp360 += 360; + } + + idx = temp360 % 180; + if (idx > 90) { + idx = 180 - idx; + } + + if (temp360 >= 180) { + return -D_80074274[idx]; + } else { + return D_80074274[idx]; + } +} s32 sign(s32 val) { s32 sign = -1; @@ -101,7 +121,12 @@ void mem_clear(s8* data, s32 numBytes) { } } -INCLUDE_ASM(s32, "code_43F0", transform_point); +void transform_point(Matrix4f mtx, f32 inX, f32 inY, f32 inZ, f32 inS, f32* outX, f32* outY, f32* outZ, f32* outS) { + *outX = ((mtx[0][0] * inX) + (mtx[1][0] * inY) + (mtx[2][0] * inZ) + mtx[3][0]); + *outY = ((mtx[0][1] * inX) + (mtx[1][1] * inY) + (mtx[2][1] * inZ) + mtx[3][1]); + *outZ = ((mtx[0][2] * inX) + (mtx[1][2] * inY) + (mtx[2][2] * inZ) + mtx[3][2]); + *outS = ((mtx[0][3] * inX) + (mtx[1][3] * inY) + (mtx[2][3] * inZ) + mtx[3][3]); +} void copy_matrix(Matrix4f* src, Matrix4f* dest) { bcopy(src, dest, sizeof(Matrix4f)); @@ -193,31 +218,27 @@ s32 func_80029994(s32 arg0) { return result; } -// Issue with the negation at the beginning -#ifdef NON_MATCHING s32 rand_int(s32 arg0) { - s32 ret; + s32 ret = 0; - if (arg0 < 0) { - arg0 = -arg0; - } + arg0 = abs(arg0); - ret = 0; if (arg0 != 0) { - if (arg0 == 1) { - return (func_80029994(1000) < 501) ^ 1; + switch (arg0) { + case 1: + ret = func_80029994(1000) > 500; + break; + default: + ret = func_80029994(arg0); + break; + case 100: + ret = func_80029994(1009) / 10; + break; } - if (arg0 != 100) { - return func_80029994(arg0); - } - ret = func_80029994(1009) / 10; } return ret; } -#else -INCLUDE_ASM(s32, "code_43F0", rand_int, s32 arg0); -#endif f32 signF(f32 val) { f32 sign; @@ -242,7 +263,32 @@ s32 round(f32 arg0) { } } -INCLUDE_ASM(f32, "code_43F0", clamp_angle, f32 theta); +f32 clamp_angle(f32 theta) { + if (fabsf(theta) > 3600.0f) { + s32 thetaInt = theta; + + if (thetaInt >= 0) { + thetaInt = -(thetaInt / 360 * 360) + thetaInt; + } + else { + thetaInt = -thetaInt; + thetaInt = (thetaInt / 360 * 360) - thetaInt; + } + + return thetaInt; + } + + do { + if (theta < 0.0f) { + theta += 360.0f; + } + if (theta >= 360.0f) { + theta -= 360.0f; + } + } while (!(theta >= 0.0f) || !(theta < 360.0f)); + + return theta; +} f32 get_clamped_angle_diff(f32 a, f32 b) { if (fabsf(b - a) >= 180.0f) { diff --git a/src/code_6240_len_c00.c b/src/code_6240_len_c00.c index 3c61e37825..2a80c64449 100644 --- a/src/code_6240_len_c00.c +++ b/src/code_6240_len_c00.c @@ -25,6 +25,8 @@ s32 get_spirits_rescued(void) { return ret; } +extern s32 D_800D95E8[]; + INCLUDE_ASM(s32, "code_6240_len_c00", fio_calc_header_checksum); INCLUDE_ASM(s32, "code_6240_len_c00", fio_validate_header_checksums); @@ -35,8 +37,11 @@ INCLUDE_ASM(s32, "code_6240_len_c00", fio_flush_backups); #ifdef NON_MATCHING s32 fio_calc_file_checksum(s32* saveData) { - u32 sum = 0; - u32 i = 0; + u32 sum; + u32 i; + + sum = 0; + i = 0; for (i = 0; i < 0x4E0; i++) { sum += saveData[i]; diff --git a/src/code_C50A0.c b/src/code_C50A0.c index c94e055145..8ad3360f82 100644 --- a/src/code_C50A0.c +++ b/src/code_C50A0.c @@ -91,9 +91,7 @@ void clear_item_entity_flags(s32 index, s32 flags) { void func_801341B0(s32 index) { ItemEntity* itemEntity = D_801565A0[index]; - s32* sym = D_8009A650; - - sym[0] |= 0x40; + OVERRIDE_FLAG_SET(0x40); itemEntity->flags |= 0x100; } diff --git a/src/code_F5750.c b/src/code_F5750.c index 581446f708..883088c38a 100644 --- a/src/code_F5750.c +++ b/src/code_F5750.c @@ -55,12 +55,12 @@ ApiStatus DisablePlayerInput(ScriptInstance* script, s32 isInitialCall) { if (playerStatus->actionState == ActionState_SPIN) { playerStatus->animFlags |= 0x40000; } - D_8009A650[0] |= 0x40; + OVERRIDE_FLAG_SET(0x40); } else { enable_player_input(); func_800EF600(); func_800E01DC(); - D_8009A650[0] &= ~0x40; + OVERRIDE_FLAG_UNSET(0x40); func_800E983C(); } return ApiStatus_DONE2; diff --git a/src/code_d610_len_1330.c b/src/code_d610_len_1330.c index 550635ad8b..78b7d869c7 100644 --- a/src/code_d610_len_1330.c +++ b/src/code_d610_len_1330.c @@ -1,5 +1,8 @@ #include "common.h" +extern s16 D_800A08F0; +extern s32 D_80077850[]; + INCLUDE_ASM(s32, "code_d610_len_1330", func_80032210); INCLUDE_ASM(s32, "code_d610_len_1330", func_800322DC); @@ -17,6 +20,11 @@ INCLUDE_ASM(s32, "code_d610_len_1330", create_camera_lead_player_mtx); void func_800334E8(void) { } -INCLUDE_ASM(s32, "code_d610_len_1330", set_game_mode); +void set_game_mode(s16 idx) { + D_800A08F0 = idx; + _set_game_mode(0, D_80077850[idx]); +} -INCLUDE_ASM(s32, "code_d610_len_1330", get_game_mode); +s16 get_game_mode(void) { + return D_800A08F0; +} diff --git a/src/code_e0b30_len_b80.c b/src/code_e0b30_len_b80.c index 6f62c039b0..80b173d0ec 100644 --- a/src/code_e0b30_len_b80.c +++ b/src/code_e0b30_len_b80.c @@ -291,8 +291,8 @@ void func_8014AE6C(void) { MusicPlayer* musicPlayer = &gMusicPlayers[0]; if ((*gGameStatusPtr)->demoState == 0) { - if (D_8009A650[0] & 0x20000) { - D_8009A650[0] &= ~0x20000; + if (OVERRIDE_FLAG_CHECK(0x20000)) { + OVERRIDE_FLAG_UNSET(0x20000); } else { musicPlayer->flags |= 8; _set_music_track(0, musicPlayer->unk_24, musicPlayer->unk_28, 0, 8); @@ -304,7 +304,7 @@ void func_8014AE6C(void) { void func_8014AEF8(void) { MusicPlayer* musicPlayer = &gMusicPlayers[0]; - if ((*gGameStatusPtr)->demoState == 0 && !(D_8009A650[0] & 0x20000)) { + if ((*gGameStatusPtr)->demoState == 0 && !OVERRIDE_FLAG_CHECK(0x20000)) { func_8005553C(0, 250); musicPlayer->unk_24 = musicPlayer->songID; musicPlayer->unk_28 = musicPlayer->variation; diff --git a/src/code_e940_len_290.c b/src/code_e940_len_290.c index 8cbc094d43..aa72cf1a53 100644 --- a/src/code_e940_len_290.c +++ b/src/code_e940_len_290.c @@ -1,7 +1,7 @@ #include "common.h" void begin_state_init(void) { - D_8009A650[0] |= 0x8; + OVERRIDE_FLAG_SET(0x8); (*gGameStatusPtr)->loadMenuState = 3; } @@ -15,7 +15,7 @@ void step_init_state(void) { return; } - D_8009A650[0] = 0; + gOverrideFlags = 0; (*gameStatusPtr)->areaID = 0; gameStatus->isBattle = 0; gameStatus->prevArea = -1; @@ -77,7 +77,7 @@ void step_init_state(void) { func_80056180(); } - D_8009A650[0] &= ~0x8; + OVERRIDE_FLAG_UNSET(0x8); set_game_mode(1); } diff --git a/src/code_ebd0_len_6a0.c b/src/code_ebd0_len_6a0.c index 073b6ca418..262739724b 100644 --- a/src/code_ebd0_len_6a0.c +++ b/src/code_ebd0_len_6a0.c @@ -1,4 +1,16 @@ -#include "code_ebd0_len_6a0.h" +#include "common.h" +#include "nu/nusys.h" + +void intro_logos_set_fade_alpha(s16 alpha); +void intro_logos_set_fade_color(s16 color); +s16 intro_logos_fade_in(s16 subtractAlpha); +s16 intro_logos_fade_out(s16 addAlpha); +void intro_logos_update_fade(void); + +extern s32* D_8009A658; +extern s32 D_800A0904; +extern s32 D_800A0908; +extern s16** D_800778A0; void intro_logos_set_fade_alpha(s16 alpha) { GameStatus* gameStatus = *gGameStatusPtr; @@ -51,7 +63,96 @@ void begin_state_battle(void) { D_800A0900 = 5; } +#ifdef NON_MATCHING +void step_battle(void) { + s8* temp800A0900 = &D_800A0900; + s32 phi_a0; + + if (*temp800A0900 == 5) { + if (D_8009A658[1] != D_8009A64C) { + return; + } + (*temp800A0900)--; + OVERRIDE_FLAG_SET(0x8); + nuContRmbForceStop(); + } + + if (*temp800A0900 >= 0) { + if (*temp800A0900 > 0) { + (*temp800A0900)--; + } else { + GameStatus* gameStatus; + + *temp800A0900 = -1; + nuGfxSetCfb(&D_800778A0, 2); + nuContRmbForceStopEnd(); + func_80149838(); + func_8003B1A8(); + (*gGameStatusPtr)->isBattle = TRUE; + allocate_hit_tables(); + func_8002D160(); + func_802B20B4(); + func_80149670(0); + + gameStatus = *gGameStatusPtr; + + // This part sucks + if (!(gameStatus->peachFlags & 1)) { + if (gBattleStatus.currentBattleSection != 0x26 || gBattleStatus.unk_47B != 0) { + phi_a0 = 5; + } else { + gameStatus->peachFlags |= 1; + phi_a0 = 6; + } + } else { + gameStatus->peachFlags |= 1; + phi_a0 = 6; + } + + func_802DD8F8(phi_a0); + + clear_model_data(); + func_80148040(); + use_default_background_settings(); + clear_entity_models(); + func_8011E224(); + clear_dynamic_entity_list(); + func_801452E8(0, 0); + func_80141100(); + reset_status_menu(); + clear_item_entity_data(); + clear_script_list(); + clear_npcs(); + clear_entity_data(1); + clear_trigger_data(); + dma_copy(&code_code_16C8E0_ROM_START, &code_code_16C8E0_ROM_END, &code_code_16C8E0_VRAM); + initialize_battle(); + func_802409F4(); + load_battle_section(); + D_800A0904 = gPlayerStatusPtr->animFlags; + gPlayerStatusPtr->animFlags &= ~0x40; + D_800A0908 = func_80027190(gPlayerStatusPtr); + func_80027088(0); + OVERRIDE_FLAG_UNSET(0x8); + + if (D_800A0900 >= 0) { + return; + } + } + } + + update_counters(); + update_battle_state(); + update_npcs(); + update_item_entities(); + update_effects(); + func_80116674(); + update_cameras(); +} +#else INCLUDE_ASM(s32, "code_ebd0_len_6a0", step_battle); +#endif + void func_80033B54(void) { draw_encounter_ui(); @@ -61,7 +162,7 @@ void func_80033B54(void) { } void func_80033B88(void) { - D_8009A650[0] |= 0x08; + OVERRIDE_FLAG_SET(0x8); nuContRmbForceStop(); D_800A0900 = 5; } diff --git a/src/code_ebd0_len_6a0.h b/src/code_ebd0_len_6a0.h deleted file mode 100644 index cde379c7fc..0000000000 --- a/src/code_ebd0_len_6a0.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _CODE_EBD0_LEN_6A0_H_ -#define _CODE_EBD0_LEN_6A0_H_ - -#include "common.h" - -void intro_logos_set_fade_alpha(s16 alpha); -void intro_logos_set_fade_color(s16 color); -s16 intro_logos_fade_in(s16 subtractAlpha); -s16 intro_logos_fade_out(s16 addAlpha); -void intro_logos_update_fade(void); - -#endif diff --git a/src/code_f270_len_1190.c b/src/code_f270_len_1190.c index a5bcd91aab..1b9be1371a 100644 --- a/src/code_f270_len_1190.c +++ b/src/code_f270_len_1190.c @@ -1,5 +1,9 @@ #include "common.h" +extern s8 D_800A0920; +extern s8 D_800A0921; +extern s16 D_800A0922; + void func_800343A4(); INCLUDE_ASM(s32, "code_f270_len_1190", begin_state_logos); @@ -12,14 +16,27 @@ void func_80034388(void) { INCLUDE_ASM(void, "code_f270_len_1190", func_800343A4); -INCLUDE_ASM(s32, "code_f270_len_1190", begin_state_pause_menu); +void begin_state_pause_menu(void) { + D_800A0921 = 0; + D_800A0922 = 0; + disable_player_input(); + func_80027088(3); + set_windows_visible(2); +} INCLUDE_ASM(s32, "code_f270_len_1190", step_pause_menu); void func_80034BF4(void) { } -INCLUDE_ASM(s32, "code_f270_len_1190", func_80034BFC); +void func_80034BFC(void) { + if (D_800A0922 > 0) { + D_800A0921 = 0; + } else { + D_800A0921 = 1; + } + D_800A0920 = 4; +} INCLUDE_ASM(s32, "code_f270_len_1190", func_80034C3C); diff --git a/src/code_f4c60_len_4300.c b/src/code_f4c60_len_4300.c index c5e4fa97ac..fd45617bfe 100644 --- a/src/code_f4c60_len_4300.c +++ b/src/code_f4c60_len_4300.c @@ -80,9 +80,9 @@ ApiStatus SetMessageImages(ScriptInstance* script, s32 isInitialCall) { ApiStatus func_802D0C94(ScriptInstance* script, s32 initialCall) { if (get_variable(script, *script->ptrReadPos) == 0) { - D_8009A650[0] |= 0x10; + OVERRIDE_FLAG_SET(0x10); } else { - D_8009A650[0] &= ~0x10; + OVERRIDE_FLAG_UNSET(0x10); } return ApiStatus_DONE2; } diff --git a/src/code_f8f60_len_1560.c b/src/code_f8f60_len_1560.c index 0cce21e6a5..02001e0205 100644 --- a/src/code_f8f60_len_1560.c +++ b/src/code_f8f60_len_1560.c @@ -400,11 +400,9 @@ ApiStatus func_802D585C(ScriptInstance* script, s32 initialCall) { s32 flags = get_variable(script, *ptrReadPos++); if (setMode) { - // Set flag - D_8009A650[0] |= flags; + OVERRIDE_FLAG_SET(flags); } else { - // Unset flag - D_8009A650[0] &= ~flags; + OVERRIDE_FLAG_UNSET(flags); } return ApiStatus_DONE2; diff --git a/src/code_fa4c0_len_3bf0.c b/src/code_fa4c0_len_3bf0.c index 35dc8f1a6a..ed4283c3d1 100644 --- a/src/code_fa4c0_len_3bf0.c +++ b/src/code_fa4c0_len_3bf0.c @@ -217,7 +217,7 @@ ApiStatus func_802D6954(ScriptInstance* script, s32 isInitialCall) { enable_player_input(); enable_player_static_collisions(); func_800EF600(); - D_8009A650[0] &= ~0x40; + OVERRIDE_FLAG_UNSET(0x40); return ApiStatus_DONE2; } diff --git a/src/world/area_dgb/dgb_04/C36530.c b/src/world/area_dgb/dgb_04/C36530.c index b89748b721..c8c6655814 100644 --- a/src/world/area_dgb/dgb_04/C36530.c +++ b/src/world/area_dgb/dgb_04/C36530.c @@ -44,7 +44,7 @@ INCLUDE_ASM(s32, "world/area_dgb/dgb_04/C36530", func_80241E3C_C3836C); INCLUDE_ASM(s32, "world/area_dgb/dgb_04/C36530", func_80242154_C38684); -#include "world/common/Set8009A650_40.inc.c" +#include "world/common/SetOverrideFlags_40.inc.c" INCLUDE_ASM(s32, "world/area_dgb/dgb_04/C36530", func_802423EC_C3891C); diff --git a/src/world/area_flo/flo_08/CAED40.c b/src/world/area_flo/flo_08/CAED40.c index 3e086b7897..6410e59bcb 100644 --- a/src/world/area_flo/flo_08/CAED40.c +++ b/src/world/area_flo/flo_08/CAED40.c @@ -1,6 +1,6 @@ #include "flo_08.h" -#include "world/common/Set8009A650_40.inc.c" +#include "world/common/SetOverrideFlags_40.inc.c" INCLUDE_ASM(s32, "world/area_flo/flo_08/CAED40", func_8024001C_CAED5C); diff --git a/src/world/area_flo/flo_16/CD1F10.c b/src/world/area_flo/flo_16/CD1F10.c index 8c0642d064..d50f9d866b 100644 --- a/src/world/area_flo/flo_16/CD1F10.c +++ b/src/world/area_flo/flo_16/CD1F10.c @@ -1,6 +1,6 @@ #include "flo_16.h" -#include "world/common/Set8009A650_40.inc.c" +#include "world/common/SetOverrideFlags_40.inc.c" INCLUDE_ASM(s32, "world/area_flo/flo_16/CD1F10", func_802400FC_CD1F2C); diff --git a/src/world/area_isk/isk_10/988B60.c b/src/world/area_isk/isk_10/988B60.c index 1e824d7009..f5433dc642 100644 --- a/src/world/area_isk/isk_10/988B60.c +++ b/src/world/area_isk/isk_10/988B60.c @@ -1,6 +1,6 @@ #include "isk_10.h" -#include "world/common/Set8009A650_40.inc.c" +#include "world/common/SetOverrideFlags_40.inc.c" INCLUDE_ASM(s32, "world/area_isk/isk_10/988B60", func_8024001C_988B7C); diff --git a/src/world/area_iwa/iwa_10/91E6D0.c b/src/world/area_iwa/iwa_10/91E6D0.c index 6e044a2995..d22c73a004 100644 --- a/src/world/area_iwa/iwa_10/91E6D0.c +++ b/src/world/area_iwa/iwa_10/91E6D0.c @@ -2,7 +2,7 @@ #include "common/UnkFloatFunc.inc.c" -#include "world/common/Set8009A650_40.inc.c" +#include "world/common/SetOverrideFlags_40.inc.c" INCLUDE_ASM(s32, "world/area_iwa/iwa_10/91E6D0", func_8024030C_91E87C); diff --git a/src/world/area_jan/jan_08/B5E910.c b/src/world/area_jan/jan_08/B5E910.c index 21b41cb0dc..473d8dad9b 100644 --- a/src/world/area_jan/jan_08/B5E910.c +++ b/src/world/area_jan/jan_08/B5E910.c @@ -1,6 +1,6 @@ #include "jan_08.h" -#include "world/common/Set8009A650_40.inc.c" +#include "world/common/SetOverrideFlags_40.inc.c" INCLUDE_ASM(s32, "world/area_jan/jan_08/B5E910", func_8024067C_B5E92C); diff --git a/src/world/area_kzn/kzn_04/C68440.c b/src/world/area_kzn/kzn_04/C68440.c index 4d036623ba..1f2a7f7b51 100644 --- a/src/world/area_kzn/kzn_04/C68440.c +++ b/src/world/area_kzn/kzn_04/C68440.c @@ -1,6 +1,6 @@ #include "kzn_04.h" -#include "world/common/Set8009A650_40.inc.c" +#include "world/common/SetOverrideFlags_40.inc.c" INCLUDE_ASM(s32, "world/area_kzn/kzn_04/C68440", func_8024032C_C6845C); diff --git a/src/world/area_kzn/kzn_09/C76CE0.c b/src/world/area_kzn/kzn_09/C76CE0.c index 0d06debe7a..d780ac7568 100644 --- a/src/world/area_kzn/kzn_09/C76CE0.c +++ b/src/world/area_kzn/kzn_09/C76CE0.c @@ -1,6 +1,6 @@ #include "kzn_09.h" -#include "world/common/Set8009A650_40.inc.c" +#include "world/common/SetOverrideFlags_40.inc.c" INCLUDE_ASM(s32, "world/area_kzn/kzn_09/C76CE0", func_8024001C_C76CFC); diff --git a/src/world/area_omo/omo_11/DDCFC0.c b/src/world/area_omo/omo_11/DDCFC0.c index d8eae6e498..1d3e990d42 100644 --- a/src/world/area_omo/omo_11/DDCFC0.c +++ b/src/world/area_omo/omo_11/DDCFC0.c @@ -1,6 +1,6 @@ #include "omo_11.h" -#include "world/common/Set8009A650_40.inc.c" +#include "world/common/SetOverrideFlags_40.inc.c" INCLUDE_ASM(s32, "world/area_omo/omo_11/DDCFC0", func_802407AC_DDCFDC); diff --git a/src/world/area_pra/pra_01/D4D060.c b/src/world/area_pra/pra_01/D4D060.c index 32fdb3c1fd..2003f48ec6 100644 --- a/src/world/area_pra/pra_01/D4D060.c +++ b/src/world/area_pra/pra_01/D4D060.c @@ -29,7 +29,7 @@ INCLUDE_ASM(s32, "world/area_pra/pra_01/D4D060", func_80240D3C_D4DD7C); INCLUDE_ASM(s32, "world/area_pra/pra_01/D4D060", func_80240F20_D4DF60); ApiStatus func_80240F60_D4DFA0(ScriptInstance* script, s32 isInitialCall) { - D_8009A650[0] &= ~0x80; + OVERRIDE_FLAG_UNSET(0x80); return ApiStatus_DONE2; } diff --git a/src/world/area_sam/sam_08/D2FC80.c b/src/world/area_sam/sam_08/D2FC80.c index ffa612bd65..0950957036 100644 --- a/src/world/area_sam/sam_08/D2FC80.c +++ b/src/world/area_sam/sam_08/D2FC80.c @@ -1,6 +1,6 @@ #include "sam_08.h" -#include "world/common/Set8009A650_40.inc.c" +#include "world/common/SetOverrideFlags_40.inc.c" INCLUDE_ASM(s32, "world/area_sam/sam_08/D2FC80", func_8024001C_D2FC9C); diff --git a/src/world/area_sbk/sbk_56/953FC0.c b/src/world/area_sbk/sbk_56/953FC0.c index ae7b982ef0..98249a3aca 100644 --- a/src/world/area_sbk/sbk_56/953FC0.c +++ b/src/world/area_sbk/sbk_56/953FC0.c @@ -6,7 +6,7 @@ INCLUDE_ASM(s32, "world/area_sbk/sbk_56/953FC0", func_80240038_953FF8); INCLUDE_ASM(s32, "world/area_sbk/sbk_56/953FC0", func_8024005C_95401C); -#include "world/common/Set8009A650_40.inc.c" +#include "world/common/SetOverrideFlags_40.inc.c" INCLUDE_ASM(s32, "world/area_sbk/sbk_56/953FC0", func_8024009C_95405C); diff --git a/src/world/area_tik/tik_07/879BE0.c b/src/world/area_tik/tik_07/879BE0.c index 9765a79049..0146842a7d 100644 --- a/src/world/area_tik/tik_07/879BE0.c +++ b/src/world/area_tik/tik_07/879BE0.c @@ -12,7 +12,7 @@ INCLUDE_ASM(s32, "world/area_tik/tik_07/879BE0", func_80240034_879C14); #include "world/common/SomeXYZFunc2.inc.c" -#include "world/common/Set8009A650_40.inc.c" +#include "world/common/SetOverrideFlags_40.inc.c" INCLUDE_ASM(s32, "world/area_tik/tik_07/879BE0", func_802402FC_879EDC); diff --git a/src/world/area_tik/tik_10/8866D0.c b/src/world/area_tik/tik_10/8866D0.c index d7d363b409..d5c2fdec98 100644 --- a/src/world/area_tik/tik_10/8866D0.c +++ b/src/world/area_tik/tik_10/8866D0.c @@ -2,7 +2,7 @@ INCLUDE_ASM(s32, "world/area_tik/tik_10/8866D0", func_80240310_8866D0); -#include "world/common/Set8009A650_40.inc.c" +#include "world/common/SetOverrideFlags_40.inc.c" INCLUDE_ASM(s32, "world/area_tik/tik_10/8866D0", func_8024069C_886A5C); diff --git a/src/world/area_tik/tik_12/8891C0.c b/src/world/area_tik/tik_12/8891C0.c index e675e57d2f..43b12e5416 100644 --- a/src/world/area_tik/tik_12/8891C0.c +++ b/src/world/area_tik/tik_12/8891C0.c @@ -10,7 +10,7 @@ INCLUDE_ASM(s32, "world/area_tik/tik_12/8891C0", func_80240960_889530); #include "world/common/CheckItemFlags40.inc.c" -#include "world/common/Set8009A650_40.inc.c" +#include "world/common/SetOverrideFlags_40.inc.c" INCLUDE_ASM(s32, "world/area_tik/tik_12/8891C0", func_80240C38_889808); diff --git a/src/world/area_tik/tik_17/892A50.c b/src/world/area_tik/tik_17/892A50.c index b532e247a9..8588723dd5 100644 --- a/src/world/area_tik/tik_17/892A50.c +++ b/src/world/area_tik/tik_17/892A50.c @@ -1,6 +1,6 @@ #include "tik_17.h" -#include "world/common/Set8009A650_40.inc.c" +#include "world/common/SetOverrideFlags_40.inc.c" INCLUDE_ASM(s32, "world/area_tik/tik_17/892A50", func_8024004C_892A6C); diff --git a/src/world/area_tik/tik_19/897BD0.c b/src/world/area_tik/tik_19/897BD0.c index b70a1dddb6..b2a48b1003 100644 --- a/src/world/area_tik/tik_19/897BD0.c +++ b/src/world/area_tik/tik_19/897BD0.c @@ -1,6 +1,6 @@ #include "tik_19.h" -#include "world/common/Set8009A650_40.inc.c" +#include "world/common/SetOverrideFlags_40.inc.c" INCLUDE_ASM(s32, "world/area_tik/tik_19/897BD0", func_8024060C_897BEC); diff --git a/src/world/common/Set8009A650_40.inc.c b/src/world/common/Set8009A650_40.inc.c deleted file mode 100644 index 267cfdfa48..0000000000 --- a/src/world/common/Set8009A650_40.inc.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "common.h" -#include "map.h" - -ApiStatus N(Set8009A650_40)(ScriptInstance* script, s32 isInitialCall) { - D_8009A650[0] |= 0x40; - return ApiStatus_DONE2; -} diff --git a/src/world/common/SetOverrideFlags_40.inc.c b/src/world/common/SetOverrideFlags_40.inc.c new file mode 100644 index 0000000000..3164bcfc3f --- /dev/null +++ b/src/world/common/SetOverrideFlags_40.inc.c @@ -0,0 +1,7 @@ +#include "common.h" +#include "map.h" + +ApiStatus N(SetOverrideFlags_40)(ScriptInstance* script, s32 isInitialCall) { + OVERRIDE_FLAG_SET(0x40); + return ApiStatus_DONE2; +} diff --git a/tools/m2ctx.py b/tools/m2ctx.py index 9b51292c47..fdc76539c1 100755 --- a/tools/m2ctx.py +++ b/tools/m2ctx.py @@ -59,7 +59,7 @@ def main(): output = [] for line in processed_lines: - if "__attribute__" not in line: + if "__attribute__" not in line and "__asm__" not in line: output.append(line) with open(os.path.join(root_dir, "ctx.c"), "w", encoding="UTF-8") as f: diff --git a/ver/us/asm/nonmatchings/code_10400_len_d30/func_800355D4.s b/ver/us/asm/nonmatchings/code_10400_len_d30/func_800355D4.s index 4183337fd6..fc944a7370 100644 --- a/ver/us/asm/nonmatchings/code_10400_len_d30/func_800355D4.s +++ b/ver/us/asm/nonmatchings/code_10400_len_d30/func_800355D4.s @@ -28,8 +28,8 @@ glabel func_800355D4 /* 10A28 80035628 0C04DF62 */ jal set_transition_stencil_zoom_0 /* 10A2C 8003562C 00000000 */ nop /* 10A30 80035630 24020001 */ addiu $v0, $zero, 1 -/* 10A34 80035634 3C04800A */ lui $a0, %hi(D_8009A650) -/* 10A38 80035638 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* 10A34 80035634 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* 10A38 80035638 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* 10A3C 8003563C 3C01800A */ lui $at, %hi(D_800A0930) /* 10A40 80035640 A0220930 */ sb $v0, %lo(D_800A0930)($at) /* 10A44 80035644 8C820000 */ lw $v0, ($a0) diff --git a/ver/us/asm/nonmatchings/code_10400_len_d30/func_80035660.s b/ver/us/asm/nonmatchings/code_10400_len_d30/func_80035660.s index 4251953073..4bf0c1160d 100644 --- a/ver/us/asm/nonmatchings/code_10400_len_d30/func_80035660.s +++ b/ver/us/asm/nonmatchings/code_10400_len_d30/func_80035660.s @@ -24,8 +24,8 @@ glabel func_80035660 /* 10AA8 800356A8 3C06FFFE */ lui $a2, 0xfffe /* 10AAC 800356AC 34C6FFFF */ ori $a2, $a2, 0xffff /* 10AB0 800356B0 0000202D */ daddu $a0, $zero, $zero -/* 10AB4 800356B4 3C05800A */ lui $a1, %hi(D_8009A650) -/* 10AB8 800356B8 24A5A650 */ addiu $a1, $a1, %lo(D_8009A650) +/* 10AB4 800356B4 3C05800A */ lui $a1, %hi(gOverrideFlags) +/* 10AB8 800356B8 24A5A650 */ addiu $a1, $a1, %lo(gOverrideFlags) /* 10ABC 800356BC 24030008 */ addiu $v1, $zero, 8 /* 10AC0 800356C0 8CA20000 */ lw $v0, ($a1) /* 10AC4 800356C4 240703E8 */ addiu $a3, $zero, 0x3e8 @@ -36,8 +36,8 @@ glabel func_80035660 /* 10AD8 800356D8 0C052A46 */ jal set_music_track /* 10ADC 800356DC 0080302D */ daddu $a2, $a0, $zero .L800356E0: -/* 10AE0 800356E0 3C02800A */ lui $v0, %hi(D_8009A650) -/* 10AE4 800356E4 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* 10AE0 800356E0 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 10AE4 800356E4 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* 10AE8 800356E8 8C430000 */ lw $v1, ($v0) /* 10AEC 800356EC 2404FFBF */ addiu $a0, $zero, -0x41 /* 10AF0 800356F0 00641824 */ and $v1, $v1, $a0 diff --git a/ver/us/asm/nonmatchings/code_10400_len_d30/func_80035704.s b/ver/us/asm/nonmatchings/code_10400_len_d30/func_80035704.s index 40a76ef136..28a81ce9c0 100644 --- a/ver/us/asm/nonmatchings/code_10400_len_d30/func_80035704.s +++ b/ver/us/asm/nonmatchings/code_10400_len_d30/func_80035704.s @@ -90,8 +90,8 @@ glabel L80035814_10C14 /* 10C20 80035820 24020003 */ addiu $v0, $zero, 3 /* 10C24 80035824 14620006 */ bne $v1, $v0, .L80035840 /* 10C28 80035828 00000000 */ nop -/* 10C2C 8003582C 3C03800A */ lui $v1, %hi(D_8009A650) -/* 10C30 80035830 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* 10C2C 8003582C 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* 10C30 80035830 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* 10C34 80035834 8C620000 */ lw $v0, ($v1) /* 10C38 80035838 34420008 */ ori $v0, $v0, 8 /* 10C3C 8003583C AC620000 */ sw $v0, ($v1) @@ -111,8 +111,8 @@ glabel L80035814_10C14 /* 10C70 80035870 A0C20000 */ sb $v0, ($a2) /* 10C74 80035874 0C0912C0 */ jal func_80244B00 /* 10C78 80035878 00000000 */ nop -/* 10C7C 8003587C 3C04800A */ lui $a0, %hi(D_8009A650) -/* 10C80 80035880 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* 10C7C 8003587C 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* 10C80 80035880 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* 10C84 80035884 8C820000 */ lw $v0, ($a0) /* 10C88 80035888 2403FFF7 */ addiu $v1, $zero, -9 /* 10C8C 8003588C 00431024 */ and $v0, $v0, $v1 diff --git a/ver/us/asm/nonmatchings/code_10400_len_d30/func_80035B40.s b/ver/us/asm/nonmatchings/code_10400_len_d30/func_80035B40.s index 6988e1ab5a..810b6c62c4 100644 --- a/ver/us/asm/nonmatchings/code_10400_len_d30/func_80035B40.s +++ b/ver/us/asm/nonmatchings/code_10400_len_d30/func_80035B40.s @@ -83,8 +83,8 @@ glabel L80035C2C_1102C /* 1103C 80035C3C 0C00CD3C */ jal set_game_mode /* 11040 80035C40 24040002 */ addiu $a0, $zero, 2 /* 11044 80035C44 3C04FFFE */ lui $a0, 0xfffe -/* 11048 80035C48 3C03800A */ lui $v1, %hi(D_8009A650) -/* 1104C 80035C4C 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* 11048 80035C48 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* 1104C 80035C4C 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* 11050 80035C50 8C620000 */ lw $v0, ($v1) /* 11054 80035C54 3484FFFF */ ori $a0, $a0, 0xffff /* 11058 80035C58 00441024 */ and $v0, $v0, $a0 diff --git a/ver/us/asm/nonmatchings/code_10400_len_d30/state_init_file_select.s b/ver/us/asm/nonmatchings/code_10400_len_d30/state_init_file_select.s index 0e3fcec2eb..40c457db2d 100644 --- a/ver/us/asm/nonmatchings/code_10400_len_d30/state_init_file_select.s +++ b/ver/us/asm/nonmatchings/code_10400_len_d30/state_init_file_select.s @@ -71,8 +71,8 @@ glabel state_init_file_select /* 10560 80035160 44812000 */ mtc1 $at, $f4 /* 10564 80035164 3C014316 */ lui $at, 0x4316 /* 10568 80035168 44813000 */ mtc1 $at, $f6 -/* 1056C 8003516C 3C04800A */ lui $a0, %hi(D_8009A650) -/* 10570 80035170 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* 1056C 8003516C 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* 10570 80035170 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* 10574 80035174 A600002C */ sh $zero, 0x2c($s0) /* 10578 80035178 A600002E */ sh $zero, 0x2e($s0) /* 1057C 8003517C A6000030 */ sh $zero, 0x30($s0) diff --git a/ver/us/asm/nonmatchings/code_10400_len_d30/state_step_language_select.s b/ver/us/asm/nonmatchings/code_10400_len_d30/state_step_language_select.s index 8d65237e3a..b1cd259ccd 100644 --- a/ver/us/asm/nonmatchings/code_10400_len_d30/state_step_language_select.s +++ b/ver/us/asm/nonmatchings/code_10400_len_d30/state_step_language_select.s @@ -67,8 +67,8 @@ glabel state_step_language_select /* 106B0 800352B0 A2320000 */ sb $s2, ($s1) .L800352B4: /* 106B4 800352B4 24020005 */ addiu $v0, $zero, 5 -/* 106B8 800352B8 3C04800A */ lui $a0, %hi(D_8009A650) -/* 106BC 800352BC 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* 106B8 800352B8 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* 106BC 800352BC 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* 106C0 800352C0 3C01800A */ lui $at, %hi(D_800A0930) /* 106C4 800352C4 A0220930 */ sb $v0, %lo(D_800A0930)($at) /* 106C8 800352C8 8C820000 */ lw $v0, ($a0) @@ -97,16 +97,16 @@ glabel state_step_language_select /* 10720 80035320 8C42A64C */ lw $v0, %lo(D_8009A64C)($v0) /* 10724 80035324 14620008 */ bne $v1, $v0, .L80035348 /* 10728 80035328 24040003 */ addiu $a0, $zero, 3 -/* 1072C 8003532C 3C02800A */ lui $v0, %hi(D_8009A650) -/* 10730 80035330 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* 1072C 8003532C 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 10730 80035330 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* 10734 80035334 8C430000 */ lw $v1, ($v0) /* 10738 80035338 2404FFF7 */ addiu $a0, $zero, -9 /* 1073C 8003533C 00641824 */ and $v1, $v1, $a0 /* 10740 80035340 0800D534 */ j .L800354D0 /* 10744 80035344 AC430000 */ sw $v1, ($v0) .L80035348: -/* 10748 80035348 3C02800A */ lui $v0, %hi(D_8009A650) -/* 1074C 8003534C 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* 10748 80035348 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 1074C 8003534C 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* 10750 80035350 8C430000 */ lw $v1, ($v0) /* 10754 80035354 34630008 */ ori $v1, $v1, 8 /* 10758 80035358 0C051FB1 */ jal set_windows_visible @@ -176,8 +176,8 @@ glabel state_step_language_select /* 10854 80035454 0C091238 */ jal func_802448E0 /* 10858 80035458 24040001 */ addiu $a0, $zero, 1 /* 1085C 8003545C 240400FF */ addiu $a0, $zero, 0xff -/* 10860 80035460 3C06800A */ lui $a2, %hi(D_8009A650) -/* 10864 80035464 24C6A650 */ addiu $a2, $a2, %lo(D_8009A650) +/* 10860 80035460 3C06800A */ lui $a2, %hi(gOverrideFlags) +/* 10864 80035464 24C6A650 */ addiu $a2, $a2, %lo(gOverrideFlags) /* 10868 80035468 2403FFF7 */ addiu $v1, $zero, -9 /* 1086C 8003546C 8CC20000 */ lw $v0, ($a2) /* 10870 80035470 3C05437F */ lui $a1, 0x437f diff --git a/ver/us/asm/nonmatchings/code_105F90/func_802E4C10.s b/ver/us/asm/nonmatchings/code_105F90/func_802E4C10.s index 6663512d1b..4b93dd6965 100644 --- a/ver/us/asm/nonmatchings/code_105F90/func_802E4C10.s +++ b/ver/us/asm/nonmatchings/code_105F90/func_802E4C10.s @@ -77,8 +77,8 @@ glabel func_802E4C10 /* 106580 802E4D00 24420001 */ addiu $v0, $v0, 1 /* 106584 802E4D04 A2020001 */ sb $v0, 1($s0) .L802E4D08: -/* 106588 802E4D08 3C02800A */ lui $v0, %hi(D_8009A650) -/* 10658C 802E4D0C 8C42A650 */ lw $v0, %lo(D_8009A650)($v0) +/* 106588 802E4D08 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 10658C 802E4D0C 8C42A650 */ lw $v0, %lo(gOverrideFlags)($v0) /* 106590 802E4D10 14400017 */ bnez $v0, .L802E4D70 /* 106594 802E4D14 00000000 */ nop /* 106598 802E4D18 92020002 */ lbu $v0, 2($s0) @@ -122,8 +122,8 @@ glabel func_802E4C10 /* 10662C 802E4DAC 34420200 */ ori $v0, $v0, 0x200 /* 106630 802E4DB0 0C009C22 */ jal func_80027088 /* 106634 802E4DB4 AC620004 */ sw $v0, 4($v1) -/* 106638 802E4DB8 3C03800A */ lui $v1, %hi(D_8009A650) -/* 10663C 802E4DBC 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* 106638 802E4DB8 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* 10663C 802E4DBC 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* 106640 802E4DC0 8C620000 */ lw $v0, ($v1) /* 106644 802E4DC4 34420040 */ ori $v0, $v0, 0x40 /* 106648 802E4DC8 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/code_105F90/func_802E4E04.s b/ver/us/asm/nonmatchings/code_105F90/func_802E4E04.s index c32474b358..d5be07cd4c 100644 --- a/ver/us/asm/nonmatchings/code_105F90/func_802E4E04.s +++ b/ver/us/asm/nonmatchings/code_105F90/func_802E4E04.s @@ -332,8 +332,8 @@ glabel L802E52AC_106B2C /* 106B40 802E52C0 0C009C22 */ jal func_80027088 /* 106B44 802E52C4 0000202D */ daddu $a0, $zero, $zero /* 106B48 802E52C8 0220202D */ daddu $a0, $s1, $zero -/* 106B4C 802E52CC 3C05800A */ lui $a1, %hi(D_8009A650) -/* 106B50 802E52D0 24A5A650 */ addiu $a1, $a1, %lo(D_8009A650) +/* 106B4C 802E52CC 3C05800A */ lui $a1, %hi(gOverrideFlags) +/* 106B50 802E52D0 24A5A650 */ addiu $a1, $a1, %lo(gOverrideFlags) /* 106B54 802E52D4 8CA20000 */ lw $v0, ($a1) /* 106B58 802E52D8 2403FFBF */ addiu $v1, $zero, -0x41 /* 106B5C 802E52DC 00431024 */ and $v0, $v0, $v1 diff --git a/ver/us/asm/nonmatchings/code_10A230/func_802E8ADC.s b/ver/us/asm/nonmatchings/code_10A230/func_802E8ADC.s index 691dc4bb2b..4dd5e39664 100644 --- a/ver/us/asm/nonmatchings/code_10A230/func_802E8ADC.s +++ b/ver/us/asm/nonmatchings/code_10A230/func_802E8ADC.s @@ -12,8 +12,8 @@ glabel func_802E8ADC /* 10A378 802E8AF8 30420001 */ andi $v0, $v0, 1 /* 10A37C 802E8AFC 10400027 */ beqz $v0, .L802E8B9C /* 10A380 802E8B00 2404FFBF */ addiu $a0, $zero, -0x41 -/* 10A384 802E8B04 3C02800A */ lui $v0, %hi(D_8009A650) -/* 10A388 802E8B08 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* 10A384 802E8B04 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 10A388 802E8B08 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* 10A38C 802E8B0C 8C430000 */ lw $v1, ($v0) /* 10A390 802E8B10 8CE40000 */ lw $a0, ($a3) /* 10A394 802E8B14 34630040 */ ori $v1, $v1, 0x40 @@ -53,8 +53,8 @@ glabel func_802E8ADC /* 10A414 802E8B94 080BA2EC */ j .L802E8BB0 /* 10A418 802E8B98 00000000 */ nop .L802E8B9C: -/* 10A41C 802E8B9C 3C02800A */ lui $v0, %hi(D_8009A650) -/* 10A420 802E8BA0 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* 10A41C 802E8B9C 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 10A420 802E8BA0 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* 10A424 802E8BA4 8C430000 */ lw $v1, ($v0) /* 10A428 802E8BA8 00641824 */ and $v1, $v1, $a0 /* 10A42C 802E8BAC AC430000 */ sw $v1, ($v0) diff --git a/ver/us/asm/nonmatchings/code_111f0_len_860/func_80035EEC.s b/ver/us/asm/nonmatchings/code_111f0_len_860/func_80035EEC.s index 889b742f1a..ecd5237b24 100644 --- a/ver/us/asm/nonmatchings/code_111f0_len_860/func_80035EEC.s +++ b/ver/us/asm/nonmatchings/code_111f0_len_860/func_80035EEC.s @@ -101,8 +101,8 @@ glabel func_80035EEC /* 1144C 8003604C 8C44006C */ lw $a0, 0x6c($v0) /* 11450 80036050 14400026 */ bnez $v0, .L800360EC /* 11454 80036054 00000000 */ nop -/* 11458 80036058 3C05800A */ lui $a1, %hi(D_8009A650) -/* 1145C 8003605C 24A5A650 */ addiu $a1, $a1, %lo(D_8009A650) +/* 11458 80036058 3C05800A */ lui $a1, %hi(gOverrideFlags) +/* 1145C 8003605C 24A5A650 */ addiu $a1, $a1, %lo(gOverrideFlags) /* 11460 80036060 2404FFF7 */ addiu $a0, $zero, -9 /* 11464 80036064 8CA20000 */ lw $v0, ($a1) /* 11468 80036068 96030000 */ lhu $v1, ($s0) diff --git a/ver/us/asm/nonmatchings/code_111f0_len_860/func_8003617C.s b/ver/us/asm/nonmatchings/code_111f0_len_860/func_8003617C.s index 19d0dfe56f..1b378acdf3 100644 --- a/ver/us/asm/nonmatchings/code_111f0_len_860/func_8003617C.s +++ b/ver/us/asm/nonmatchings/code_111f0_len_860/func_8003617C.s @@ -46,8 +46,8 @@ glabel L800361B4_115B4 /* 11600 80036200 0800D8FA */ j .L800363E8 /* 11604 80036204 A4620000 */ sh $v0, ($v1) glabel L80036208_11608 -/* 11608 80036208 3C03800A */ lui $v1, %hi(D_8009A650) -/* 1160C 8003620C 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* 11608 80036208 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* 1160C 8003620C 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* 11610 80036210 8C620000 */ lw $v0, ($v1) /* 11614 80036214 34420008 */ ori $v0, $v0, 8 /* 11618 80036218 0C018028 */ jal nuContRmbForceStop @@ -134,8 +134,8 @@ glabel L800362F8_116F8 /* 11744 80036344 8C44006C */ lw $a0, 0x6c($v0) /* 11748 80036348 14400027 */ bnez $v0, .L800363E8 /* 1174C 8003634C 2405FFF7 */ addiu $a1, $zero, -9 -/* 11750 80036350 3C04800A */ lui $a0, %hi(D_8009A650) -/* 11754 80036354 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* 11750 80036350 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* 11754 80036354 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* 11758 80036358 3C06800A */ lui $a2, %hi(D_800A0944) /* 1175C 8003635C 24C60944 */ addiu $a2, $a2, %lo(D_800A0944) /* 11760 80036360 8C820000 */ lw $v0, ($a0) diff --git a/ver/us/asm/nonmatchings/code_111f0_len_860/func_8003646C.s b/ver/us/asm/nonmatchings/code_111f0_len_860/func_8003646C.s index e67cf700b2..b15c79ed51 100644 --- a/ver/us/asm/nonmatchings/code_111f0_len_860/func_8003646C.s +++ b/ver/us/asm/nonmatchings/code_111f0_len_860/func_8003646C.s @@ -27,8 +27,8 @@ glabel func_8003646C /* 118C0 800364C0 0800D984 */ j .L80036610 /* 118C4 800364C4 00000000 */ nop .L800364C8: -/* 118C8 800364C8 3C03800A */ lui $v1, %hi(D_8009A650) -/* 118CC 800364CC 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* 118C8 800364C8 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* 118CC 800364CC 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* 118D0 800364D0 8C620000 */ lw $v0, ($v1) /* 118D4 800364D4 34420008 */ ori $v0, $v0, 8 /* 118D8 800364D8 0C018028 */ jal nuContRmbForceStop @@ -78,8 +78,8 @@ glabel func_8003646C /* 11978 80036578 8C44006C */ lw $a0, 0x6c($v0) /* 1197C 8003657C 1440002C */ bnez $v0, .L80036630 /* 11980 80036580 00000000 */ nop -/* 11984 80036584 3C05800A */ lui $a1, %hi(D_8009A650) -/* 11988 80036588 24A5A650 */ addiu $a1, $a1, %lo(D_8009A650) +/* 11984 80036584 3C05800A */ lui $a1, %hi(gOverrideFlags) +/* 11988 80036588 24A5A650 */ addiu $a1, $a1, %lo(gOverrideFlags) /* 1198C 8003658C 2404FFF7 */ addiu $a0, $zero, -9 /* 11990 80036590 8CA20000 */ lw $v0, ($a1) /* 11994 80036594 96030000 */ lhu $v1, ($s0) diff --git a/ver/us/asm/nonmatchings/code_11a50_len_7a0/step_intro.s b/ver/us/asm/nonmatchings/code_11a50_len_7a0/step_intro.s index 50f0cbc88a..388e754baa 100644 --- a/ver/us/asm/nonmatchings/code_11a50_len_7a0/step_intro.s +++ b/ver/us/asm/nonmatchings/code_11a50_len_7a0/step_intro.s @@ -133,8 +133,8 @@ glabel L8003696C_11D6C /* 11E18 80036A18 0800DB5E */ j L80036D78_12178 /* 11E1C 80036A1C 00000000 */ nop glabel L80036A20_11E20 -/* 11E20 80036A20 3C04800A */ lui $a0, %hi(D_8009A650) -/* 11E24 80036A24 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* 11E20 80036A20 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* 11E24 80036A24 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* 11E28 80036A28 8C820000 */ lw $v0, ($a0) /* 11E2C 80036A2C 24030004 */ addiu $v1, $zero, 4 /* 11E30 80036A30 3C01800A */ lui $at, %hi(D_800A0950) @@ -155,8 +155,8 @@ glabel L80036A5C_11E5C /* 11E68 80036A68 2442FFFF */ addiu $v0, $v0, -1 /* 11E6C 80036A6C 1C4000C2 */ bgtz $v0, L80036D78_12178 /* 11E70 80036A70 AC620000 */ sw $v0, ($v1) -/* 11E74 80036A74 3C04800A */ lui $a0, %hi(D_8009A650) -/* 11E78 80036A78 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* 11E74 80036A74 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* 11E78 80036A78 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* 11E7C 80036A7C 8C820000 */ lw $v0, ($a0) /* 11E80 80036A80 2403FFF7 */ addiu $v1, $zero, -9 /* 11E84 80036A84 00431024 */ and $v0, $v0, $v1 @@ -285,8 +285,8 @@ glabel L80036C40_12040 /* 1205C 80036C5C AC820000 */ sw $v0, ($a0) /* 12060 80036C60 240200FF */ addiu $v0, $zero, 0xff .L80036C64: -/* 12064 80036C64 3C04800A */ lui $a0, %hi(D_8009A650) -/* 12068 80036C68 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* 12064 80036C64 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* 12068 80036C68 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* 1206C 80036C6C 2405FFF7 */ addiu $a1, $zero, -9 /* 12070 80036C70 3C03800A */ lui $v1, %hi(D_800A0958) /* 12074 80036C74 94630958 */ lhu $v1, %lo(D_800A0958)($v1) diff --git a/ver/us/asm/nonmatchings/code_121f0_len_1290/begin_state_title_screen.s b/ver/us/asm/nonmatchings/code_121f0_len_1290/begin_state_title_screen.s index d6ca97acce..d2fee83099 100644 --- a/ver/us/asm/nonmatchings/code_121f0_len_1290/begin_state_title_screen.s +++ b/ver/us/asm/nonmatchings/code_121f0_len_1290/begin_state_title_screen.s @@ -14,8 +14,8 @@ glabel D_8009839C glabel begin_state_title_screen /* 121F0 80036DF0 27BDFFC8 */ addiu $sp, $sp, -0x38 /* 121F4 80036DF4 AFB20028 */ sw $s2, 0x28($sp) -/* 121F8 80036DF8 3C12800A */ lui $s2, %hi(D_8009A650) -/* 121FC 80036DFC 2652A650 */ addiu $s2, $s2, %lo(D_8009A650) +/* 121F8 80036DF8 3C12800A */ lui $s2, %hi(gOverrideFlags) +/* 121FC 80036DFC 2652A650 */ addiu $s2, $s2, %lo(gOverrideFlags) /* 12200 80036E00 24020001 */ addiu $v0, $zero, 1 /* 12204 80036E04 AFBF002C */ sw $ra, 0x2c($sp) /* 12208 80036E08 AFB10024 */ sw $s1, 0x24($sp) diff --git a/ver/us/asm/nonmatchings/code_121f0_len_1290/step_title_screen.s b/ver/us/asm/nonmatchings/code_121f0_len_1290/step_title_screen.s index 58d325e2a8..68be6bf5a5 100644 --- a/ver/us/asm/nonmatchings/code_121f0_len_1290/step_title_screen.s +++ b/ver/us/asm/nonmatchings/code_121f0_len_1290/step_title_screen.s @@ -42,8 +42,8 @@ glabel step_title_screen /* 12528 80037128 00400008 */ jr $v0 /* 1252C 8003712C 00000000 */ nop glabel L80037130_12530 -/* 12530 80037130 3C04800A */ lui $a0, %hi(D_8009A650) -/* 12534 80037134 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* 12530 80037130 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* 12534 80037134 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* 12538 80037138 8C820000 */ lw $v0, ($a0) /* 1253C 8003713C 24030003 */ addiu $v1, $zero, 3 /* 12540 80037140 3C01800A */ lui $at, %hi(D_800A0970) @@ -83,8 +83,8 @@ glabel L80037184_12584 /* 125C0 800371C0 A08200AF */ sb $v0, 0xaf($a0) .L800371C4: /* 125C4 800371C4 24040006 */ addiu $a0, $zero, 6 -/* 125C8 800371C8 3C02800A */ lui $v0, %hi(D_8009A650) -/* 125CC 800371CC 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* 125C8 800371C8 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 125CC 800371CC 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* 125D0 800371D0 8C430000 */ lw $v1, ($v0) /* 125D4 800371D4 2405FFF7 */ addiu $a1, $zero, -9 /* 125D8 800371D8 00651824 */ and $v1, $v1, $a1 @@ -208,8 +208,8 @@ glabel L8003733C_1273C /* 1278C 8003738C 1440000A */ bnez $v0, .L800373B8 /* 12790 80037390 24020003 */ addiu $v0, $zero, 3 /* 12794 80037394 A06200AF */ sb $v0, 0xaf($v1) -/* 12798 80037398 3C03800A */ lui $v1, %hi(D_8009A650) -/* 1279C 8003739C 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* 12798 80037398 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* 1279C 8003739C 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* 127A0 800373A0 8C620000 */ lw $v0, ($v1) /* 127A4 800373A4 34420008 */ ori $v0, $v0, 8 /* 127A8 800373A8 AC620000 */ sw $v0, ($v1) @@ -234,8 +234,8 @@ glabel L8003733C_1273C /* 127EC 800373EC 1440001F */ bnez $v0, .L8003746C /* 127F0 800373F0 2462FFFF */ addiu $v0, $v1, -1 /* 127F4 800373F4 24020003 */ addiu $v0, $zero, 3 -/* 127F8 800373F8 3C03800A */ lui $v1, %hi(D_8009A650) -/* 127FC 800373FC 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* 127F8 800373F8 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* 127FC 800373FC 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* 12800 80037400 A08200AF */ sb $v0, 0xaf($a0) /* 12804 80037404 8C620000 */ lw $v0, ($v1) /* 12808 80037408 34420008 */ ori $v0, $v0, 8 @@ -248,8 +248,8 @@ glabel L8003733C_1273C /* 12820 80037420 2484419C */ addiu $a0, $a0, %lo(gGameStatusPtr) /* 12824 80037424 8C830000 */ lw $v1, ($a0) /* 12828 80037428 A06200AF */ sb $v0, 0xaf($v1) -/* 1282C 8003742C 3C03800A */ lui $v1, %hi(D_8009A650) -/* 12830 80037430 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* 1282C 8003742C 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* 12830 80037430 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* 12834 80037434 8C620000 */ lw $v0, ($v1) /* 12838 80037438 34420008 */ ori $v0, $v0, 8 /* 1283C 8003743C AC620000 */ sw $v0, ($v1) @@ -290,8 +290,8 @@ glabel L80037450_12850 /* 128B8 800374B8 24040001 */ addiu $a0, $zero, 1 /* 128BC 800374BC 0C051CFC */ jal clear_windows /* 128C0 800374C0 00000000 */ nop -/* 128C4 800374C4 3C04800A */ lui $a0, %hi(D_8009A650) -/* 128C8 800374C8 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* 128C4 800374C4 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* 128C8 800374C8 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* 128CC 800374CC 2403FFF7 */ addiu $v1, $zero, -9 /* 128D0 800374D0 8C820000 */ lw $v0, ($a0) /* 128D4 800374D4 8E050000 */ lw $a1, ($s0) @@ -337,8 +337,8 @@ glabel L80037450_12850 /* 12964 80037564 0800DD64 */ j .L80037590 /* 12968 80037568 00000000 */ nop glabel L8003756C_1296C -/* 1296C 8003756C 3C02800A */ lui $v0, %hi(D_8009A650) -/* 12970 80037570 8C42A650 */ lw $v0, %lo(D_8009A650)($v0) +/* 1296C 8003756C 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 12970 80037570 8C42A650 */ lw $v0, %lo(gOverrideFlags)($v0) /* 12974 80037574 30420008 */ andi $v0, $v0, 8 /* 12978 80037578 14400005 */ bnez $v0, .L80037590 /* 1297C 8003757C 00000000 */ nop diff --git a/ver/us/asm/nonmatchings/code_13480_len_3f0/next_demo_scene.s b/ver/us/asm/nonmatchings/code_13480_len_3f0/next_demo_scene.s index 45cacc8e69..a77ab6139a 100644 --- a/ver/us/asm/nonmatchings/code_13480_len_3f0/next_demo_scene.s +++ b/ver/us/asm/nonmatchings/code_13480_len_3f0/next_demo_scene.s @@ -55,8 +55,8 @@ glabel L8003817C_1357C /* 13594 80038194 8E030000 */ lw $v1, ($s0) /* 13598 80038198 24020003 */ addiu $v0, $zero, 3 /* 1359C 8003819C A06200AC */ sb $v0, 0xac($v1) -/* 135A0 800381A0 3C03800A */ lui $v1, %hi(D_8009A650) -/* 135A4 800381A4 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* 135A0 800381A0 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* 135A4 800381A4 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* 135A8 800381A8 8C620000 */ lw $v0, ($v1) /* 135AC 800381AC 34420008 */ ori $v0, $v0, 8 /* 135B0 800381B0 0C00CE1D */ jal intro_logos_update_fade @@ -93,8 +93,8 @@ glabel L800381C8_135C8 /* 13624 80038224 8E020000 */ lw $v0, ($s0) /* 13628 80038228 A0400078 */ sb $zero, 0x78($v0) /* 1362C 8003822C 8E020000 */ lw $v0, ($s0) -/* 13630 80038230 3C04800A */ lui $a0, %hi(D_8009A650) -/* 13634 80038234 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* 13630 80038230 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* 13634 80038234 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* 13638 80038238 A040007D */ sb $zero, 0x7d($v0) /* 1363C 8003823C 8C820000 */ lw $v0, ($a0) /* 13640 80038240 2403FFF7 */ addiu $v1, $zero, -9 diff --git a/ver/us/asm/nonmatchings/code_13870_len_6980/func_80039DA4.s b/ver/us/asm/nonmatchings/code_13870_len_6980/func_80039DA4.s index 66cd740741..af44c45e64 100644 --- a/ver/us/asm/nonmatchings/code_13870_len_6980/func_80039DA4.s +++ b/ver/us/asm/nonmatchings/code_13870_len_6980/func_80039DA4.s @@ -20,8 +20,8 @@ glabel func_80039DA4 /* 151E0 80039DE0 000218C0 */ sll $v1, $v0, 3 /* 151E4 80039DE4 00431021 */ addu $v0, $v0, $v1 /* 151E8 80039DE8 000210C0 */ sll $v0, $v0, 3 -/* 151EC 80039DEC 3C03800A */ lui $v1, %hi(D_8009A650) -/* 151F0 80039DF0 8C63A650 */ lw $v1, %lo(D_8009A650)($v1) +/* 151EC 80039DEC 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* 151F0 80039DF0 8C63A650 */ lw $v1, %lo(gOverrideFlags)($v1) /* 151F4 80039DF4 3063C000 */ andi $v1, $v1, 0xc000 /* 151F8 80039DF8 1460006C */ bnez $v1, .L80039FAC /* 151FC 80039DFC 00441021 */ addu $v0, $v0, $a0 diff --git a/ver/us/asm/nonmatchings/code_13870_len_6980/update_npcs.s b/ver/us/asm/nonmatchings/code_13870_len_6980/update_npcs.s index 69a3896d31..80eae11875 100644 --- a/ver/us/asm/nonmatchings/code_13870_len_6980/update_npcs.s +++ b/ver/us/asm/nonmatchings/code_13870_len_6980/update_npcs.s @@ -14,8 +14,8 @@ glabel update_npcs /* 14D54 80039954 AFB00030 */ sw $s0, 0x30($sp) /* 14D58 80039958 F7B40048 */ sdc1 $f20, 0x48($sp) /* 14D5C 8003995C 8E630004 */ lw $v1, 4($s3) -/* 14D60 80039960 3C04800A */ lui $a0, %hi(D_8009A650) -/* 14D64 80039964 8C84A650 */ lw $a0, %lo(D_8009A650)($a0) +/* 14D60 80039960 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* 14D64 80039964 8C84A650 */ lw $a0, %lo(gOverrideFlags)($a0) /* 14D68 80039968 00621824 */ and $v1, $v1, $v0 /* 14D6C 8003996C 30840C00 */ andi $a0, $a0, 0xc00 /* 14D70 80039970 14800104 */ bnez $a0, .L80039D84 diff --git a/ver/us/asm/nonmatchings/code_16c8e0/func_80240AA8.s b/ver/us/asm/nonmatchings/code_16c8e0/func_80240AA8.s index f2272247f3..5c4aa76305 100644 --- a/ver/us/asm/nonmatchings/code_16c8e0/func_80240AA8.s +++ b/ver/us/asm/nonmatchings/code_16c8e0/func_80240AA8.s @@ -49,15 +49,15 @@ glabel func_80240AA8 /* 16F430 80240B50 E502002C */ swc1 $f2, 0x2c($t0) /* 16F434 80240B54 10400007 */ beqz $v0, .L80240B74 /* 16F438 80240B58 E5040030 */ swc1 $f4, 0x30($t0) -/* 16F43C 80240B5C 3C03800A */ lui $v1, %hi(D_8009A650) -/* 16F440 80240B60 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* 16F43C 80240B5C 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* 16F440 80240B60 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* 16F444 80240B64 8C620000 */ lw $v0, ($v1) /* 16F448 80240B68 34420080 */ ori $v0, $v0, 0x80 /* 16F44C 80240B6C 080902E3 */ j .L80240B8C /* 16F450 80240B70 AC620000 */ sw $v0, ($v1) .L80240B74: -/* 16F454 80240B74 3C02800A */ lui $v0, %hi(D_8009A650) -/* 16F458 80240B78 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* 16F454 80240B74 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 16F458 80240B78 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* 16F45C 80240B7C 8C430000 */ lw $v1, ($v0) /* 16F460 80240B80 2404FF7F */ addiu $a0, $zero, -0x81 /* 16F464 80240B84 00641824 */ and $v1, $v1, $a0 diff --git a/ver/us/asm/nonmatchings/code_16c8e0/initialize_battle.s b/ver/us/asm/nonmatchings/code_16c8e0/initialize_battle.s index 00dac330dd..c4d0ae2e99 100644 --- a/ver/us/asm/nonmatchings/code_16c8e0/initialize_battle.s +++ b/ver/us/asm/nonmatchings/code_16c8e0/initialize_battle.s @@ -14,8 +14,8 @@ glabel initialize_battle /* 16CA34 8023E154 3C06800E */ lui $a2, %hi(gBattleStatus) /* 16CA38 8023E158 24C6C070 */ addiu $a2, $a2, %lo(gBattleStatus) /* 16CA3C 8023E15C 24C5003C */ addiu $a1, $a2, 0x3c -/* 16CA40 8023E160 3C04800A */ lui $a0, %hi(D_8009A650) -/* 16CA44 8023E164 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* 16CA40 8023E160 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* 16CA44 8023E164 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* 16CA48 8023E168 AFBF0024 */ sw $ra, 0x24($sp) /* 16CA4C 8023E16C AFB20018 */ sw $s2, 0x18($sp) /* 16CA50 8023E170 AFB00010 */ sw $s0, 0x10($sp) diff --git a/ver/us/asm/nonmatchings/code_181810/ActorSpeak.s b/ver/us/asm/nonmatchings/code_181810/ActorSpeak.s index 4aef8a79f6..dbc93dd85b 100644 --- a/ver/us/asm/nonmatchings/code_181810/ActorSpeak.s +++ b/ver/us/asm/nonmatchings/code_181810/ActorSpeak.s @@ -117,8 +117,8 @@ glabel ActorSpeak /* 1819C4 802530E4 AC24FA60 */ sw $a0, %lo(gSpeakingActorPrintCtx)($at) /* 1819C8 802530E8 0C0496AE */ jal clamp_printer_coords /* 1819CC 802530EC 00000000 */ nop -/* 1819D0 802530F0 3C03800A */ lui $v1, %hi(D_8009A650) -/* 1819D4 802530F4 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* 1819D0 802530F0 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* 1819D4 802530F4 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* 1819D8 802530F8 AE600070 */ sw $zero, 0x70($s3) /* 1819DC 802530FC 8C620000 */ lw $v0, ($v1) /* 1819E0 80253100 3C06802A */ lui $a2, %hi(gSpeakingActorTalkAnim) @@ -231,8 +231,8 @@ glabel ActorSpeak /* 181B6C 8025328C 0C03A6CC */ jal decrement_status_menu_disabled /* 181B70 80253290 00000000 */ nop /* 181B74 80253294 24020001 */ addiu $v0, $zero, 1 -/* 181B78 80253298 3C03800A */ lui $v1, %hi(D_8009A650) -/* 181B7C 8025329C 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* 181B78 80253298 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* 181B7C 8025329C 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* 181B80 802532A0 8C640000 */ lw $a0, ($v1) /* 181B84 802532A4 2405FFEF */ addiu $a1, $zero, -0x11 /* 181B88 802532A8 00852024 */ and $a0, $a0, $a1 diff --git a/ver/us/asm/nonmatchings/code_181810/EndActorSpeech.s b/ver/us/asm/nonmatchings/code_181810/EndActorSpeech.s index 59ad1f59ea..2c437171d9 100644 --- a/ver/us/asm/nonmatchings/code_181810/EndActorSpeech.s +++ b/ver/us/asm/nonmatchings/code_181810/EndActorSpeech.s @@ -151,8 +151,8 @@ glabel EndActorSpeech /* 181DD8 802534F8 0C03A6CC */ jal decrement_status_menu_disabled /* 181DDC 802534FC 00000000 */ nop /* 181DE0 80253500 24020001 */ addiu $v0, $zero, 1 -/* 181DE4 80253504 3C03800A */ lui $v1, %hi(D_8009A650) -/* 181DE8 80253508 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* 181DE4 80253504 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* 181DE8 80253508 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* 181DEC 8025350C 8C640000 */ lw $a0, ($v1) /* 181DF0 80253510 2405FFEF */ addiu $a1, $zero, -0x11 /* 181DF4 80253514 00852024 */ and $a0, $a0, $a1 diff --git a/ver/us/asm/nonmatchings/code_1a1f0_len_5390/update_encounters_neutral.s b/ver/us/asm/nonmatchings/code_1a1f0_len_5390/update_encounters_neutral.s index 55900a1fa5..90e044451b 100644 --- a/ver/us/asm/nonmatchings/code_1a1f0_len_5390/update_encounters_neutral.s +++ b/ver/us/asm/nonmatchings/code_1a1f0_len_5390/update_encounters_neutral.s @@ -100,8 +100,8 @@ glabel update_encounters_neutral /* 1AD00 8003F900 8262000A */ lb $v0, 0xa($s3) /* 1AD04 8003F904 10400059 */ beqz $v0, .L8003FA6C /* 1AD08 8003F908 9263000A */ lbu $v1, 0xa($s3) -/* 1AD0C 8003F90C 3C02800A */ lui $v0, %hi(D_8009A650) -/* 1AD10 8003F910 8C42A650 */ lw $v0, %lo(D_8009A650)($v0) +/* 1AD0C 8003F90C 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 1AD10 8003F910 8C42A650 */ lw $v0, %lo(gOverrideFlags)($v0) /* 1AD14 8003F914 30420040 */ andi $v0, $v0, 0x40 /* 1AD18 8003F918 14400002 */ bnez $v0, .L8003F924 /* 1AD1C 8003F91C 2462FFFF */ addiu $v0, $v1, -1 @@ -230,8 +230,8 @@ glabel update_encounters_neutral /* 1AEEC 8003FAEC 922300B4 */ lbu $v1, 0xb4($s1) /* 1AEF0 8003FAF0 50400030 */ beql $v0, $zero, .L8003FBB4 /* 1AEF4 8003FAF4 3C030020 */ lui $v1, 0x20 -/* 1AEF8 8003FAF8 3C02800A */ lui $v0, %hi(D_8009A650) -/* 1AEFC 8003FAFC 8C42A650 */ lw $v0, %lo(D_8009A650)($v0) +/* 1AEF8 8003FAF8 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 1AEFC 8003FAFC 8C42A650 */ lw $v0, %lo(gOverrideFlags)($v0) /* 1AF00 8003FB00 30420040 */ andi $v0, $v0, 0x40 /* 1AF04 8003FB04 54400005 */ bnel $v0, $zero, .L8003FB1C /* 1AF08 8003FB08 0000102D */ daddu $v0, $zero, $zero @@ -431,8 +431,8 @@ glabel update_encounters_neutral /* 1B1D4 8003FDD4 00431024 */ and $v0, $v0, $v1 /* 1B1D8 8003FDD8 144002BB */ bnez $v0, .L800408C8 /* 1B1DC 8003FDDC 00000000 */ nop -/* 1B1E0 8003FDE0 3C04800A */ lui $a0, %hi(D_8009A650) -/* 1B1E4 8003FDE4 8C84A650 */ lw $a0, %lo(D_8009A650)($a0) +/* 1B1E0 8003FDE0 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* 1B1E4 8003FDE4 8C84A650 */ lw $a0, %lo(gOverrideFlags)($a0) /* 1B1E8 8003FDE8 30820040 */ andi $v0, $a0, 0x40 /* 1B1EC 8003FDEC 144002B6 */ bnez $v0, .L800408C8 /* 1B1F0 8003FDF0 24020009 */ addiu $v0, $zero, 9 diff --git a/ver/us/asm/nonmatchings/code_1b40_len_20b0/func_80027088.s b/ver/us/asm/nonmatchings/code_1b40_len_20b0/func_80027088.s deleted file mode 100644 index d3066091e1..0000000000 --- a/ver/us/asm/nonmatchings/code_1b40_len_20b0/func_80027088.s +++ /dev/null @@ -1,84 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -.section .rodata - -glabel jtbl_80097D48 -.word L800270B4_24B4, L800270E4_24E4, L8002710C_250C, L80027134_2534, L80027168_2568, 0 - -.section .text - -glabel func_80027088 -/* 2488 80027088 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 248C 8002708C 0080282D */ daddu $a1, $a0, $zero -/* 2490 80027090 2CA20005 */ sltiu $v0, $a1, 5 -/* 2494 80027094 1040003B */ beqz $v0, .L80027184 -/* 2498 80027098 AFBF0010 */ sw $ra, 0x10($sp) -/* 249C 8002709C 00051080 */ sll $v0, $a1, 2 -/* 24A0 800270A0 3C018009 */ lui $at, %hi(jtbl_80097D48) -/* 24A4 800270A4 00220821 */ addu $at, $at, $v0 -/* 24A8 800270A8 8C227D48 */ lw $v0, %lo(jtbl_80097D48)($at) -/* 24AC 800270AC 00400008 */ jr $v0 -/* 24B0 800270B0 00000000 */ nop -glabel L800270B4_24B4 -/* 24B4 800270B4 24040003 */ addiu $a0, $zero, 3 -/* 24B8 800270B8 3C02800A */ lui $v0, %hi(D_8009A650) -/* 24BC 800270BC 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) -/* 24C0 800270C0 3C01800A */ lui $at, %hi(D_8009A5D8) -/* 24C4 800270C4 AC25A5D8 */ sw $a1, %lo(D_8009A5D8)($at) -/* 24C8 800270C8 8C430000 */ lw $v1, ($v0) -/* 24CC 800270CC 2405F0FF */ addiu $a1, $zero, -0xf01 -/* 24D0 800270D0 00651824 */ and $v1, $v1, $a1 -/* 24D4 800270D4 0C0B1192 */ jal resume_all_group -/* 24D8 800270D8 AC430000 */ sw $v1, ($v0) -/* 24DC 800270DC 08009C61 */ j .L80027184 -/* 24E0 800270E0 00000000 */ nop -glabel L800270E4_24E4 -/* 24E4 800270E4 24040001 */ addiu $a0, $zero, 1 -/* 24E8 800270E8 3C02800A */ lui $v0, %hi(D_8009A650) -/* 24EC 800270EC 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) -/* 24F0 800270F0 3C01800A */ lui $at, %hi(D_8009A5D8) -/* 24F4 800270F4 AC25A5D8 */ sw $a1, %lo(D_8009A5D8)($at) -/* 24F8 800270F8 8C430000 */ lw $v1, ($v0) -/* 24FC 800270FC 2405F1FF */ addiu $a1, $zero, -0xe01 -/* 2500 80027100 00651824 */ and $v1, $v1, $a1 -/* 2504 80027104 08009C56 */ j .L80027158 -/* 2508 80027108 34630100 */ ori $v1, $v1, 0x100 -glabel L8002710C_250C -/* 250C 8002710C 24040002 */ addiu $a0, $zero, 2 -/* 2510 80027110 3C02800A */ lui $v0, %hi(D_8009A650) -/* 2514 80027114 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) -/* 2518 80027118 3C01800A */ lui $at, %hi(D_8009A5D8) -/* 251C 8002711C AC25A5D8 */ sw $a1, %lo(D_8009A5D8)($at) -/* 2520 80027120 8C430000 */ lw $v1, ($v0) -/* 2524 80027124 2405F3FF */ addiu $a1, $zero, -0xc01 -/* 2528 80027128 00651824 */ and $v1, $v1, $a1 -/* 252C 8002712C 08009C56 */ j .L80027158 -/* 2530 80027130 34630300 */ ori $v1, $v1, 0x300 -glabel L80027134_2534 -/* 2534 80027134 24040002 */ addiu $a0, $zero, 2 -/* 2538 80027138 3C02800A */ lui $v0, %hi(D_8009A650) -/* 253C 8002713C 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) -/* 2540 80027140 3C01800A */ lui $at, %hi(D_8009A5D8) -/* 2544 80027144 AC25A5D8 */ sw $a1, %lo(D_8009A5D8)($at) -/* 2548 80027148 8C430000 */ lw $v1, ($v0) -/* 254C 8002714C 2405F7FF */ addiu $a1, $zero, -0x801 -/* 2550 80027150 00651824 */ and $v1, $v1, $a1 -/* 2554 80027154 34630700 */ ori $v1, $v1, 0x700 -.L80027158: -/* 2558 80027158 0C0B117A */ jal suspend_all_group -/* 255C 8002715C AC430000 */ sw $v1, ($v0) -/* 2560 80027160 08009C61 */ j .L80027184 -/* 2564 80027164 00000000 */ nop -glabel L80027168_2568 -/* 2568 80027168 3C03800A */ lui $v1, %hi(D_8009A650) -/* 256C 8002716C 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) -/* 2570 80027170 8C620000 */ lw $v0, ($v1) -/* 2574 80027174 3C01800A */ lui $at, %hi(D_8009A5D8) -/* 2578 80027178 AC25A5D8 */ sw $a1, %lo(D_8009A5D8)($at) -/* 257C 8002717C 34420F00 */ ori $v0, $v0, 0xf00 -/* 2580 80027180 AC620000 */ sw $v0, ($v1) -.L80027184: -/* 2584 80027184 8FBF0010 */ lw $ra, 0x10($sp) -/* 2588 80027188 03E00008 */ jr $ra -/* 258C 8002718C 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/ver/us/asm/nonmatchings/code_1b40_len_20b0/gfx_draw_background.s b/ver/us/asm/nonmatchings/code_1b40_len_20b0/gfx_draw_background.s index eb6166e3cb..a1f0315e5d 100644 --- a/ver/us/asm/nonmatchings/code_1b40_len_20b0/gfx_draw_background.s +++ b/ver/us/asm/nonmatchings/code_1b40_len_20b0/gfx_draw_background.s @@ -336,8 +336,8 @@ glabel gfx_draw_background /* 3724 80028324 0800A1E4 */ j .L80028790 /* 3728 80028328 00000000 */ nop .L8002832C: -/* 372C 8002832C 3C02800A */ lui $v0, %hi(D_8009A650) -/* 3730 80028330 8C42A650 */ lw $v0, %lo(D_8009A650)($v0) +/* 372C 8002832C 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 3730 80028330 8C42A650 */ lw $v0, %lo(gOverrideFlags)($v0) /* 3734 80028334 30420008 */ andi $v0, $v0, 8 /* 3738 80028338 1040000E */ beqz $v0, .L80028374 /* 373C 8002833C 3C05FF10 */ lui $a1, 0xff10 diff --git a/ver/us/asm/nonmatchings/code_1b40_len_20b0/gfx_draw_frame.s b/ver/us/asm/nonmatchings/code_1b40_len_20b0/gfx_draw_frame.s index f39e8d8a02..e4f29864ac 100644 --- a/ver/us/asm/nonmatchings/code_1b40_len_20b0/gfx_draw_frame.s +++ b/ver/us/asm/nonmatchings/code_1b40_len_20b0/gfx_draw_frame.s @@ -8,8 +8,8 @@ glabel gfx_draw_frame /* 1F14 80026B14 3C05800A */ lui $a1, %hi(gMasterGfxPos) /* 1F18 80026B18 24A5A66C */ addiu $a1, $a1, %lo(gMasterGfxPos) /* 1F1C 80026B1C AFB00010 */ sw $s0, 0x10($sp) -/* 1F20 80026B20 3C10800A */ lui $s0, %hi(D_8009A650) -/* 1F24 80026B24 2610A650 */ addiu $s0, $s0, %lo(D_8009A650) +/* 1F20 80026B20 3C10800A */ lui $s0, %hi(gOverrideFlags) +/* 1F24 80026B24 2610A650 */ addiu $s0, $s0, %lo(gOverrideFlags) /* 1F28 80026B28 AFBF0018 */ sw $ra, 0x18($sp) /* 1F2C 80026B2C AFB10014 */ sw $s1, 0x14($sp) /* 1F30 80026B30 3C018007 */ lui $at, %hi(gMatrixListPos) @@ -77,8 +77,8 @@ glabel gfx_draw_frame /* 201C 80026C1C 24040001 */ addiu $a0, $zero, 1 /* 2020 80026C20 3C100010 */ lui $s0, 0x10 .L80026C24: -/* 2024 80026C24 3C11800A */ lui $s1, %hi(D_8009A650) -/* 2028 80026C28 2631A650 */ addiu $s1, $s1, %lo(D_8009A650) +/* 2024 80026C24 3C11800A */ lui $s1, %hi(gOverrideFlags) +/* 2028 80026C28 2631A650 */ addiu $s1, $s1, %lo(gOverrideFlags) /* 202C 80026C2C 8E220000 */ lw $v0, ($s1) /* 2030 80026C30 36100010 */ ori $s0, $s0, 0x10 /* 2034 80026C34 00501024 */ and $v0, $v0, $s0 diff --git a/ver/us/asm/nonmatchings/code_1b40_len_20b0/gfx_task_background.s b/ver/us/asm/nonmatchings/code_1b40_len_20b0/gfx_task_background.s deleted file mode 100644 index 6f61f5a95a..0000000000 --- a/ver/us/asm/nonmatchings/code_1b40_len_20b0/gfx_task_background.s +++ /dev/null @@ -1,77 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel gfx_task_background -/* 1DEC 800269EC 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 1DF0 800269F0 AFB20018 */ sw $s2, 0x18($sp) -/* 1DF4 800269F4 3C120001 */ lui $s2, 1 -/* 1DF8 800269F8 36520630 */ ori $s2, $s2, 0x630 -/* 1DFC 800269FC AFB10014 */ sw $s1, 0x14($sp) -/* 1E00 80026A00 3C11800A */ lui $s1, %hi(gDisplayContext) -/* 1E04 80026A04 2631A674 */ addiu $s1, $s1, %lo(gDisplayContext) -/* 1E08 80026A08 3C048007 */ lui $a0, %hi(gCurrentDisplayContextIndex) -/* 1E0C 80026A0C 8C8441F4 */ lw $a0, %lo(gCurrentDisplayContextIndex)($a0) -/* 1E10 80026A10 3C058016 */ lui $a1, %hi(D_80164000) -/* 1E14 80026A14 24A54000 */ addiu $a1, $a1, %lo(D_80164000) -/* 1E18 80026A18 AFB00010 */ sw $s0, 0x10($sp) -/* 1E1C 80026A1C 3C10800A */ lui $s0, %hi(gMasterGfxPos) -/* 1E20 80026A20 2610A66C */ addiu $s0, $s0, %lo(gMasterGfxPos) -/* 1E24 80026A24 AFBF001C */ sw $ra, 0x1c($sp) -/* 1E28 80026A28 00041040 */ sll $v0, $a0, 1 -/* 1E2C 80026A2C 00441021 */ addu $v0, $v0, $a0 -/* 1E30 80026A30 000210C0 */ sll $v0, $v0, 3 -/* 1E34 80026A34 00441021 */ addu $v0, $v0, $a0 -/* 1E38 80026A38 00021980 */ sll $v1, $v0, 6 -/* 1E3C 80026A3C 00431021 */ addu $v0, $v0, $v1 -/* 1E40 80026A40 00021080 */ sll $v0, $v0, 2 -/* 1E44 80026A44 00441023 */ subu $v0, $v0, $a0 -/* 1E48 80026A48 00021100 */ sll $v0, $v0, 4 -/* 1E4C 80026A4C 00451021 */ addu $v0, $v0, $a1 -/* 1E50 80026A50 AE220000 */ sw $v0, ($s1) -/* 1E54 80026A54 00521021 */ addu $v0, $v0, $s2 -/* 1E58 80026A58 0C009C68 */ jal gfx_init_state -/* 1E5C 80026A5C AE020000 */ sw $v0, ($s0) -/* 1E60 80026A60 0C009F84 */ jal gfx_draw_background -/* 1E64 80026A64 00000000 */ nop -/* 1E68 80026A68 8E030000 */ lw $v1, ($s0) -/* 1E6C 80026A6C 3C02E900 */ lui $v0, 0xe900 -/* 1E70 80026A70 0060202D */ daddu $a0, $v1, $zero -/* 1E74 80026A74 24630008 */ addiu $v1, $v1, 8 -/* 1E78 80026A78 AE030000 */ sw $v1, ($s0) -/* 1E7C 80026A7C AC820000 */ sw $v0, ($a0) -/* 1E80 80026A80 24620008 */ addiu $v0, $v1, 8 -/* 1E84 80026A84 AC800004 */ sw $zero, 4($a0) -/* 1E88 80026A88 3C04DF00 */ lui $a0, 0xdf00 -/* 1E8C 80026A8C AE020000 */ sw $v0, ($s0) -/* 1E90 80026A90 AC640000 */ sw $a0, ($v1) -/* 1E94 80026A94 AC600004 */ sw $zero, 4($v1) -/* 1E98 80026A98 8E230000 */ lw $v1, ($s1) -/* 1E9C 80026A9C 00521023 */ subu $v0, $v0, $s2 -/* 1EA0 80026AA0 00431023 */ subu $v0, $v0, $v1 -/* 1EA4 80026AA4 000210C2 */ srl $v0, $v0, 3 -/* 1EA8 80026AA8 28420200 */ slti $v0, $v0, 0x200 -/* 1EAC 80026AAC 14400003 */ bnez $v0, .L80026ABC -/* 1EB0 80026AB0 3C040001 */ lui $a0, 1 -.L80026AB4: -/* 1EB4 80026AB4 08009AAD */ j .L80026AB4 -/* 1EB8 80026AB8 00000000 */ nop -.L80026ABC: -/* 1EBC 80026ABC 34840630 */ ori $a0, $a0, 0x630 -/* 1EC0 80026AC0 0000302D */ daddu $a2, $zero, $zero -/* 1EC4 80026AC4 00C0382D */ daddu $a3, $a2, $zero -/* 1EC8 80026AC8 3C05800A */ lui $a1, %hi(gMasterGfxPos) -/* 1ECC 80026ACC 8CA5A66C */ lw $a1, %lo(gMasterGfxPos)($a1) -/* 1ED0 80026AD0 3C02800A */ lui $v0, %hi(gDisplayContext) -/* 1ED4 80026AD4 8C42A674 */ lw $v0, %lo(gDisplayContext)($v0) -/* 1ED8 80026AD8 00A42823 */ subu $a1, $a1, $a0 -/* 1EDC 80026ADC 00A22823 */ subu $a1, $a1, $v0 -/* 1EE0 80026AE0 000528C3 */ sra $a1, $a1, 3 -/* 1EE4 80026AE4 00442021 */ addu $a0, $v0, $a0 -/* 1EE8 80026AE8 0C00B331 */ jal nuGfxTaskStart -/* 1EEC 80026AEC 000528C0 */ sll $a1, $a1, 3 -/* 1EF0 80026AF0 8FBF001C */ lw $ra, 0x1c($sp) -/* 1EF4 80026AF4 8FB20018 */ lw $s2, 0x18($sp) -/* 1EF8 80026AF8 8FB10014 */ lw $s1, 0x14($sp) -/* 1EFC 80026AFC 8FB00010 */ lw $s0, 0x10($sp) -/* 1F00 80026B00 03E00008 */ jr $ra -/* 1F04 80026B04 27BD0020 */ addiu $sp, $sp, 0x20 diff --git a/ver/us/asm/nonmatchings/code_1b40_len_20b0/step_game_loop.s b/ver/us/asm/nonmatchings/code_1b40_len_20b0/step_game_loop.s deleted file mode 100644 index 565dd869d4..0000000000 --- a/ver/us/asm/nonmatchings/code_1b40_len_20b0/step_game_loop.s +++ /dev/null @@ -1,187 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel step_game_loop -/* 1B40 80026740 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 1B44 80026744 AFBF0018 */ sw $ra, 0x18($sp) -/* 1B48 80026748 AFB10014 */ sw $s1, 0x14($sp) -/* 1B4C 8002674C 0C00A21D */ jal update_input -/* 1B50 80026750 AFB00010 */ sw $s0, 0x10($sp) -/* 1B54 80026754 3C038007 */ lui $v1, %hi(gGameStatusPtr) -/* 1B58 80026758 8C63419C */ lw $v1, %lo(gGameStatusPtr)($v1) -/* 1B5C 8002675C 3C040CDF */ lui $a0, 0xcdf -/* 1B60 80026760 94620134 */ lhu $v0, 0x134($v1) -/* 1B64 80026764 3C108011 */ lui $s0, %hi(gPlayerData) -/* 1B68 80026768 2610F290 */ addiu $s0, $s0, %lo(gPlayerData) -/* 1B6C 8002676C 24420001 */ addiu $v0, $v0, 1 -/* 1B70 80026770 A4620134 */ sh $v0, 0x134($v1) -/* 1B74 80026774 8E0202BC */ lw $v0, 0x2bc($s0) -/* 1B78 80026778 3484E5FF */ ori $a0, $a0, 0xe5ff -/* 1B7C 8002677C 24420002 */ addiu $v0, $v0, 2 -/* 1B80 80026780 AE0202BC */ sw $v0, 0x2bc($s0) -/* 1B84 80026784 0082102B */ sltu $v0, $a0, $v0 -/* 1B88 80026788 54400001 */ bnel $v0, $zero, .L80026790 -/* 1B8C 8002678C AE0402BC */ sw $a0, 0x2bc($s0) -.L80026790: -/* 1B90 80026790 0C00A3E3 */ jal update_max_rumble_duration -/* 1B94 80026794 00000000 */ nop -/* 1B98 80026798 3C048007 */ lui $a0, %hi(D_80074021) -/* 1B9C 8002679C 24844021 */ addiu $a0, $a0, %lo(D_80074021) -/* 1BA0 800267A0 80820000 */ lb $v0, ($a0) -/* 1BA4 800267A4 90830000 */ lbu $v1, ($a0) -/* 1BA8 800267A8 10400008 */ beqz $v0, .L800267CC -/* 1BAC 800267AC 2462FFFF */ addiu $v0, $v1, -1 -/* 1BB0 800267B0 A0820000 */ sb $v0, ($a0) -/* 1BB4 800267B4 00021600 */ sll $v0, $v0, 0x18 -/* 1BB8 800267B8 14400087 */ bnez $v0, .L800269D8 -/* 1BBC 800267BC 00000000 */ nop -/* 1BC0 800267C0 3C028007 */ lui $v0, %hi(D_80074020) -/* 1BC4 800267C4 90424020 */ lbu $v0, %lo(D_80074020)($v0) -/* 1BC8 800267C8 A0820000 */ sb $v0, ($a0) -.L800267CC: -/* 1BCC 800267CC 0C046EBA */ jal func_8011BAE8 -/* 1BD0 800267D0 00000000 */ nop -/* 1BD4 800267D4 0C00E15F */ jal func_8003857C -/* 1BD8 800267D8 00000000 */ nop -/* 1BDC 800267DC 0C048D01 */ jal update_dynamic_entities -/* 1BE0 800267E0 00000000 */ nop -/* 1BE4 800267E4 0C051618 */ jal update_triggers -/* 1BE8 800267E8 00000000 */ nop -/* 1BEC 800267EC 0C0B0F5D */ jal update_scripts -/* 1BF0 800267F0 00000000 */ nop -/* 1BF4 800267F4 0C048DF6 */ jal update_messages -/* 1BF8 800267F8 00000000 */ nop -/* 1BFC 800267FC 0C050584 */ jal update_menu_icons -/* 1C00 80026800 00000000 */ nop -/* 1C04 80026804 0C044B9E */ jal step_current_game_mode -/* 1C08 80026808 00000000 */ nop -/* 1C0C 8002680C 0C043DB4 */ jal update_entities -/* 1C10 80026810 00000000 */ nop -/* 1C14 80026814 0C04E066 */ jal func_80138198 -/* 1C18 80026818 00000000 */ nop -/* 1C1C 8002681C 0C052952 */ jal func_8014A548 -/* 1C20 80026820 00000000 */ nop -/* 1C24 80026824 0C051C99 */ jal update_ambient_sounds -/* 1C28 80026828 00000000 */ nop -/* 1C2C 8002682C 0C0525CD */ jal func_80149734 -/* 1C30 80026830 00000000 */ nop -/* 1C34 80026834 0C051D05 */ jal update_windows -/* 1C38 80026838 00000000 */ nop -/* 1C3C 8002683C 0C00AE9E */ jal update_curtains -/* 1C40 80026840 00000000 */ nop -/* 1C44 80026844 3C10800A */ lui $s0, %hi(D_8009A650) -/* 1C48 80026848 2610A650 */ addiu $s0, $s0, %lo(D_8009A650) -/* 1C4C 8002684C 8E040000 */ lw $a0, ($s0) -/* 1C50 80026850 30820020 */ andi $v0, $a0, 0x20 -/* 1C54 80026854 10400035 */ beqz $v0, .L8002692C -/* 1C58 80026858 00000000 */ nop -/* 1C5C 8002685C 3C118007 */ lui $s1, %hi(D_800741A2) -/* 1C60 80026860 263141A2 */ addiu $s1, $s1, %lo(D_800741A2) -/* 1C64 80026864 86230000 */ lh $v1, ($s1) -/* 1C68 80026868 10600005 */ beqz $v1, .L80026880 -/* 1C6C 8002686C 24020001 */ addiu $v0, $zero, 1 -/* 1C70 80026870 1062001C */ beq $v1, $v0, .L800268E4 -/* 1C74 80026874 34840008 */ ori $a0, $a0, 8 -/* 1C78 80026878 08009A4F */ j .L8002693C -/* 1C7C 8002687C 00000000 */ nop -.L80026880: -/* 1C80 80026880 34820200 */ ori $v0, $a0, 0x200 -/* 1C84 80026884 0C03805E */ jal disable_player_input -/* 1C88 80026888 AE020000 */ sw $v0, ($s0) -/* 1C8C 8002688C 3C048007 */ lui $a0, %hi(D_800741A0) -/* 1C90 80026890 248441A0 */ addiu $a0, $a0, %lo(D_800741A0) -/* 1C94 80026894 240500FF */ addiu $a1, $zero, 0xff -/* 1C98 80026898 84820000 */ lh $v0, ($a0) -/* 1C9C 8002689C 94830000 */ lhu $v1, ($a0) -/* 1CA0 800268A0 14450008 */ bne $v0, $a1, .L800268C4 -/* 1CA4 800268A4 2462000A */ addiu $v0, $v1, 0xa -/* 1CA8 800268A8 24020001 */ addiu $v0, $zero, 1 -/* 1CAC 800268AC A6220000 */ sh $v0, ($s1) -/* 1CB0 800268B0 24020003 */ addiu $v0, $zero, 3 -/* 1CB4 800268B4 3C01800A */ lui $at, %hi(D_8009A690) -/* 1CB8 800268B8 A422A690 */ sh $v0, %lo(D_8009A690)($at) -/* 1CBC 800268BC 08009A4F */ j .L8002693C -/* 1CC0 800268C0 00000000 */ nop -.L800268C4: -/* 1CC4 800268C4 A4820000 */ sh $v0, ($a0) -/* 1CC8 800268C8 00021400 */ sll $v0, $v0, 0x10 -/* 1CCC 800268CC 00021403 */ sra $v0, $v0, 0x10 -/* 1CD0 800268D0 28420100 */ slti $v0, $v0, 0x100 -/* 1CD4 800268D4 50400019 */ beql $v0, $zero, .L8002693C -/* 1CD8 800268D8 A4850000 */ sh $a1, ($a0) -/* 1CDC 800268DC 08009A4F */ j .L8002693C -/* 1CE0 800268E0 00000000 */ nop -.L800268E4: -/* 1CE4 800268E4 3C02800A */ lui $v0, %hi(D_8009A690) -/* 1CE8 800268E8 2442A690 */ addiu $v0, $v0, %lo(D_8009A690) -/* 1CEC 800268EC 94430000 */ lhu $v1, ($v0) -/* 1CF0 800268F0 AE040000 */ sw $a0, ($s0) -/* 1CF4 800268F4 2463FFFF */ addiu $v1, $v1, -1 -/* 1CF8 800268F8 A4430000 */ sh $v1, ($v0) -/* 1CFC 800268FC 00031C00 */ sll $v1, $v1, 0x10 -/* 1D00 80026900 1460000E */ bnez $v1, .L8002693C -/* 1D04 80026904 00000000 */ nop -/* 1D08 80026908 0C05260E */ jal func_80149838 -/* 1D0C 8002690C 00000000 */ nop -/* 1D10 80026910 0C00CD3C */ jal set_game_mode -/* 1D14 80026914 0000202D */ daddu $a0, $zero, $zero -/* 1D18 80026918 8E020000 */ lw $v0, ($s0) -/* 1D1C 8002691C 2403FFDF */ addiu $v1, $zero, -0x21 -/* 1D20 80026920 00431024 */ and $v0, $v0, $v1 -/* 1D24 80026924 08009A4F */ j .L8002693C -/* 1D28 80026928 AE020000 */ sw $v0, ($s0) -.L8002692C: -/* 1D2C 8002692C 3C018007 */ lui $at, %hi(D_800741A0) -/* 1D30 80026930 A42041A0 */ sh $zero, %lo(D_800741A0)($at) -/* 1D34 80026934 3C018007 */ lui $at, %hi(D_800741A2) -/* 1D38 80026938 A42041A2 */ sh $zero, %lo(D_800741A2)($at) -.L8002693C: -/* 1D3C 8002693C 3C04800A */ lui $a0, %hi(D_8009A650) -/* 1D40 80026940 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) -/* 1D44 80026944 8C830000 */ lw $v1, ($a0) -/* 1D48 80026948 30620100 */ andi $v0, $v1, 0x100 -/* 1D4C 8002694C 14400003 */ bnez $v0, .L8002695C -/* 1D50 80026950 34621000 */ ori $v0, $v1, 0x1000 -/* 1D54 80026954 2402EFFF */ addiu $v0, $zero, -0x1001 -/* 1D58 80026958 00621024 */ and $v0, $v1, $v0 -.L8002695C: -/* 1D5C 8002695C AC820000 */ sw $v0, ($a0) -/* 1D60 80026960 3C04800A */ lui $a0, %hi(D_8009A650) -/* 1D64 80026964 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) -/* 1D68 80026968 8C830000 */ lw $v1, ($a0) -/* 1D6C 8002696C 30620200 */ andi $v0, $v1, 0x200 -/* 1D70 80026970 14400003 */ bnez $v0, .L80026980 -/* 1D74 80026974 34622000 */ ori $v0, $v1, 0x2000 -/* 1D78 80026978 2402DFFF */ addiu $v0, $zero, -0x2001 -/* 1D7C 8002697C 00621024 */ and $v0, $v1, $v0 -.L80026980: -/* 1D80 80026980 AC820000 */ sw $v0, ($a0) -/* 1D84 80026984 3C04800A */ lui $a0, %hi(D_8009A650) -/* 1D88 80026988 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) -/* 1D8C 8002698C 8C830000 */ lw $v1, ($a0) -/* 1D90 80026990 30620400 */ andi $v0, $v1, 0x400 -/* 1D94 80026994 14400003 */ bnez $v0, .L800269A4 -/* 1D98 80026998 34624000 */ ori $v0, $v1, 0x4000 -/* 1D9C 8002699C 2402BFFF */ addiu $v0, $zero, -0x4001 -/* 1DA0 800269A0 00621024 */ and $v0, $v1, $v0 -.L800269A4: -/* 1DA4 800269A4 AC820000 */ sw $v0, ($a0) -/* 1DA8 800269A8 3C04800A */ lui $a0, %hi(D_8009A650) -/* 1DAC 800269AC 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) -/* 1DB0 800269B0 8C830000 */ lw $v1, ($a0) -/* 1DB4 800269B4 30620800 */ andi $v0, $v1, 0x800 -/* 1DB8 800269B8 14400004 */ bnez $v0, .L800269CC -/* 1DBC 800269BC 34628000 */ ori $v0, $v1, 0x8000 -/* 1DC0 800269C0 3C02FFFF */ lui $v0, 0xffff -/* 1DC4 800269C4 34427FFF */ ori $v0, $v0, 0x7fff -/* 1DC8 800269C8 00621024 */ and $v0, $v1, $v0 -.L800269CC: -/* 1DCC 800269CC AC820000 */ sw $v0, ($a0) -/* 1DD0 800269D0 0C00A67F */ jal rand_int -/* 1DD4 800269D4 24040001 */ addiu $a0, $zero, 1 -.L800269D8: -/* 1DD8 800269D8 8FBF0018 */ lw $ra, 0x18($sp) -/* 1DDC 800269DC 8FB10014 */ lw $s1, 0x14($sp) -/* 1DE0 800269E0 8FB00010 */ lw $s0, 0x10($sp) -/* 1DE4 800269E4 03E00008 */ jr $ra -/* 1DE8 800269E8 27BD0020 */ addiu $sp, $sp, 0x20 diff --git a/ver/us/asm/nonmatchings/code_341d0/update_effects.s b/ver/us/asm/nonmatchings/code_341d0/update_effects.s index 33c6f612e9..0213d227e7 100644 --- a/ver/us/asm/nonmatchings/code_341d0/update_effects.s +++ b/ver/us/asm/nonmatchings/code_341d0/update_effects.s @@ -2,8 +2,8 @@ .set noreorder # don't insert nops after branches glabel update_effects -/* 35150 80059D50 3C02800A */ lui $v0, %hi(D_8009A650) -/* 35154 80059D54 8C42A650 */ lw $v0, %lo(D_8009A650)($v0) +/* 35150 80059D50 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 35154 80059D54 8C42A650 */ lw $v0, %lo(gOverrideFlags)($v0) /* 35158 80059D58 27BDFFD8 */ addiu $sp, $sp, -0x28 /* 3515C 80059D5C AFBF0020 */ sw $ra, 0x20($sp) /* 35160 80059D60 AFB3001C */ sw $s3, 0x1c($sp) diff --git a/ver/us/asm/nonmatchings/code_43F0/clamp_angle.s b/ver/us/asm/nonmatchings/code_43F0/clamp_angle.s deleted file mode 100644 index 815319fb94..0000000000 --- a/ver/us/asm/nonmatchings/code_43F0/clamp_angle.s +++ /dev/null @@ -1,75 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel clamp_angle -/* 4F24 80029B24 3C014561 */ lui $at, 0x4561 -/* 4F28 80029B28 44811000 */ mtc1 $at, $f2 -/* 4F2C 80029B2C 46006005 */ abs.s $f0, $f12 -/* 4F30 80029B30 4600103C */ c.lt.s $f2, $f0 -/* 4F34 80029B34 00000000 */ nop -/* 4F38 80029B38 45000026 */ bc1f .L80029BD4 -/* 4F3C 80029B3C 00000000 */ nop -/* 4F40 80029B40 4600610D */ trunc.w.s $f4, $f12 -/* 4F44 80029B44 44042000 */ mfc1 $a0, $f4 -/* 4F48 80029B48 00000000 */ nop -/* 4F4C 80029B4C 0480000F */ bltz $a0, .L80029B8C -/* 4F50 80029B50 3C02B60B */ lui $v0, 0xb60b -/* 4F54 80029B54 344260B7 */ ori $v0, $v0, 0x60b7 -/* 4F58 80029B58 00820018 */ mult $a0, $v0 -/* 4F5C 80029B5C 00041FC3 */ sra $v1, $a0, 0x1f -/* 4F60 80029B60 00002810 */ mfhi $a1 -/* 4F64 80029B64 00A41021 */ addu $v0, $a1, $a0 -/* 4F68 80029B68 00021203 */ sra $v0, $v0, 8 -/* 4F6C 80029B6C 00431023 */ subu $v0, $v0, $v1 -/* 4F70 80029B70 00021840 */ sll $v1, $v0, 1 -/* 4F74 80029B74 00621821 */ addu $v1, $v1, $v0 -/* 4F78 80029B78 00031100 */ sll $v0, $v1, 4 -/* 4F7C 80029B7C 00431023 */ subu $v0, $v0, $v1 -/* 4F80 80029B80 000210C0 */ sll $v0, $v0, 3 -/* 4F84 80029B84 0800A6F1 */ j .L80029BC4 -/* 4F88 80029B88 00822023 */ subu $a0, $a0, $v0 -.L80029B8C: -/* 4F8C 80029B8C 00042023 */ negu $a0, $a0 -/* 4F90 80029B90 344260B7 */ ori $v0, $v0, 0x60b7 -/* 4F94 80029B94 00820018 */ mult $a0, $v0 -/* 4F98 80029B98 00041FC3 */ sra $v1, $a0, 0x1f -/* 4F9C 80029B9C 00002810 */ mfhi $a1 -/* 4FA0 80029BA0 00A41021 */ addu $v0, $a1, $a0 -/* 4FA4 80029BA4 00021203 */ sra $v0, $v0, 8 -/* 4FA8 80029BA8 00431023 */ subu $v0, $v0, $v1 -/* 4FAC 80029BAC 00021840 */ sll $v1, $v0, 1 -/* 4FB0 80029BB0 00621821 */ addu $v1, $v1, $v0 -/* 4FB4 80029BB4 00031100 */ sll $v0, $v1, 4 -/* 4FB8 80029BB8 00431023 */ subu $v0, $v0, $v1 -/* 4FBC 80029BBC 000210C0 */ sll $v0, $v0, 3 -/* 4FC0 80029BC0 00442023 */ subu $a0, $v0, $a0 -.L80029BC4: -/* 4FC4 80029BC4 44840000 */ mtc1 $a0, $f0 -/* 4FC8 80029BC8 00000000 */ nop -/* 4FCC 80029BCC 03E00008 */ jr $ra -/* 4FD0 80029BD0 46800020 */ cvt.s.w $f0, $f0 -.L80029BD4: -/* 4FD4 80029BD4 44801000 */ mtc1 $zero, $f2 -/* 4FD8 80029BD8 3C0143B4 */ lui $at, 0x43b4 -/* 4FDC 80029BDC 44810000 */ mtc1 $at, $f0 -.L80029BE0: -/* 4FE0 80029BE0 4602603C */ c.lt.s $f12, $f2 -/* 4FE4 80029BE4 00000000 */ nop -/* 4FE8 80029BE8 45030001 */ bc1tl .L80029BF0 -/* 4FEC 80029BEC 46006300 */ add.s $f12, $f12, $f0 -.L80029BF0: -/* 4FF0 80029BF0 460C003E */ c.le.s $f0, $f12 -/* 4FF4 80029BF4 00000000 */ nop -/* 4FF8 80029BF8 45030001 */ bc1tl .L80029C00 -/* 4FFC 80029BFC 46006301 */ sub.s $f12, $f12, $f0 -.L80029C00: -/* 5000 80029C00 460C103E */ c.le.s $f2, $f12 -/* 5004 80029C04 00000000 */ nop -/* 5008 80029C08 4500FFF5 */ bc1f .L80029BE0 -/* 500C 80029C0C 00000000 */ nop -/* 5010 80029C10 4600603C */ c.lt.s $f12, $f0 -/* 5014 80029C14 00000000 */ nop -/* 5018 80029C18 4500FFF1 */ bc1f .L80029BE0 -/* 501C 80029C1C 00000000 */ nop -/* 5020 80029C20 03E00008 */ jr $ra -/* 5024 80029C24 46006006 */ mov.s $f0, $f12 diff --git a/ver/us/asm/nonmatchings/code_43F0/cosine.s b/ver/us/asm/nonmatchings/code_43F0/cosine.s deleted file mode 100644 index 9c1ded2535..0000000000 --- a/ver/us/asm/nonmatchings/code_43F0/cosine.s +++ /dev/null @@ -1,62 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel cosine -/* 47D4 800293D4 3C06B60B */ lui $a2, 0xb60b -/* 47D8 800293D8 34C660B7 */ ori $a2, $a2, 0x60b7 -/* 47DC 800293DC 00042400 */ sll $a0, $a0, 0x10 -/* 47E0 800293E0 00042C03 */ sra $a1, $a0, 0x10 -/* 47E4 800293E4 00A60018 */ mult $a1, $a2 -/* 47E8 800293E8 000427C3 */ sra $a0, $a0, 0x1f -/* 47EC 800293EC 00003810 */ mfhi $a3 -/* 47F0 800293F0 00E51021 */ addu $v0, $a3, $a1 -/* 47F4 800293F4 00021203 */ sra $v0, $v0, 8 -/* 47F8 800293F8 00441023 */ subu $v0, $v0, $a0 -/* 47FC 800293FC 00021840 */ sll $v1, $v0, 1 -/* 4800 80029400 00621821 */ addu $v1, $v1, $v0 -/* 4804 80029404 00031100 */ sll $v0, $v1, 4 -/* 4808 80029408 00431023 */ subu $v0, $v0, $v1 -/* 480C 8002940C 000210C0 */ sll $v0, $v0, 3 -/* 4810 80029410 00A22823 */ subu $a1, $a1, $v0 -/* 4814 80029414 00051400 */ sll $v0, $a1, 0x10 -/* 4818 80029418 04410002 */ bgez $v0, .L80029424 -/* 481C 8002941C 00A0182D */ daddu $v1, $a1, $zero -/* 4820 80029420 24A30168 */ addiu $v1, $a1, 0x168 -.L80029424: -/* 4824 80029424 00031C00 */ sll $v1, $v1, 0x10 -/* 4828 80029428 00032C03 */ sra $a1, $v1, 0x10 -/* 482C 8002942C 00A60018 */ mult $a1, $a2 -/* 4830 80029430 00031FC3 */ sra $v1, $v1, 0x1f -/* 4834 80029434 00003810 */ mfhi $a3 -/* 4838 80029438 00E51021 */ addu $v0, $a3, $a1 -/* 483C 8002943C 000211C3 */ sra $v0, $v0, 7 -/* 4840 80029440 00431023 */ subu $v0, $v0, $v1 -/* 4844 80029444 00021840 */ sll $v1, $v0, 1 -/* 4848 80029448 00621821 */ addu $v1, $v1, $v0 -/* 484C 8002944C 00031100 */ sll $v0, $v1, 4 -/* 4850 80029450 00431023 */ subu $v0, $v0, $v1 -/* 4854 80029454 00021080 */ sll $v0, $v0, 2 -/* 4858 80029458 00A21823 */ subu $v1, $a1, $v0 -/* 485C 8002945C 00031400 */ sll $v0, $v1, 0x10 -/* 4860 80029460 00021403 */ sra $v0, $v0, 0x10 -/* 4864 80029464 2842005B */ slti $v0, $v0, 0x5b -/* 4868 80029468 14400003 */ bnez $v0, .L80029478 -/* 486C 8002946C 0060202D */ daddu $a0, $v1, $zero -/* 4870 80029470 240200B4 */ addiu $v0, $zero, 0xb4 -/* 4874 80029474 00432023 */ subu $a0, $v0, $v1 -.L80029478: -/* 4878 80029478 28A200B4 */ slti $v0, $a1, 0xb4 -/* 487C 8002947C 10400006 */ beqz $v0, .L80029498 -/* 4880 80029480 00041400 */ sll $v0, $a0, 0x10 -/* 4884 80029484 00021383 */ sra $v0, $v0, 0xe -/* 4888 80029488 3C018007 */ lui $at, %hi(D_80074274) -/* 488C 8002948C 00220821 */ addu $at, $at, $v0 -/* 4890 80029490 03E00008 */ jr $ra -/* 4894 80029494 C4204274 */ lwc1 $f0, %lo(D_80074274)($at) -.L80029498: -/* 4898 80029498 00021383 */ sra $v0, $v0, 0xe -/* 489C 8002949C 3C018007 */ lui $at, %hi(D_80074274) -/* 48A0 800294A0 00220821 */ addu $at, $at, $v0 -/* 48A4 800294A4 C4204274 */ lwc1 $f0, %lo(D_80074274)($at) -/* 48A8 800294A8 03E00008 */ jr $ra -/* 48AC 800294AC 46000007 */ neg.s $f0, $f0 diff --git a/ver/us/asm/nonmatchings/code_43F0/rand_int.s b/ver/us/asm/nonmatchings/code_43F0/rand_int.s deleted file mode 100644 index 8c4df6ea3c..0000000000 --- a/ver/us/asm/nonmatchings/code_43F0/rand_int.s +++ /dev/null @@ -1,40 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel rand_int -/* 4DFC 800299FC 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 4E00 80029A00 AFBF0010 */ sw $ra, 0x10($sp) -/* 4E04 80029A04 04820001 */ bltzl $a0, .L80029A0C -/* 4E08 80029A08 00042023 */ negu $a0, $a0 -.L80029A0C: -/* 4E0C 80029A0C 10800018 */ beqz $a0, .L80029A70 -/* 4E10 80029A10 0000102D */ daddu $v0, $zero, $zero -/* 4E14 80029A14 24020001 */ addiu $v0, $zero, 1 -/* 4E18 80029A18 54820006 */ bnel $a0, $v0, .L80029A34 -/* 4E1C 80029A1C 24020064 */ addiu $v0, $zero, 0x64 -/* 4E20 80029A20 0C00A665 */ jal func_80029994 -/* 4E24 80029A24 240403E8 */ addiu $a0, $zero, 0x3e8 -/* 4E28 80029A28 284201F5 */ slti $v0, $v0, 0x1f5 -/* 4E2C 80029A2C 0800A69C */ j .L80029A70 -/* 4E30 80029A30 38420001 */ xori $v0, $v0, 1 -.L80029A34: -/* 4E34 80029A34 10820005 */ beq $a0, $v0, .L80029A4C -/* 4E38 80029A38 00000000 */ nop -/* 4E3C 80029A3C 0C00A665 */ jal func_80029994 -/* 4E40 80029A40 00000000 */ nop -/* 4E44 80029A44 0800A69C */ j .L80029A70 -/* 4E48 80029A48 00000000 */ nop -.L80029A4C: -/* 4E4C 80029A4C 0C00A665 */ jal func_80029994 -/* 4E50 80029A50 240403F1 */ addiu $a0, $zero, 0x3f1 -/* 4E54 80029A54 3C036666 */ lui $v1, 0x6666 -/* 4E58 80029A58 34636667 */ ori $v1, $v1, 0x6667 -/* 4E5C 80029A5C 00430018 */ mult $v0, $v1 -/* 4E60 80029A60 000217C3 */ sra $v0, $v0, 0x1f -/* 4E64 80029A64 00002810 */ mfhi $a1 -/* 4E68 80029A68 00051883 */ sra $v1, $a1, 2 -/* 4E6C 80029A6C 00621023 */ subu $v0, $v1, $v0 -.L80029A70: -/* 4E70 80029A70 8FBF0010 */ lw $ra, 0x10($sp) -/* 4E74 80029A74 03E00008 */ jr $ra -/* 4E78 80029A78 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/ver/us/asm/nonmatchings/code_43F0/transform_point.s b/ver/us/asm/nonmatchings/code_43F0/transform_point.s deleted file mode 100644 index 8c14df6a35..0000000000 --- a/ver/us/asm/nonmatchings/code_43F0/transform_point.s +++ /dev/null @@ -1,68 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel transform_point -/* 4A20 80029620 44853000 */ mtc1 $a1, $f6 -/* 4A24 80029624 C4800000 */ lwc1 $f0, ($a0) -/* 4A28 80029628 46060002 */ mul.s $f0, $f0, $f6 -/* 4A2C 8002962C 00000000 */ nop -/* 4A30 80029630 44864000 */ mtc1 $a2, $f8 -/* 4A34 80029634 C4820010 */ lwc1 $f2, 0x10($a0) -/* 4A38 80029638 46081082 */ mul.s $f2, $f2, $f8 -/* 4A3C 8002963C 00000000 */ nop -/* 4A40 80029640 44875000 */ mtc1 $a3, $f10 -/* 4A44 80029644 C4840020 */ lwc1 $f4, 0x20($a0) -/* 4A48 80029648 460A2102 */ mul.s $f4, $f4, $f10 -/* 4A4C 8002964C 00000000 */ nop -/* 4A50 80029650 46020000 */ add.s $f0, $f0, $f2 -/* 4A54 80029654 8FA20014 */ lw $v0, 0x14($sp) -/* 4A58 80029658 8FA30018 */ lw $v1, 0x18($sp) -/* 4A5C 8002965C 46040000 */ add.s $f0, $f0, $f4 -/* 4A60 80029660 C4820030 */ lwc1 $f2, 0x30($a0) -/* 4A64 80029664 8FA5001C */ lw $a1, 0x1c($sp) -/* 4A68 80029668 46020000 */ add.s $f0, $f0, $f2 -/* 4A6C 8002966C 8FA60020 */ lw $a2, 0x20($sp) -/* 4A70 80029670 E4400000 */ swc1 $f0, ($v0) -/* 4A74 80029674 C4800004 */ lwc1 $f0, 4($a0) -/* 4A78 80029678 46060002 */ mul.s $f0, $f0, $f6 -/* 4A7C 8002967C 00000000 */ nop -/* 4A80 80029680 C4840014 */ lwc1 $f4, 0x14($a0) -/* 4A84 80029684 46082102 */ mul.s $f4, $f4, $f8 -/* 4A88 80029688 00000000 */ nop -/* 4A8C 8002968C C4820024 */ lwc1 $f2, 0x24($a0) -/* 4A90 80029690 460A1082 */ mul.s $f2, $f2, $f10 -/* 4A94 80029694 00000000 */ nop -/* 4A98 80029698 46040000 */ add.s $f0, $f0, $f4 -/* 4A9C 8002969C 46020000 */ add.s $f0, $f0, $f2 -/* 4AA0 800296A0 C4820034 */ lwc1 $f2, 0x34($a0) -/* 4AA4 800296A4 46020000 */ add.s $f0, $f0, $f2 -/* 4AA8 800296A8 E4600000 */ swc1 $f0, ($v1) -/* 4AAC 800296AC C4800008 */ lwc1 $f0, 8($a0) -/* 4AB0 800296B0 46060002 */ mul.s $f0, $f0, $f6 -/* 4AB4 800296B4 00000000 */ nop -/* 4AB8 800296B8 C4840018 */ lwc1 $f4, 0x18($a0) -/* 4ABC 800296BC 46082102 */ mul.s $f4, $f4, $f8 -/* 4AC0 800296C0 00000000 */ nop -/* 4AC4 800296C4 C4820028 */ lwc1 $f2, 0x28($a0) -/* 4AC8 800296C8 460A1082 */ mul.s $f2, $f2, $f10 -/* 4ACC 800296CC 00000000 */ nop -/* 4AD0 800296D0 46040000 */ add.s $f0, $f0, $f4 -/* 4AD4 800296D4 46020000 */ add.s $f0, $f0, $f2 -/* 4AD8 800296D8 C4820038 */ lwc1 $f2, 0x38($a0) -/* 4ADC 800296DC 46020000 */ add.s $f0, $f0, $f2 -/* 4AE0 800296E0 E4A00000 */ swc1 $f0, ($a1) -/* 4AE4 800296E4 C480000C */ lwc1 $f0, 0xc($a0) -/* 4AE8 800296E8 46060002 */ mul.s $f0, $f0, $f6 -/* 4AEC 800296EC 00000000 */ nop -/* 4AF0 800296F0 C484001C */ lwc1 $f4, 0x1c($a0) -/* 4AF4 800296F4 46082102 */ mul.s $f4, $f4, $f8 -/* 4AF8 800296F8 00000000 */ nop -/* 4AFC 800296FC C482002C */ lwc1 $f2, 0x2c($a0) -/* 4B00 80029700 460A1082 */ mul.s $f2, $f2, $f10 -/* 4B04 80029704 00000000 */ nop -/* 4B08 80029708 46040000 */ add.s $f0, $f0, $f4 -/* 4B0C 8002970C 46020000 */ add.s $f0, $f0, $f2 -/* 4B10 80029710 C482003C */ lwc1 $f2, 0x3c($a0) -/* 4B14 80029714 46020000 */ add.s $f0, $f0, $f2 -/* 4B18 80029718 03E00008 */ jr $ra -/* 4B1C 8002971C E4C00000 */ swc1 $f0, ($a2) diff --git a/ver/us/asm/nonmatchings/code_4ac90_len_3910/load_demo_battle.s b/ver/us/asm/nonmatchings/code_4ac90_len_3910/load_demo_battle.s index 3bd8c1333f..e7786a33b2 100644 --- a/ver/us/asm/nonmatchings/code_4ac90_len_3910/load_demo_battle.s +++ b/ver/us/asm/nonmatchings/code_4ac90_len_3910/load_demo_battle.s @@ -229,8 +229,8 @@ glabel L800730F8_4E4F8 /* 4E558 80073158 8C63419C */ lw $v1, %lo(gGameStatusPtr)($v1) /* 4E55C 8007315C 0220202D */ daddu $a0, $s1, $zero /* 4E560 80073160 906200AA */ lbu $v0, 0xaa($v1) -/* 4E564 80073164 3C05800A */ lui $a1, %hi(D_8009A650) -/* 4E568 80073168 24A5A650 */ addiu $a1, $a1, %lo(D_8009A650) +/* 4E564 80073164 3C05800A */ lui $a1, %hi(gOverrideFlags) +/* 4E568 80073168 24A5A650 */ addiu $a1, $a1, %lo(gOverrideFlags) /* 4E56C 8007316C 34420001 */ ori $v0, $v0, 1 /* 4E570 80073170 A06200AA */ sb $v0, 0xaa($v1) /* 4E574 80073174 8CA20000 */ lw $v0, ($a1) diff --git a/ver/us/asm/nonmatchings/code_7fd10_len_b40/can_pause.s b/ver/us/asm/nonmatchings/code_7fd10_len_b40/can_pause.s index 0245427530..462ac07002 100644 --- a/ver/us/asm/nonmatchings/code_7fd10_len_b40/can_pause.s +++ b/ver/us/asm/nonmatchings/code_7fd10_len_b40/can_pause.s @@ -37,8 +37,8 @@ glabel can_pause /* 7FF0C 800E6A5C 1440003C */ bnez $v0, .L800E6B50 /* 7FF10 800E6A60 0000102D */ daddu $v0, $zero, $zero .L800E6A64: -/* 7FF14 800E6A64 3C02800A */ lui $v0, %hi(D_8009A650) -/* 7FF18 800E6A68 8C42A650 */ lw $v0, %lo(D_8009A650)($v0) +/* 7FF14 800E6A64 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 7FF18 800E6A68 8C42A650 */ lw $v0, %lo(gOverrideFlags)($v0) /* 7FF1C 800E6A6C 3C030004 */ lui $v1, 4 /* 7FF20 800E6A70 00431024 */ and $v0, $v0, $v1 /* 7FF24 800E6A74 14400036 */ bnez $v0, .L800E6B50 diff --git a/ver/us/asm/nonmatchings/code_7fd10_len_b40/check_input_open_menus.s b/ver/us/asm/nonmatchings/code_7fd10_len_b40/check_input_open_menus.s index b66925562e..9030deac91 100644 --- a/ver/us/asm/nonmatchings/code_7fd10_len_b40/check_input_open_menus.s +++ b/ver/us/asm/nonmatchings/code_7fd10_len_b40/check_input_open_menus.s @@ -200,8 +200,8 @@ glabel L800E6F14_803C4 /* 8044C 800E6F9C 00021400 */ sll $v0, $v0, 0x10 /* 80450 800E6FA0 144000B2 */ bnez $v0, L800E726C_8071C /* 80454 800E6FA4 24040002 */ addiu $a0, $zero, 2 -/* 80458 800E6FA8 3C02800A */ lui $v0, %hi(D_8009A650) -/* 8045C 800E6FAC 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* 80458 800E6FA8 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 8045C 800E6FAC 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* 80460 800E6FB0 8C430000 */ lw $v1, ($v0) /* 80464 800E6FB4 3C018011 */ lui $at, %hi(D_8010CD00) /* 80468 800E6FB8 A424CD00 */ sh $a0, %lo(D_8010CD00)($at) @@ -343,8 +343,8 @@ glabel L800E7090_80540 /* 80654 800E71A4 02421021 */ addu $v0, $s2, $v0 /* 80658 800E71A8 0C03A900 */ jal use_consumable /* 8065C 800E71AC 8C440108 */ lw $a0, 0x108($v0) -/* 80660 800E71B0 3C04800A */ lui $a0, %hi(D_8009A650) -/* 80664 800E71B4 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* 80660 800E71B0 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* 80664 800E71B4 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* 80668 800E71B8 8C820000 */ lw $v0, ($a0) /* 8066C 800E71BC 3C030020 */ lui $v1, 0x20 /* 80670 800E71C0 00431025 */ or $v0, $v0, $v1 @@ -355,8 +355,8 @@ glabel L800E7090_80540 /* 80680 800E71D0 0000202D */ daddu $a0, $zero, $zero /* 80684 800E71D4 2403FFDF */ addiu $v1, $zero, -0x21 /* 80688 800E71D8 8E820000 */ lw $v0, ($s4) -/* 8068C 800E71DC 3C05800A */ lui $a1, %hi(D_8009A650) -/* 80690 800E71E0 24A5A650 */ addiu $a1, $a1, %lo(D_8009A650) +/* 8068C 800E71DC 3C05800A */ lui $a1, %hi(gOverrideFlags) +/* 80690 800E71E0 24A5A650 */ addiu $a1, $a1, %lo(gOverrideFlags) /* 80694 800E71E4 00431024 */ and $v0, $v0, $v1 /* 80698 800E71E8 AE820000 */ sw $v0, ($s4) /* 8069C 800E71EC 8CA20000 */ lw $v0, ($a1) @@ -379,8 +379,8 @@ glabel L800E7208_806B8 /* 806DC 800E722C 00000000 */ nop /* 806E0 800E7230 2403FFDF */ addiu $v1, $zero, -0x21 /* 806E4 800E7234 8E820000 */ lw $v0, ($s4) -/* 806E8 800E7238 3C04800A */ lui $a0, %hi(D_8009A650) -/* 806EC 800E723C 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* 806E8 800E7238 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* 806EC 800E723C 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* 806F0 800E7240 3C018011 */ lui $at, %hi(D_8010CD00) /* 806F4 800E7244 A420CD00 */ sh $zero, %lo(D_8010CD00)($at) /* 806F8 800E7248 00431024 */ and $v0, $v0, $v1 diff --git a/ver/us/asm/nonmatchings/code_C50A0/func_80132D94.s b/ver/us/asm/nonmatchings/code_C50A0/func_80132D94.s index ea1bdb1db2..de9fd5a8d2 100644 --- a/ver/us/asm/nonmatchings/code_C50A0/func_80132D94.s +++ b/ver/us/asm/nonmatchings/code_C50A0/func_80132D94.s @@ -9,8 +9,8 @@ glabel D_80150CC8 .section .text glabel func_80132D94 -/* C9494 80132D94 3C02800A */ lui $v0, %hi(D_8009A650) -/* C9498 80132D98 8C42A650 */ lw $v0, %lo(D_8009A650)($v0) +/* C9494 80132D94 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* C9498 80132D98 8C42A650 */ lw $v0, %lo(gOverrideFlags)($v0) /* C949C 80132D9C 27BDFFE0 */ addiu $sp, $sp, -0x20 /* C94A0 80132DA0 AFBF0018 */ sw $ra, 0x18($sp) /* C94A4 80132DA4 AFB10014 */ sw $s1, 0x14($sp) diff --git a/ver/us/asm/nonmatchings/code_C50A0/func_80133FC8.s b/ver/us/asm/nonmatchings/code_C50A0/func_80133FC8.s index 012d89756c..9e536fd9f6 100644 --- a/ver/us/asm/nonmatchings/code_C50A0/func_80133FC8.s +++ b/ver/us/asm/nonmatchings/code_C50A0/func_80133FC8.s @@ -27,8 +27,8 @@ glabel func_80133FC8 /* CA720 80134020 00000000 */ nop /* CA724 80134024 1440003D */ bnez $v0, .L8013411C /* CA728 80134028 2402FFFF */ addiu $v0, $zero, -1 -/* CA72C 8013402C 3C02800A */ lui $v0, %hi(D_8009A650) -/* CA730 80134030 8C42A650 */ lw $v0, %lo(D_8009A650)($v0) +/* CA72C 8013402C 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* CA730 80134030 8C42A650 */ lw $v0, %lo(gOverrideFlags)($v0) /* CA734 80134034 3C030020 */ lui $v1, 0x20 /* CA738 80134038 00431024 */ and $v0, $v0, $v1 /* CA73C 8013403C 14400037 */ bnez $v0, .L8013411C diff --git a/ver/us/asm/nonmatchings/code_C50A0/test_item_player_collision.s b/ver/us/asm/nonmatchings/code_C50A0/test_item_player_collision.s index 97365190ca..782cf44513 100644 --- a/ver/us/asm/nonmatchings/code_C50A0/test_item_player_collision.s +++ b/ver/us/asm/nonmatchings/code_C50A0/test_item_player_collision.s @@ -84,8 +84,8 @@ glabel test_item_player_collision /* CA33C 80133C3C 146200D4 */ bne $v1, $v0, .L80133F90 /* CA340 80133C40 0000102D */ daddu $v0, $zero, $zero .L80133C44: -/* CA344 80133C44 3C02800A */ lui $v0, %hi(D_8009A650) -/* CA348 80133C48 8C42A650 */ lw $v0, %lo(D_8009A650)($v0) +/* CA344 80133C44 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* CA348 80133C48 8C42A650 */ lw $v0, %lo(gOverrideFlags)($v0) /* CA34C 80133C4C 3C030020 */ lui $v1, 0x20 /* CA350 80133C50 00431024 */ and $v0, $v0, $v1 /* CA354 80133C54 144000CE */ bnez $v0, .L80133F90 diff --git a/ver/us/asm/nonmatchings/code_C50A0/update_item_entities.s b/ver/us/asm/nonmatchings/code_C50A0/update_item_entities.s index 330c39ff50..17405fa662 100644 --- a/ver/us/asm/nonmatchings/code_C50A0/update_item_entities.s +++ b/ver/us/asm/nonmatchings/code_C50A0/update_item_entities.s @@ -12,8 +12,8 @@ glabel jtbl_80150C50 .section .text glabel update_item_entities -/* C85EC 80131EEC 3C02800A */ lui $v0, %hi(D_8009A650) -/* C85F0 80131EF0 8C42A650 */ lw $v0, %lo(D_8009A650)($v0) +/* C85EC 80131EEC 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* C85F0 80131EF0 8C42A650 */ lw $v0, %lo(gOverrideFlags)($v0) /* C85F4 80131EF4 27BDFFC0 */ addiu $sp, $sp, -0x40 /* C85F8 80131EF8 AFBF0038 */ sw $ra, 0x38($sp) /* C85FC 80131EFC AFB30034 */ sw $s3, 0x34($sp) diff --git a/ver/us/asm/nonmatchings/code_C50A0/update_item_entity_collectable.s b/ver/us/asm/nonmatchings/code_C50A0/update_item_entity_collectable.s index e0bc49b4a7..4137d23986 100644 --- a/ver/us/asm/nonmatchings/code_C50A0/update_item_entity_collectable.s +++ b/ver/us/asm/nonmatchings/code_C50A0/update_item_entity_collectable.s @@ -607,8 +607,8 @@ glabel update_item_entity_collectable /* CB20C 80134B0C 30620200 */ andi $v0, $v1, 0x200 /* CB210 80134B10 14400010 */ bnez $v0, .L80134B54 /* CB214 80134B14 30622000 */ andi $v0, $v1, 0x2000 -/* CB218 80134B18 3C02800A */ lui $v0, %hi(D_8009A650) -/* CB21C 80134B1C 8C42A650 */ lw $v0, %lo(D_8009A650)($v0) +/* CB218 80134B18 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* CB21C 80134B1C 8C42A650 */ lw $v0, %lo(gOverrideFlags)($v0) /* CB220 80134B20 30420300 */ andi $v0, $v0, 0x300 /* CB224 80134B24 1440000B */ bnez $v0, .L80134B54 /* CB228 80134B28 30622000 */ andi $v0, $v1, 0x2000 @@ -1282,8 +1282,8 @@ glabel update_item_entity_collectable .L801354C8: /* CBBC8 801354C8 0240202D */ daddu $a0, $s2, $zero .L801354CC: -/* CBBCC 801354CC 3C02800A */ lui $v0, %hi(D_8009A650) -/* CBBD0 801354D0 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* CBBCC 801354CC 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* CBBD0 801354D0 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* CBBD4 801354D4 3C018015 */ lui $at, %hi(D_801565A8) /* CBBD8 801354D8 A42065A8 */ sh $zero, %lo(D_801565A8)($at) /* CBBDC 801354DC 8C430000 */ lw $v1, ($v0) @@ -1317,8 +1317,8 @@ glabel update_item_entity_collectable /* CBC40 80135540 3C018015 */ lui $at, %hi(D_801565A4) /* CBC44 80135544 A42265A4 */ sh $v0, %lo(D_801565A4)($at) /* CBC48 80135548 2402001C */ addiu $v0, $zero, 0x1c -/* CBC4C 8013554C 3C03800A */ lui $v1, %hi(D_8009A650) -/* CBC50 80135550 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* CBC4C 8013554C 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* CBC50 80135550 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* CBC54 80135554 A242001B */ sb $v0, 0x1b($s2) /* CBC58 80135558 A240001A */ sb $zero, 0x1a($s2) /* CBC5C 8013555C 8C620000 */ lw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/code_C50A0/update_item_entity_static.s b/ver/us/asm/nonmatchings/code_C50A0/update_item_entity_static.s index febcc88108..3cffed0371 100644 --- a/ver/us/asm/nonmatchings/code_C50A0/update_item_entity_static.s +++ b/ver/us/asm/nonmatchings/code_C50A0/update_item_entity_static.s @@ -16,8 +16,8 @@ glabel update_item_entity_static /* CBD84 80135684 3C018015 */ lui $at, %hi(D_801565A4) /* CBD88 80135688 A42265A4 */ sh $v0, %lo(D_801565A4)($at) /* CBD8C 8013568C 2402001C */ addiu $v0, $zero, 0x1c -/* CBD90 80135690 3C03800A */ lui $v1, %hi(D_8009A650) -/* CBD94 80135694 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* CBD90 80135690 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* CBD94 80135694 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* CBD98 80135698 A202001B */ sb $v0, 0x1b($s0) /* CBD9C 8013569C A200001A */ sb $zero, 0x1a($s0) /* CBDA0 801356A0 8C620000 */ lw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/code_C50A0/update_item_entity_temp.s b/ver/us/asm/nonmatchings/code_C50A0/update_item_entity_temp.s index 44c3705f64..7b85a01655 100644 --- a/ver/us/asm/nonmatchings/code_C50A0/update_item_entity_temp.s +++ b/ver/us/asm/nonmatchings/code_C50A0/update_item_entity_temp.s @@ -38,8 +38,8 @@ glabel update_item_entity_temp /* CBE44 80135744 00000000 */ nop /* CBE48 80135748 0C03BD8A */ jal func_800EF628 /* CBE4C 8013574C 00000000 */ nop -/* CBE50 80135750 3C03800A */ lui $v1, %hi(D_8009A650) -/* CBE54 80135754 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* CBE50 80135750 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* CBE54 80135754 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* CBE58 80135758 8C620000 */ lw $v0, ($v1) /* CBE5C 8013575C 24040002 */ addiu $a0, $zero, 2 /* CBE60 80135760 34420040 */ ori $v0, $v0, 0x40 @@ -630,8 +630,8 @@ glabel L80135F94_CC694 /* CC6B4 80135FB4 00000000 */ nop /* CC6B8 80135FB8 0C03BD80 */ jal func_800EF600 /* CC6BC 80135FBC 00000000 */ nop -/* CC6C0 80135FC0 3C02800A */ lui $v0, %hi(D_8009A650) -/* CC6C4 80135FC4 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* CC6C0 80135FC0 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* CC6C4 80135FC4 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* CC6C8 80135FC8 8C430000 */ lw $v1, ($v0) /* CC6CC 80135FCC 2404FFBF */ addiu $a0, $zero, -0x41 /* CC6D0 80135FD0 00641824 */ and $v1, $v1, $a0 @@ -863,8 +863,8 @@ glabel L80136310_CCA10 /* CCA28 80136328 00000000 */ nop /* CCA2C 8013632C 0C03BD80 */ jal func_800EF600 /* CCA30 80136330 00000000 */ nop -/* CCA34 80136334 3C02800A */ lui $v0, %hi(D_8009A650) -/* CCA38 80136338 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* CCA34 80136334 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* CCA38 80136338 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* CCA3C 8013633C 2405FFBF */ addiu $a1, $zero, -0x41 /* CCA40 80136340 8C430000 */ lw $v1, ($v0) /* CCA44 80136344 3C048015 */ lui $a0, %hi(D_801568E0) diff --git a/ver/us/asm/nonmatchings/code_E27C90/func_802B6000_E27C90.s b/ver/us/asm/nonmatchings/code_E27C90/func_802B6000_E27C90.s index 1a610776b1..e3ce27b3da 100644 --- a/ver/us/asm/nonmatchings/code_E27C90/func_802B6000_E27C90.s +++ b/ver/us/asm/nonmatchings/code_E27C90/func_802B6000_E27C90.s @@ -77,8 +77,8 @@ glabel func_802B6000_E27C90 /* E27DB0 802B6120 E6000054 */ swc1 $f0, 0x54($s0) /* E27DB4 802B6124 0C03A5D8 */ jal open_status_menu_long /* E27DB8 802B6128 00000000 */ nop -/* E27DBC 802B612C 3C03800A */ lui $v1, %hi(D_8009A650) -/* E27DC0 802B6130 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* E27DBC 802B612C 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* E27DC0 802B6130 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* E27DC4 802B6134 8C620000 */ lw $v0, ($v1) /* E27DC8 802B6138 34420040 */ ori $v0, $v0, 0x40 /* E27DCC 802B613C AC620000 */ sw $v0, ($v1) @@ -160,8 +160,8 @@ glabel func_802B6000_E27C90 /* E27EF0 802B6260 2403F7FF */ addiu $v1, $zero, -0x801 /* E27EF4 802B6264 A6220010 */ sh $v0, 0x10($s1) /* E27EF8 802B6268 8E220000 */ lw $v0, ($s1) -/* E27EFC 802B626C 3C04800A */ lui $a0, %hi(D_8009A650) -/* E27F00 802B6270 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* E27EFC 802B626C 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* E27F00 802B6270 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* E27F04 802B6274 A22000BF */ sb $zero, 0xbf($s1) /* E27F08 802B6278 00431024 */ and $v0, $v0, $v1 /* E27F0C 802B627C AE220000 */ sw $v0, ($s1) diff --git a/ver/us/asm/nonmatchings/code_E27F40/func_802B6000_E27F40.s b/ver/us/asm/nonmatchings/code_E27F40/func_802B6000_E27F40.s index 8cd69fa364..4008f19e79 100644 --- a/ver/us/asm/nonmatchings/code_E27F40/func_802B6000_E27F40.s +++ b/ver/us/asm/nonmatchings/code_E27F40/func_802B6000_E27F40.s @@ -54,8 +54,8 @@ glabel func_802B6000_E27F40 /* E28000 802B60C0 0C03A5D8 */ jal open_status_menu_long /* E28004 802B60C4 00000000 */ nop /* E28008 802B60C8 240400E8 */ addiu $a0, $zero, 0xe8 -/* E2800C 802B60CC 3C03800A */ lui $v1, %hi(D_8009A650) -/* E28010 802B60D0 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* E2800C 802B60CC 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* E28010 802B60D0 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* E28014 802B60D4 8C620000 */ lw $v0, ($v1) /* E28018 802B60D8 0000282D */ daddu $a1, $zero, $zero /* E2801C 802B60DC 34420040 */ ori $v0, $v0, 0x40 @@ -538,8 +538,8 @@ glabel L802B67BC_E286FC /* E2871C 802B67DC 3C03FF7F */ lui $v1, 0xff7f /* E28720 802B67E0 3463FFFF */ ori $v1, $v1, 0xffff /* E28724 802B67E4 8E020000 */ lw $v0, ($s0) -/* E28728 802B67E8 3C04800A */ lui $a0, %hi(D_8009A650) -/* E2872C 802B67EC 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* E28728 802B67E8 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* E2872C 802B67EC 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* E28730 802B67F0 00431024 */ and $v0, $v0, $v1 /* E28734 802B67F4 AE020000 */ sw $v0, ($s0) /* E28738 802B67F8 8C820000 */ lw $v0, ($a0) diff --git a/ver/us/asm/nonmatchings/code_E291A0/func_802B6000_E291A0.s b/ver/us/asm/nonmatchings/code_E291A0/func_802B6000_E291A0.s index 0f01113304..9329c5ba11 100644 --- a/ver/us/asm/nonmatchings/code_E291A0/func_802B6000_E291A0.s +++ b/ver/us/asm/nonmatchings/code_E291A0/func_802B6000_E291A0.s @@ -13,8 +13,8 @@ glabel func_802B6000_E291A0 /* E291C0 802B6020 04A1000D */ bgez $a1, .L802B6058 /* E291C4 802B6024 3C027FFF */ lui $v0, 0x7fff /* E291C8 802B6028 3442FFFF */ ori $v0, $v0, 0xffff -/* E291CC 802B602C 3C04800A */ lui $a0, %hi(D_8009A650) -/* E291D0 802B6030 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* E291CC 802B602C 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* E291D0 802B6030 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* E291D4 802B6034 8C830000 */ lw $v1, ($a0) /* E291D8 802B6038 00A21024 */ and $v0, $a1, $v0 /* E291DC 802B603C AE220000 */ sw $v0, ($s1) @@ -170,8 +170,8 @@ glabel L802B6250_E293F0 /* E29414 802B6274 00000000 */ nop /* E29418 802B6278 0C039769 */ jal set_action_state /* E2941C 802B627C 0000202D */ daddu $a0, $zero, $zero -/* E29420 802B6280 3C02800A */ lui $v0, %hi(D_8009A650) -/* E29424 802B6284 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* E29420 802B6280 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* E29424 802B6284 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* E29428 802B6288 8C430000 */ lw $v1, ($v0) /* E2942C 802B628C 2404FFBF */ addiu $a0, $zero, -0x41 /* E29430 802B6290 00641824 */ and $v1, $v1, $a0 diff --git a/ver/us/asm/nonmatchings/code_E29470/func_802B60A4_E29514.s b/ver/us/asm/nonmatchings/code_E29470/func_802B60A4_E29514.s index f875e41cc8..2a7a34ce2e 100644 --- a/ver/us/asm/nonmatchings/code_E29470/func_802B60A4_E29514.s +++ b/ver/us/asm/nonmatchings/code_E29470/func_802B60A4_E29514.s @@ -20,8 +20,8 @@ glabel func_802B60A4_E29514 /* E29550 802B60E0 04A10032 */ bgez $a1, .L802B61AC /* E29554 802B60E4 3C037FFF */ lui $v1, 0x7fff /* E29558 802B60E8 3463FFFF */ ori $v1, $v1, 0xffff -/* E2955C 802B60EC 3C04800A */ lui $a0, %hi(D_8009A650) -/* E29560 802B60F0 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* E2955C 802B60EC 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* E29560 802B60F0 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* E29564 802B60F4 8C820000 */ lw $v0, ($a0) /* E29568 802B60F8 00A31824 */ and $v1, $a1, $v1 /* E2956C 802B60FC AE630000 */ sw $v1, ($s3) @@ -82,8 +82,8 @@ glabel func_802B60A4_E29514 .L802B61CC: /* E2963C 802B61CC 3C04802B */ lui $a0, %hi(D_802B6EE4) /* E29640 802B61D0 24846EE4 */ addiu $a0, $a0, %lo(D_802B6EE4) -/* E29644 802B61D4 3C03800A */ lui $v1, %hi(D_8009A650) -/* E29648 802B61D8 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* E29644 802B61D4 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* E29648 802B61D8 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* E2964C 802B61DC C4800000 */ lwc1 $f0, ($a0) /* E29650 802B61E0 3C013F80 */ lui $at, 0x3f80 /* E29654 802B61E4 4481E000 */ mtc1 $at, $f28 @@ -334,8 +334,8 @@ glabel func_802B60A4_E29514 .L802B6598: /* E29A08 802B6598 3C04802B */ lui $a0, %hi(D_802B6EE4) /* E29A0C 802B659C 24846EE4 */ addiu $a0, $a0, %lo(D_802B6EE4) -/* E29A10 802B65A0 3C11800A */ lui $s1, %hi(D_8009A650) -/* E29A14 802B65A4 2631A650 */ addiu $s1, $s1, %lo(D_8009A650) +/* E29A10 802B65A0 3C11800A */ lui $s1, %hi(gOverrideFlags) +/* E29A14 802B65A4 2631A650 */ addiu $s1, $s1, %lo(gOverrideFlags) /* E29A18 802B65A8 C4800000 */ lwc1 $f0, ($a0) /* E29A1C 802B65AC 3C013F80 */ lui $at, 0x3f80 /* E29A20 802B65B0 44811000 */ mtc1 $at, $f2 @@ -906,8 +906,8 @@ glabel L802B6E08_E2A278 /* E2A2A4 802B6E34 AE620000 */ sw $v0, ($s3) /* E2A2A8 802B6E38 0C03BCCA */ jal enable_partner_ai /* E2A2AC 802B6E3C 00000000 */ nop -/* E2A2B0 802B6E40 3C04800A */ lui $a0, %hi(D_8009A650) -/* E2A2B4 802B6E44 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* E2A2B0 802B6E40 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* E2A2B4 802B6E44 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* E2A2B8 802B6E48 8C820000 */ lw $v0, ($a0) /* E2A2BC 802B6E4C 2403FFBF */ addiu $v1, $zero, -0x41 /* E2A2C0 802B6E50 00431024 */ and $v0, $v0, $v1 diff --git a/ver/us/asm/nonmatchings/code_a5dd0_len_114e0/func_8011D9B8.s b/ver/us/asm/nonmatchings/code_a5dd0_len_114e0/func_8011D9B8.s index 9e65c7719a..48cf8c4a50 100644 --- a/ver/us/asm/nonmatchings/code_a5dd0_len_114e0/func_8011D9B8.s +++ b/ver/us/asm/nonmatchings/code_a5dd0_len_114e0/func_8011D9B8.s @@ -184,8 +184,8 @@ glabel func_8011D9B8 .L8011DC3C: /* B433C 8011DC3C 3C038015 */ lui $v1, %hi(D_801533AC) /* B4340 8011DC40 8C6333AC */ lw $v1, %lo(D_801533AC)($v1) -/* B4344 8011DC44 3C02800A */ lui $v0, %hi(D_8009A650) -/* B4348 8011DC48 8C42A650 */ lw $v0, %lo(D_8009A650)($v0) +/* B4344 8011DC44 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* B4348 8011DC48 8C42A650 */ lw $v0, %lo(gOverrideFlags)($v0) /* B434C 8011DC4C 3C018015 */ lui $at, %hi(D_8014B7F0) /* B4350 8011DC50 AC35B7F0 */ sw $s5, %lo(D_8014B7F0)($at) /* B4354 8011DC54 00031880 */ sll $v1, $v1, 2 diff --git a/ver/us/asm/nonmatchings/code_d610_len_1330/get_game_mode.s b/ver/us/asm/nonmatchings/code_d610_len_1330/get_game_mode.s deleted file mode 100644 index acae19f0bd..0000000000 --- a/ver/us/asm/nonmatchings/code_d610_len_1330/get_game_mode.s +++ /dev/null @@ -1,10 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel get_game_mode -/* E928 80033528 3C02800A */ lui $v0, %hi(D_800A08F0) -/* E92C 8003352C 844208F0 */ lh $v0, %lo(D_800A08F0)($v0) -/* E930 80033530 03E00008 */ jr $ra -/* E934 80033534 00000000 */ nop -/* E938 80033538 00000000 */ nop -/* E93C 8003353C 00000000 */ nop diff --git a/ver/us/asm/nonmatchings/code_d610_len_1330/set_game_mode.s b/ver/us/asm/nonmatchings/code_d610_len_1330/set_game_mode.s deleted file mode 100644 index 1182434310..0000000000 --- a/ver/us/asm/nonmatchings/code_d610_len_1330/set_game_mode.s +++ /dev/null @@ -1,18 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel set_game_mode -/* E8F0 800334F0 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* E8F4 800334F4 3C01800A */ lui $at, %hi(D_800A08F0) -/* E8F8 800334F8 A42408F0 */ sh $a0, %lo(D_800A08F0)($at) -/* E8FC 800334FC 00042400 */ sll $a0, $a0, 0x10 -/* E900 80033500 00042383 */ sra $a0, $a0, 0xe -/* E904 80033504 AFBF0010 */ sw $ra, 0x10($sp) -/* E908 80033508 3C058007 */ lui $a1, %hi(D_80077850) -/* E90C 8003350C 00A42821 */ addu $a1, $a1, $a0 -/* E910 80033510 8CA57850 */ lw $a1, %lo(D_80077850)($a1) -/* E914 80033514 0C044B2A */ jal _set_game_mode -/* E918 80033518 0000202D */ daddu $a0, $zero, $zero -/* E91C 8003351C 8FBF0010 */ lw $ra, 0x10($sp) -/* E920 80033520 03E00008 */ jr $ra -/* E924 80033524 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/ver/us/asm/nonmatchings/code_ebd0_len_6a0/func_80033BC0.s b/ver/us/asm/nonmatchings/code_ebd0_len_6a0/func_80033BC0.s index 357ac77bac..81a16801a4 100644 --- a/ver/us/asm/nonmatchings/code_ebd0_len_6a0/func_80033BC0.s +++ b/ver/us/asm/nonmatchings/code_ebd0_len_6a0/func_80033BC0.s @@ -25,8 +25,8 @@ glabel func_80033BC0 /* F010 80033C10 2402FFFF */ addiu $v0, $zero, -1 /* F014 80033C14 0C017CBC */ jal nuGfxSetCfb /* F018 80033C18 A0C20000 */ sb $v0, ($a2) -/* F01C 80033C1C 3C04800A */ lui $a0, %hi(D_8009A650) -/* F020 80033C20 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* F01C 80033C1C 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* F020 80033C20 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* F024 80033C24 8C820000 */ lw $v0, ($a0) /* F028 80033C28 2403FFF7 */ addiu $v1, $zero, -9 /* F02C 80033C2C 00431024 */ and $v0, $v0, $v1 diff --git a/ver/us/asm/nonmatchings/code_ebd0_len_6a0/step_battle.s b/ver/us/asm/nonmatchings/code_ebd0_len_6a0/step_battle.s index 355f70307b..6f81983484 100644 --- a/ver/us/asm/nonmatchings/code_ebd0_len_6a0/step_battle.s +++ b/ver/us/asm/nonmatchings/code_ebd0_len_6a0/step_battle.s @@ -18,8 +18,8 @@ glabel step_battle /* ED18 80033918 8C42A64C */ lw $v0, %lo(D_8009A64C)($v0) /* ED1C 8003391C 14620089 */ bne $v1, $v0, .L80033B44 /* ED20 80033920 2484FFFF */ addiu $a0, $a0, -1 -/* ED24 80033924 3C02800A */ lui $v0, %hi(D_8009A650) -/* ED28 80033928 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* ED24 80033924 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* ED28 80033928 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* ED2C 8003392C 8C430000 */ lw $v1, ($v0) /* ED30 80033930 A2040000 */ sb $a0, ($s0) /* ED34 80033934 34630008 */ ori $v1, $v1, 8 @@ -135,8 +135,8 @@ glabel step_battle /* EEDC 80033ADC AC220908 */ sw $v0, %lo(D_800A0908)($at) /* EEE0 80033AE0 0C009C22 */ jal func_80027088 /* EEE4 80033AE4 0000202D */ daddu $a0, $zero, $zero -/* EEE8 80033AE8 3C05800A */ lui $a1, %hi(D_8009A650) -/* EEEC 80033AEC 24A5A650 */ addiu $a1, $a1, %lo(D_8009A650) +/* EEE8 80033AE8 3C05800A */ lui $a1, %hi(gOverrideFlags) +/* EEEC 80033AEC 24A5A650 */ addiu $a1, $a1, %lo(gOverrideFlags) /* EEF0 80033AF0 2403FFF7 */ addiu $v1, $zero, -9 /* EEF4 80033AF4 8CA20000 */ lw $v0, ($a1) /* EEF8 80033AF8 3C04800A */ lui $a0, %hi(D_800A0900) diff --git a/ver/us/asm/nonmatchings/code_f270_len_1190/begin_state_logos.s b/ver/us/asm/nonmatchings/code_f270_len_1190/begin_state_logos.s index e97313b535..f4a8462fc0 100644 --- a/ver/us/asm/nonmatchings/code_f270_len_1190/begin_state_logos.s +++ b/ver/us/asm/nonmatchings/code_f270_len_1190/begin_state_logos.s @@ -128,8 +128,8 @@ glabel begin_state_logos /* F45C 8003405C 24040001 */ addiu $a0, $zero, 1 /* F460 80034060 0C016727 */ jal clear_effect_data /* F464 80034064 00000000 */ nop -/* F468 80034068 3C03800A */ lui $v1, %hi(D_8009A650) -/* F46C 8003406C 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* F468 80034068 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* F46C 8003406C 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* F470 80034070 8C620000 */ lw $v0, ($v1) /* F474 80034074 34420002 */ ori $v0, $v0, 2 /* F478 80034078 0C00CE1D */ jal intro_logos_update_fade diff --git a/ver/us/asm/nonmatchings/code_f270_len_1190/begin_state_pause_menu.s b/ver/us/asm/nonmatchings/code_f270_len_1190/begin_state_pause_menu.s deleted file mode 100644 index 0a8f6b59bf..0000000000 --- a/ver/us/asm/nonmatchings/code_f270_len_1190/begin_state_pause_menu.s +++ /dev/null @@ -1,19 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel begin_state_pause_menu -/* FD40 80034940 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* FD44 80034944 AFBF0010 */ sw $ra, 0x10($sp) -/* FD48 80034948 3C01800A */ lui $at, %hi(D_800A0921) -/* FD4C 8003494C A0200921 */ sb $zero, %lo(D_800A0921)($at) -/* FD50 80034950 3C01800A */ lui $at, %hi(D_800A0922) -/* FD54 80034954 A4200922 */ sh $zero, %lo(D_800A0922)($at) -/* FD58 80034958 0C03805E */ jal disable_player_input -/* FD5C 8003495C 00000000 */ nop -/* FD60 80034960 0C009C22 */ jal func_80027088 -/* FD64 80034964 24040003 */ addiu $a0, $zero, 3 -/* FD68 80034968 0C051FB1 */ jal set_windows_visible -/* FD6C 8003496C 24040002 */ addiu $a0, $zero, 2 -/* FD70 80034970 8FBF0010 */ lw $ra, 0x10($sp) -/* FD74 80034974 03E00008 */ jr $ra -/* FD78 80034978 27BD0018 */ addiu $sp, $sp, 0x18 diff --git a/ver/us/asm/nonmatchings/code_f270_len_1190/func_80034BFC.s b/ver/us/asm/nonmatchings/code_f270_len_1190/func_80034BFC.s deleted file mode 100644 index 98eb3ce09c..0000000000 --- a/ver/us/asm/nonmatchings/code_f270_len_1190/func_80034BFC.s +++ /dev/null @@ -1,22 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_80034BFC -/* FFFC 80034BFC 3C02800A */ lui $v0, %hi(D_800A0922) -/* 10000 80034C00 84420922 */ lh $v0, %lo(D_800A0922)($v0) -/* 10004 80034C04 18400005 */ blez $v0, .L80034C1C -/* 10008 80034C08 24020004 */ addiu $v0, $zero, 4 -/* 1000C 80034C0C 3C01800A */ lui $at, %hi(D_800A0921) -/* 10010 80034C10 A0200921 */ sb $zero, %lo(D_800A0921)($at) -/* 10014 80034C14 0800D30B */ j .L80034C2C -/* 10018 80034C18 00000000 */ nop -.L80034C1C: -/* 1001C 80034C1C 24020001 */ addiu $v0, $zero, 1 -/* 10020 80034C20 3C01800A */ lui $at, %hi(D_800A0921) -/* 10024 80034C24 A0220921 */ sb $v0, %lo(D_800A0921)($at) -/* 10028 80034C28 24020004 */ addiu $v0, $zero, 4 -.L80034C2C: -/* 1002C 80034C2C 3C01800A */ lui $at, %hi(D_800A0920) -/* 10030 80034C30 A0220920 */ sb $v0, %lo(D_800A0920)($at) -/* 10034 80034C34 03E00008 */ jr $ra -/* 10038 80034C38 00000000 */ nop diff --git a/ver/us/asm/nonmatchings/code_f270_len_1190/func_80034C3C.s b/ver/us/asm/nonmatchings/code_f270_len_1190/func_80034C3C.s index c57520ea96..e1bede4932 100644 --- a/ver/us/asm/nonmatchings/code_f270_len_1190/func_80034C3C.s +++ b/ver/us/asm/nonmatchings/code_f270_len_1190/func_80034C3C.s @@ -30,8 +30,8 @@ glabel func_80034C3C /* 1009C 80034C9C 80C30000 */ lb $v1, ($a2) /* 100A0 80034CA0 14620007 */ bne $v1, $v0, .L80034CC0 /* 100A4 80034CA4 00000000 */ nop -/* 100A8 80034CA8 3C03800A */ lui $v1, %hi(D_8009A650) -/* 100AC 80034CAC 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* 100A8 80034CA8 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* 100AC 80034CAC 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* 100B0 80034CB0 8C620000 */ lw $v0, ($v1) /* 100B4 80034CB4 34420008 */ ori $v0, $v0, 8 /* 100B8 80034CB8 AC620000 */ sw $v0, ($v1) @@ -54,8 +54,8 @@ glabel func_80034C3C /* 100F4 80034CF4 A0C20000 */ sb $v0, ($a2) /* 100F8 80034CF8 0C0911C2 */ jal pause_cleanup /* 100FC 80034CFC 00000000 */ nop -/* 10100 80034D00 3C04800A */ lui $a0, %hi(D_8009A650) -/* 10104 80034D04 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* 10100 80034D00 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* 10104 80034D04 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* 10108 80034D08 8C820000 */ lw $v0, ($a0) /* 1010C 80034D0C 2403FFF7 */ addiu $v1, $zero, -9 /* 10110 80034D10 00431024 */ and $v0, $v0, $v1 diff --git a/ver/us/asm/nonmatchings/code_f270_len_1190/step_pause_menu.s b/ver/us/asm/nonmatchings/code_f270_len_1190/step_pause_menu.s index 4dec02d6d9..76d663b12d 100644 --- a/ver/us/asm/nonmatchings/code_f270_len_1190/step_pause_menu.s +++ b/ver/us/asm/nonmatchings/code_f270_len_1190/step_pause_menu.s @@ -34,8 +34,8 @@ glabel step_pause_menu /* FDEC 800349EC 3C01800A */ lui $at, %hi(D_800A0920) /* FDF0 800349F0 A0220920 */ sb $v0, %lo(D_800A0920)($at) /* FDF4 800349F4 24020002 */ addiu $v0, $zero, 2 -/* FDF8 800349F8 3C04800A */ lui $a0, %hi(D_8009A650) -/* FDFC 800349FC 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* FDF8 800349F8 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* FDFC 800349FC 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* FE00 80034A00 A2020000 */ sb $v0, ($s0) /* FE04 80034A04 3C058007 */ lui $a1, %hi(gGameStatusPtr) /* FE08 80034A08 8CA5419C */ lw $a1, %lo(gGameStatusPtr)($a1) @@ -129,8 +129,8 @@ glabel step_pause_menu /* FF60 80034B60 2484795C */ addiu $a0, $a0, %lo(D_8007795C) /* FF64 80034B64 0C091018 */ jal pause_init /* FF68 80034B68 00000000 */ nop -/* FF6C 80034B6C 3C04800A */ lui $a0, %hi(D_8009A650) -/* FF70 80034B70 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* FF6C 80034B6C 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* FF70 80034B70 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* FF74 80034B74 8C820000 */ lw $v0, ($a0) /* FF78 80034B78 2403FFF7 */ addiu $v1, $zero, -9 /* FF7C 80034B7C 00431024 */ and $v0, $v0, $v1 diff --git a/ver/us/asm/nonmatchings/code_fa4c0_len_3bf0/func_802D6420.s b/ver/us/asm/nonmatchings/code_fa4c0_len_3bf0/func_802D6420.s index 77a1256743..e8bb2907c7 100644 --- a/ver/us/asm/nonmatchings/code_fa4c0_len_3bf0/func_802D6420.s +++ b/ver/us/asm/nonmatchings/code_fa4c0_len_3bf0/func_802D6420.s @@ -41,8 +41,8 @@ glabel func_802D6420 /* FAE58 802D64A8 256BA680 */ addiu $t3, $t3, %lo(D_8008A680) /* FAE5C 802D64AC 240A0001 */ addiu $t2, $zero, 1 /* FAE60 802D64B0 0260382D */ daddu $a3, $s3, $zero -/* FAE64 802D64B4 3C03800A */ lui $v1, %hi(D_8009A650) -/* FAE68 802D64B8 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* FAE64 802D64B4 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* FAE68 802D64B8 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* FAE6C 802D64BC 8C620000 */ lw $v0, ($v1) /* FAE70 802D64C0 0220302D */ daddu $a2, $s1, $zero /* FAE74 802D64C4 34420040 */ ori $v0, $v0, 0x40 diff --git a/ver/us/asm/nonmatchings/code_fa4c0_len_3bf0/func_802D663C.s b/ver/us/asm/nonmatchings/code_fa4c0_len_3bf0/func_802D663C.s index 08c7829a7d..7e7e4d6cca 100644 --- a/ver/us/asm/nonmatchings/code_fa4c0_len_3bf0/func_802D663C.s +++ b/ver/us/asm/nonmatchings/code_fa4c0_len_3bf0/func_802D663C.s @@ -41,8 +41,8 @@ glabel func_802D663C /* FB074 802D66C4 256BA680 */ addiu $t3, $t3, %lo(D_8008A680) /* FB078 802D66C8 240A0001 */ addiu $t2, $zero, 1 /* FB07C 802D66CC 0260382D */ daddu $a3, $s3, $zero -/* FB080 802D66D0 3C03800A */ lui $v1, %hi(D_8009A650) -/* FB084 802D66D4 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* FB080 802D66D0 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* FB084 802D66D4 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* FB088 802D66D8 8C620000 */ lw $v0, ($v1) /* FB08C 802D66DC 0220302D */ daddu $a2, $s1, $zero /* FB090 802D66E0 34420040 */ ori $v0, $v0, 0x40 diff --git a/ver/us/asm/nonmatchings/world/area_dgb/dgb_04/C36530/func_802423EC_C3891C.s b/ver/us/asm/nonmatchings/world/area_dgb/dgb_04/C36530/func_802423EC_C3891C.s index 82fb48f241..33fafaa772 100644 --- a/ver/us/asm/nonmatchings/world/area_dgb/dgb_04/C36530/func_802423EC_C3891C.s +++ b/ver/us/asm/nonmatchings/world/area_dgb/dgb_04/C36530/func_802423EC_C3891C.s @@ -2,8 +2,8 @@ .set noreorder # don't insert nops after branches glabel func_802423EC_C3891C -/* C3891C 802423EC 3C02800A */ lui $v0, %hi(D_8009A650) -/* C38920 802423F0 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* C3891C 802423EC 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* C38920 802423F0 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* C38924 802423F4 8C430000 */ lw $v1, ($v0) /* C38928 802423F8 2404FFBF */ addiu $a0, $zero, -0x41 /* C3892C 802423FC 00641824 */ and $v1, $v1, $a0 diff --git a/ver/us/asm/nonmatchings/world/area_flo/flo_08/CAED40/func_8024001C_CAED5C.s b/ver/us/asm/nonmatchings/world/area_flo/flo_08/CAED40/func_8024001C_CAED5C.s index d173ce6993..40c7f36dd7 100644 --- a/ver/us/asm/nonmatchings/world/area_flo/flo_08/CAED40/func_8024001C_CAED5C.s +++ b/ver/us/asm/nonmatchings/world/area_flo/flo_08/CAED40/func_8024001C_CAED5C.s @@ -2,8 +2,8 @@ .set noreorder # don't insert nops after branches glabel func_8024001C_CAED5C -/* CAED5C 8024001C 3C02800A */ lui $v0, %hi(D_8009A650) -/* CAED60 80240020 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* CAED5C 8024001C 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* CAED60 80240020 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* CAED64 80240024 8C430000 */ lw $v1, ($v0) /* CAED68 80240028 2404FFBF */ addiu $a0, $zero, -0x41 /* CAED6C 8024002C 00641824 */ and $v1, $v1, $a0 diff --git a/ver/us/asm/nonmatchings/world/area_flo/flo_16/CD1F10/func_802400FC_CD1F2C.s b/ver/us/asm/nonmatchings/world/area_flo/flo_16/CD1F10/func_802400FC_CD1F2C.s index badd365d69..a34074c7b2 100644 --- a/ver/us/asm/nonmatchings/world/area_flo/flo_16/CD1F10/func_802400FC_CD1F2C.s +++ b/ver/us/asm/nonmatchings/world/area_flo/flo_16/CD1F10/func_802400FC_CD1F2C.s @@ -2,8 +2,8 @@ .set noreorder # don't insert nops after branches glabel func_802400FC_CD1F2C -/* CD1F2C 802400FC 3C02800A */ lui $v0, %hi(D_8009A650) -/* CD1F30 80240100 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* CD1F2C 802400FC 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* CD1F30 80240100 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* CD1F34 80240104 8C430000 */ lw $v1, ($v0) /* CD1F38 80240108 2404FFBF */ addiu $a0, $zero, -0x41 /* CD1F3C 8024010C 00641824 */ and $v1, $v1, $a0 diff --git a/ver/us/asm/nonmatchings/world/area_gv/gv_01/E1E460/func_80240688_E1EAE8.s b/ver/us/asm/nonmatchings/world/area_gv/gv_01/E1E460/func_80240688_E1EAE8.s index e785fb467a..ddc2d14def 100644 --- a/ver/us/asm/nonmatchings/world/area_gv/gv_01/E1E460/func_80240688_E1EAE8.s +++ b/ver/us/asm/nonmatchings/world/area_gv/gv_01/E1E460/func_80240688_E1EAE8.s @@ -13,8 +13,8 @@ glabel func_80240688_E1EAE8 /* E1EB08 802406A8 8C620000 */ lw $v0, ($v1) /* E1EB0C 802406AC A0400078 */ sb $zero, 0x78($v0) /* E1EB10 802406B0 8C620000 */ lw $v0, ($v1) -/* E1EB14 802406B4 3C04800A */ lui $a0, %hi(D_8009A650) -/* E1EB18 802406B8 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* E1EB14 802406B4 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* E1EB18 802406B8 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* E1EB1C 802406BC A040007D */ sb $zero, 0x7d($v0) /* E1EB20 802406C0 8C820000 */ lw $v0, ($a0) /* E1EB24 802406C4 2403FFF7 */ addiu $v1, $zero, -9 diff --git a/ver/us/asm/nonmatchings/world/area_isk/isk_10/988B60/func_8024001C_988B7C.s b/ver/us/asm/nonmatchings/world/area_isk/isk_10/988B60/func_8024001C_988B7C.s index dd6ceca2de..55c7951b8e 100644 --- a/ver/us/asm/nonmatchings/world/area_isk/isk_10/988B60/func_8024001C_988B7C.s +++ b/ver/us/asm/nonmatchings/world/area_isk/isk_10/988B60/func_8024001C_988B7C.s @@ -2,8 +2,8 @@ .set noreorder # don't insert nops after branches glabel func_8024001C_988B7C -/* 988B7C 8024001C 3C02800A */ lui $v0, %hi(D_8009A650) -/* 988B80 80240020 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* 988B7C 8024001C 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 988B80 80240020 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* 988B84 80240024 8C430000 */ lw $v1, ($v0) /* 988B88 80240028 2404FFBF */ addiu $a0, $zero, -0x41 /* 988B8C 8024002C 00641824 */ and $v1, $v1, $a0 diff --git a/ver/us/asm/nonmatchings/world/area_iwa/iwa_10/91E6D0/func_8024030C_91E87C.s b/ver/us/asm/nonmatchings/world/area_iwa/iwa_10/91E6D0/func_8024030C_91E87C.s index dffc98af34..0a6b32760d 100644 --- a/ver/us/asm/nonmatchings/world/area_iwa/iwa_10/91E6D0/func_8024030C_91E87C.s +++ b/ver/us/asm/nonmatchings/world/area_iwa/iwa_10/91E6D0/func_8024030C_91E87C.s @@ -2,8 +2,8 @@ .set noreorder # don't insert nops after branches glabel func_8024030C_91E87C -/* 91E87C 8024030C 3C02800A */ lui $v0, %hi(D_8009A650) -/* 91E880 80240310 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* 91E87C 8024030C 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 91E880 80240310 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* 91E884 80240314 8C430000 */ lw $v1, ($v0) /* 91E888 80240318 2404FFBF */ addiu $a0, $zero, -0x41 /* 91E88C 8024031C 00641824 */ and $v1, $v1, $a0 diff --git a/ver/us/asm/nonmatchings/world/area_jan/jan_08/B5E910/func_8024067C_B5E92C.s b/ver/us/asm/nonmatchings/world/area_jan/jan_08/B5E910/func_8024067C_B5E92C.s index 44579ab331..de047581ec 100644 --- a/ver/us/asm/nonmatchings/world/area_jan/jan_08/B5E910/func_8024067C_B5E92C.s +++ b/ver/us/asm/nonmatchings/world/area_jan/jan_08/B5E910/func_8024067C_B5E92C.s @@ -2,8 +2,8 @@ .set noreorder # don't insert nops after branches glabel func_8024067C_B5E92C -/* B5E92C 8024067C 3C02800A */ lui $v0, %hi(D_8009A650) -/* B5E930 80240680 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* B5E92C 8024067C 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* B5E930 80240680 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* B5E934 80240684 8C430000 */ lw $v1, ($v0) /* B5E938 80240688 2404FFBF */ addiu $a0, $zero, -0x41 /* B5E93C 8024068C 00641824 */ and $v1, $v1, $a0 diff --git a/ver/us/asm/nonmatchings/world/area_kmr/kmr_23/907A40/func_80240D14_908744.s b/ver/us/asm/nonmatchings/world/area_kmr/kmr_23/907A40/func_80240D14_908744.s index 1a7ae46a94..242a6f6f2d 100644 --- a/ver/us/asm/nonmatchings/world/area_kmr/kmr_23/907A40/func_80240D14_908744.s +++ b/ver/us/asm/nonmatchings/world/area_kmr/kmr_23/907A40/func_80240D14_908744.s @@ -9,8 +9,8 @@ glabel func_80240D14_908744 /* 908754 80240D24 0C0B1EAF */ jal get_variable /* 908758 80240D28 0000202D */ daddu $a0, $zero, $zero /* 90875C 80240D2C 24030001 */ addiu $v1, $zero, 1 -/* 908760 80240D30 3C05800A */ lui $a1, %hi(D_8009A650) -/* 908764 80240D34 24A5A650 */ addiu $a1, $a1, %lo(D_8009A650) +/* 908760 80240D30 3C05800A */ lui $a1, %hi(gOverrideFlags) +/* 908764 80240D34 24A5A650 */ addiu $a1, $a1, %lo(gOverrideFlags) /* 908768 80240D38 A443001E */ sh $v1, 0x1e($v0) /* 90876C 80240D3C 8CA30000 */ lw $v1, ($a1) /* 908770 80240D40 3C040010 */ lui $a0, 0x10 diff --git a/ver/us/asm/nonmatchings/world/area_kmr/kmr_23/907A40/func_80240D5C_90878C.s b/ver/us/asm/nonmatchings/world/area_kmr/kmr_23/907A40/func_80240D5C_90878C.s index 93018dc848..8d9abb9055 100644 --- a/ver/us/asm/nonmatchings/world/area_kmr/kmr_23/907A40/func_80240D5C_90878C.s +++ b/ver/us/asm/nonmatchings/world/area_kmr/kmr_23/907A40/func_80240D5C_90878C.s @@ -9,8 +9,8 @@ glabel func_80240D5C_90878C /* 90879C 80240D6C 0C0B1EAF */ jal get_variable /* 9087A0 80240D70 0000202D */ daddu $a0, $zero, $zero /* 9087A4 80240D74 3C05FFEF */ lui $a1, 0xffef -/* 9087A8 80240D78 3C04800A */ lui $a0, %hi(D_8009A650) -/* 9087AC 80240D7C 2484A650 */ addiu $a0, $a0, %lo(D_8009A650) +/* 9087A8 80240D78 3C04800A */ lui $a0, %hi(gOverrideFlags) +/* 9087AC 80240D7C 2484A650 */ addiu $a0, $a0, %lo(gOverrideFlags) /* 9087B0 80240D80 A440001E */ sh $zero, 0x1e($v0) /* 9087B4 80240D84 8C830000 */ lw $v1, ($a0) /* 9087B8 80240D88 34A5FFFF */ ori $a1, $a1, 0xffff diff --git a/ver/us/asm/nonmatchings/world/area_kzn/kzn_04/C68440/func_8024032C_C6845C.s b/ver/us/asm/nonmatchings/world/area_kzn/kzn_04/C68440/func_8024032C_C6845C.s index fb58b06cd9..c7f4c708a3 100644 --- a/ver/us/asm/nonmatchings/world/area_kzn/kzn_04/C68440/func_8024032C_C6845C.s +++ b/ver/us/asm/nonmatchings/world/area_kzn/kzn_04/C68440/func_8024032C_C6845C.s @@ -2,8 +2,8 @@ .set noreorder # don't insert nops after branches glabel func_8024032C_C6845C -/* C6845C 8024032C 3C02800A */ lui $v0, %hi(D_8009A650) -/* C68460 80240330 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* C6845C 8024032C 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* C68460 80240330 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* C68464 80240334 8C430000 */ lw $v1, ($v0) /* C68468 80240338 2404FFBF */ addiu $a0, $zero, -0x41 /* C6846C 8024033C 00641824 */ and $v1, $v1, $a0 diff --git a/ver/us/asm/nonmatchings/world/area_kzn/kzn_09/C76CE0/func_8024001C_C76CFC.s b/ver/us/asm/nonmatchings/world/area_kzn/kzn_09/C76CE0/func_8024001C_C76CFC.s index 5002a43893..0a5822d438 100644 --- a/ver/us/asm/nonmatchings/world/area_kzn/kzn_09/C76CE0/func_8024001C_C76CFC.s +++ b/ver/us/asm/nonmatchings/world/area_kzn/kzn_09/C76CE0/func_8024001C_C76CFC.s @@ -2,8 +2,8 @@ .set noreorder # don't insert nops after branches glabel func_8024001C_C76CFC -/* C76CFC 8024001C 3C02800A */ lui $v0, %hi(D_8009A650) -/* C76D00 80240020 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* C76CFC 8024001C 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* C76D00 80240020 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* C76D04 80240024 8C430000 */ lw $v1, ($v0) /* C76D08 80240028 2404FFBF */ addiu $a0, $zero, -0x41 /* C76D0C 8024002C 00641824 */ and $v1, $v1, $a0 diff --git a/ver/us/asm/nonmatchings/world/area_mac/machi/7E73A0/func_80240048_7E73E8.s b/ver/us/asm/nonmatchings/world/area_mac/machi/7E73A0/func_80240048_7E73E8.s index 0d227d02c2..15e928d1b1 100644 --- a/ver/us/asm/nonmatchings/world/area_mac/machi/7E73A0/func_80240048_7E73E8.s +++ b/ver/us/asm/nonmatchings/world/area_mac/machi/7E73A0/func_80240048_7E73E8.s @@ -7,8 +7,8 @@ glabel func_80240048_7E73E8 /* 7E73F0 80240050 0080802D */ daddu $s0, $a0, $zero /* 7E73F4 80240054 10A00008 */ beqz $a1, .L80240078 /* 7E73F8 80240058 AFBF0014 */ sw $ra, 0x14($sp) -/* 7E73FC 8024005C 3C03800A */ lui $v1, %hi(D_8009A650) -/* 7E7400 80240060 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* 7E73FC 8024005C 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* 7E7400 80240060 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* 7E7404 80240064 8C620000 */ lw $v0, ($v1) /* 7E7408 80240068 AE000070 */ sw $zero, 0x70($s0) /* 7E740C 8024006C AE000074 */ sw $zero, 0x74($s0) diff --git a/ver/us/asm/nonmatchings/world/area_mac/machi/7E73A0/func_80240114_7E74B4.s b/ver/us/asm/nonmatchings/world/area_mac/machi/7E73A0/func_80240114_7E74B4.s index 4fbad5ba24..8f78ff2094 100644 --- a/ver/us/asm/nonmatchings/world/area_mac/machi/7E73A0/func_80240114_7E74B4.s +++ b/ver/us/asm/nonmatchings/world/area_mac/machi/7E73A0/func_80240114_7E74B4.s @@ -7,8 +7,8 @@ glabel func_80240114_7E74B4 /* 7E74BC 8024011C 0080802D */ daddu $s0, $a0, $zero /* 7E74C0 80240120 10A00009 */ beqz $a1, .L80240148 /* 7E74C4 80240124 AFBF0014 */ sw $ra, 0x14($sp) -/* 7E74C8 80240128 3C02800A */ lui $v0, %hi(D_8009A650) -/* 7E74CC 8024012C 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* 7E74C8 80240128 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 7E74CC 8024012C 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* 7E74D0 80240130 AE000070 */ sw $zero, 0x70($s0) /* 7E74D4 80240134 8C430000 */ lw $v1, ($v0) /* 7E74D8 80240138 240400FF */ addiu $a0, $zero, 0xff @@ -25,8 +25,8 @@ glabel func_80240114_7E74B4 /* 7E7500 80240160 14400009 */ bnez $v0, .L80240188 /* 7E7504 80240164 2442FFF6 */ addiu $v0, $v0, -0xa /* 7E7508 80240168 24020002 */ addiu $v0, $zero, 2 -/* 7E750C 8024016C 3C03800A */ lui $v1, %hi(D_8009A650) -/* 7E7510 80240170 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* 7E750C 8024016C 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* 7E7510 80240170 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* 7E7514 80240174 8C640000 */ lw $a0, ($v1) /* 7E7518 80240178 2405FFEF */ addiu $a1, $zero, -0x11 /* 7E751C 8024017C 00852024 */ and $a0, $a0, $a1 diff --git a/ver/us/asm/nonmatchings/world/area_mgm/mgm_01/E12930/func_802403FC_E12B5C.s b/ver/us/asm/nonmatchings/world/area_mgm/mgm_01/E12930/func_802403FC_E12B5C.s index abba01593f..b178232505 100644 --- a/ver/us/asm/nonmatchings/world/area_mgm/mgm_01/E12930/func_802403FC_E12B5C.s +++ b/ver/us/asm/nonmatchings/world/area_mgm/mgm_01/E12930/func_802403FC_E12B5C.s @@ -3,8 +3,8 @@ glabel func_802403FC_E12B5C /* E12B5C 802403FC 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* E12B60 80240400 3C02800A */ lui $v0, %hi(D_8009A650) -/* E12B64 80240404 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* E12B60 80240400 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* E12B64 80240404 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* E12B68 80240408 AFBF0010 */ sw $ra, 0x10($sp) /* E12B6C 8024040C 8C430000 */ lw $v1, ($v0) /* E12B70 80240410 3C040004 */ lui $a0, 4 diff --git a/ver/us/asm/nonmatchings/world/area_mgm/mgm_01/E12930/func_80240438_E12B98.s b/ver/us/asm/nonmatchings/world/area_mgm/mgm_01/E12930/func_80240438_E12B98.s index ba91a71738..0b3f8b9d3b 100644 --- a/ver/us/asm/nonmatchings/world/area_mgm/mgm_01/E12930/func_80240438_E12B98.s +++ b/ver/us/asm/nonmatchings/world/area_mgm/mgm_01/E12930/func_80240438_E12B98.s @@ -3,8 +3,8 @@ glabel func_80240438_E12B98 /* E12B98 80240438 3C04FFFB */ lui $a0, 0xfffb -/* E12B9C 8024043C 3C03800A */ lui $v1, %hi(D_8009A650) -/* E12BA0 80240440 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* E12B9C 8024043C 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* E12BA0 80240440 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* E12BA4 80240444 8C620000 */ lw $v0, ($v1) /* E12BA8 80240448 3484FFFF */ ori $a0, $a0, 0xffff /* E12BAC 8024044C 00441024 */ and $v0, $v0, $a0 diff --git a/ver/us/asm/nonmatchings/world/area_mgm/mgm_02/E15D80/func_80240544_E162C4.s b/ver/us/asm/nonmatchings/world/area_mgm/mgm_02/E15D80/func_80240544_E162C4.s index 6aac50b726..ad22b5b77a 100644 --- a/ver/us/asm/nonmatchings/world/area_mgm/mgm_02/E15D80/func_80240544_E162C4.s +++ b/ver/us/asm/nonmatchings/world/area_mgm/mgm_02/E15D80/func_80240544_E162C4.s @@ -3,8 +3,8 @@ glabel func_80240544_E162C4 /* E162C4 80240544 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* E162C8 80240548 3C02800A */ lui $v0, %hi(D_8009A650) -/* E162CC 8024054C 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* E162C8 80240548 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* E162CC 8024054C 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* E162D0 80240550 AFBF0010 */ sw $ra, 0x10($sp) /* E162D4 80240554 8C430000 */ lw $v1, ($v0) /* E162D8 80240558 3C040004 */ lui $a0, 4 diff --git a/ver/us/asm/nonmatchings/world/area_mgm/mgm_02/E15D80/func_80240580_E16300.s b/ver/us/asm/nonmatchings/world/area_mgm/mgm_02/E15D80/func_80240580_E16300.s index d18696c29f..fc964af420 100644 --- a/ver/us/asm/nonmatchings/world/area_mgm/mgm_02/E15D80/func_80240580_E16300.s +++ b/ver/us/asm/nonmatchings/world/area_mgm/mgm_02/E15D80/func_80240580_E16300.s @@ -3,8 +3,8 @@ glabel func_80240580_E16300 /* E16300 80240580 3C04FFFB */ lui $a0, 0xfffb -/* E16304 80240584 3C03800A */ lui $v1, %hi(D_8009A650) -/* E16308 80240588 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* E16304 80240584 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* E16308 80240588 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* E1630C 8024058C 8C620000 */ lw $v0, ($v1) /* E16310 80240590 3484FFFF */ ori $a0, $a0, 0xffff /* E16314 80240594 00441024 */ and $v0, $v0, $a0 diff --git a/ver/us/asm/nonmatchings/world/area_obk/obk_07/BCF0F0/func_80241168_BCFD58.s b/ver/us/asm/nonmatchings/world/area_obk/obk_07/BCF0F0/func_80241168_BCFD58.s index bac270c4a8..8af20fbf9e 100644 --- a/ver/us/asm/nonmatchings/world/area_obk/obk_07/BCF0F0/func_80241168_BCFD58.s +++ b/ver/us/asm/nonmatchings/world/area_obk/obk_07/BCF0F0/func_80241168_BCFD58.s @@ -9,8 +9,8 @@ glabel func_80241168_BCFD58 /* BCFD68 80241178 AFB00010 */ sw $s0, 0x10($sp) /* BCFD6C 8024117C 3C048024 */ lui $a0, %hi(func_80240A6C_BCF65C) /* BCFD70 80241180 24840A6C */ addiu $a0, $a0, %lo(func_80240A6C_BCF65C) -/* BCFD74 80241184 3C06800A */ lui $a2, %hi(D_8009A650) -/* BCFD78 80241188 24C6A650 */ addiu $a2, $a2, %lo(D_8009A650) +/* BCFD74 80241184 3C06800A */ lui $a2, %hi(gOverrideFlags) +/* BCFD78 80241188 24C6A650 */ addiu $a2, $a2, %lo(gOverrideFlags) /* BCFD7C 8024118C 3C058024 */ lui $a1, %hi(func_802410C0_BCFCB0) /* BCFD80 80241190 24A510C0 */ addiu $a1, $a1, %lo(func_802410C0_BCFCB0) /* BCFD84 80241194 8CC30000 */ lw $v1, ($a2) diff --git a/ver/us/asm/nonmatchings/world/area_obk/obk_07/BCF0F0/func_802413D0_BCFFC0.s b/ver/us/asm/nonmatchings/world/area_obk/obk_07/BCF0F0/func_802413D0_BCFFC0.s index e02c61ff2b..8b8f16e793 100644 --- a/ver/us/asm/nonmatchings/world/area_obk/obk_07/BCF0F0/func_802413D0_BCFFC0.s +++ b/ver/us/asm/nonmatchings/world/area_obk/obk_07/BCF0F0/func_802413D0_BCFFC0.s @@ -8,8 +8,8 @@ glabel func_802413D0_BCFFC0 /* BCFFCC 802413DC AFB00010 */ sw $s0, 0x10($sp) /* BCFFD0 802413E0 0040802D */ daddu $s0, $v0, $zero /* BCFFD4 802413E4 2402FFFF */ addiu $v0, $zero, -1 -/* BCFFD8 802413E8 3C05800A */ lui $a1, %hi(D_8009A650) -/* BCFFDC 802413EC 24A5A650 */ addiu $a1, $a1, %lo(D_8009A650) +/* BCFFD8 802413E8 3C05800A */ lui $a1, %hi(gOverrideFlags) +/* BCFFDC 802413EC 24A5A650 */ addiu $a1, $a1, %lo(gOverrideFlags) /* BCFFE0 802413F0 2403FFEF */ addiu $v1, $zero, -0x11 /* BCFFE4 802413F4 AE020030 */ sw $v0, 0x30($s0) /* BCFFE8 802413F8 8CA20000 */ lw $v0, ($a1) diff --git a/ver/us/asm/nonmatchings/world/area_omo/omo_11/DDCFC0/func_802407AC_DDCFDC.s b/ver/us/asm/nonmatchings/world/area_omo/omo_11/DDCFC0/func_802407AC_DDCFDC.s index 6d82ebaa95..6634e6a891 100644 --- a/ver/us/asm/nonmatchings/world/area_omo/omo_11/DDCFC0/func_802407AC_DDCFDC.s +++ b/ver/us/asm/nonmatchings/world/area_omo/omo_11/DDCFC0/func_802407AC_DDCFDC.s @@ -2,8 +2,8 @@ .set noreorder # don't insert nops after branches glabel func_802407AC_DDCFDC -/* DDCFDC 802407AC 3C02800A */ lui $v0, %hi(D_8009A650) -/* DDCFE0 802407B0 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* DDCFDC 802407AC 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* DDCFE0 802407B0 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* DDCFE4 802407B4 8C430000 */ lw $v1, ($v0) /* DDCFE8 802407B8 2404FFBF */ addiu $a0, $zero, -0x41 /* DDCFEC 802407BC 00641824 */ and $v1, $v1, $a0 diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_01/D4D060/func_8024049C_D4D4DC.s b/ver/us/asm/nonmatchings/world/area_pra/pra_01/D4D060/func_8024049C_D4D4DC.s index 8aa8d71569..487376d294 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_01/D4D060/func_8024049C_D4D4DC.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_01/D4D060/func_8024049C_D4D4DC.s @@ -17,8 +17,8 @@ glabel func_8024049C_D4D4DC /* D4D50C 802404CC 0000202D */ daddu $a0, $zero, $zero /* D4D510 802404D0 8E03013C */ lw $v1, 0x13c($s0) /* D4D514 802404D4 AC620000 */ sw $v0, ($v1) -/* D4D518 802404D8 3C03800A */ lui $v1, %hi(D_8009A650) -/* D4D51C 802404DC 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D4D518 802404D8 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D4D51C 802404DC 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D4D520 802404E0 8C620000 */ lw $v0, ($v1) /* D4D524 802404E4 34420080 */ ori $v0, $v0, 0x80 /* D4D528 802404E8 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_02/D50010/func_8024049C_D5048C.s b/ver/us/asm/nonmatchings/world/area_pra/pra_02/D50010/func_8024049C_D5048C.s index 23025dc267..a3bcccdb90 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_02/D50010/func_8024049C_D5048C.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_02/D50010/func_8024049C_D5048C.s @@ -17,8 +17,8 @@ glabel func_8024049C_D5048C /* D504BC 802404CC 0000202D */ daddu $a0, $zero, $zero /* D504C0 802404D0 8E03013C */ lw $v1, 0x13c($s0) /* D504C4 802404D4 AC620000 */ sw $v0, ($v1) -/* D504C8 802404D8 3C03800A */ lui $v1, %hi(D_8009A650) -/* D504CC 802404DC 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D504C8 802404D8 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D504CC 802404DC 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D504D0 802404E0 8C620000 */ lw $v0, ($v1) /* D504D4 802404E4 34420080 */ ori $v0, $v0, 0x80 /* D504D8 802404E8 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_05/D55BD0/func_8024049C_D5604C.s b/ver/us/asm/nonmatchings/world/area_pra/pra_05/D55BD0/func_8024049C_D5604C.s index 3f3e5fb6a0..3e8f748677 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_05/D55BD0/func_8024049C_D5604C.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_05/D55BD0/func_8024049C_D5604C.s @@ -17,8 +17,8 @@ glabel func_8024049C_D5604C /* D5607C 802404CC 0000202D */ daddu $a0, $zero, $zero /* D56080 802404D0 8E03013C */ lw $v1, 0x13c($s0) /* D56084 802404D4 AC620000 */ sw $v0, ($v1) -/* D56088 802404D8 3C03800A */ lui $v1, %hi(D_8009A650) -/* D5608C 802404DC 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D56088 802404D8 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D5608C 802404DC 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D56090 802404E0 8C620000 */ lw $v0, ($v1) /* D56094 802404E4 34420080 */ ori $v0, $v0, 0x80 /* D56098 802404E8 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_06/D57430/func_802404CC_D578FC.s b/ver/us/asm/nonmatchings/world/area_pra/pra_06/D57430/func_802404CC_D578FC.s index 0a034d077b..3a0eec14a7 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_06/D57430/func_802404CC_D578FC.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_06/D57430/func_802404CC_D578FC.s @@ -17,8 +17,8 @@ glabel func_802404CC_D578FC /* D5792C 802404FC 0000202D */ daddu $a0, $zero, $zero /* D57930 80240500 8E03013C */ lw $v1, 0x13c($s0) /* D57934 80240504 AC620000 */ sw $v0, ($v1) -/* D57938 80240508 3C03800A */ lui $v1, %hi(D_8009A650) -/* D5793C 8024050C 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D57938 80240508 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D5793C 8024050C 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D57940 80240510 8C620000 */ lw $v0, ($v1) /* D57944 80240514 34420080 */ ori $v0, $v0, 0x80 /* D57948 80240518 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_09/D588B0/func_8024049C_D58D2C.s b/ver/us/asm/nonmatchings/world/area_pra/pra_09/D588B0/func_8024049C_D58D2C.s index 5dd36386d4..50fe463dc6 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_09/D588B0/func_8024049C_D58D2C.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_09/D588B0/func_8024049C_D58D2C.s @@ -17,8 +17,8 @@ glabel func_8024049C_D58D2C /* D58D5C 802404CC 0000202D */ daddu $a0, $zero, $zero /* D58D60 802404D0 8E03013C */ lw $v1, 0x13c($s0) /* D58D64 802404D4 AC620000 */ sw $v0, ($v1) -/* D58D68 802404D8 3C03800A */ lui $v1, %hi(D_8009A650) -/* D58D6C 802404DC 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D58D68 802404D8 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D58D6C 802404DC 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D58D70 802404E0 8C620000 */ lw $v0, ($v1) /* D58D74 802404E4 34420080 */ ori $v0, $v0, 0x80 /* D58D78 802404E8 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_10/D5F2D0/func_8024049C_D5F74C.s b/ver/us/asm/nonmatchings/world/area_pra/pra_10/D5F2D0/func_8024049C_D5F74C.s index e3b616f2ea..b8345c3041 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_10/D5F2D0/func_8024049C_D5F74C.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_10/D5F2D0/func_8024049C_D5F74C.s @@ -17,8 +17,8 @@ glabel func_8024049C_D5F74C /* D5F77C 802404CC 0000202D */ daddu $a0, $zero, $zero /* D5F780 802404D0 8E03013C */ lw $v1, 0x13c($s0) /* D5F784 802404D4 AC620000 */ sw $v0, ($v1) -/* D5F788 802404D8 3C03800A */ lui $v1, %hi(D_8009A650) -/* D5F78C 802404DC 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D5F788 802404D8 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D5F78C 802404DC 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D5F790 802404E0 8C620000 */ lw $v0, ($v1) /* D5F794 802404E4 34420080 */ ori $v0, $v0, 0x80 /* D5F798 802404E8 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_11/D61520/func_8024049C_D6199C.s b/ver/us/asm/nonmatchings/world/area_pra/pra_11/D61520/func_8024049C_D6199C.s index 5e7b8cdbdb..0cd757767f 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_11/D61520/func_8024049C_D6199C.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_11/D61520/func_8024049C_D6199C.s @@ -17,8 +17,8 @@ glabel func_8024049C_D6199C /* D619CC 802404CC 0000202D */ daddu $a0, $zero, $zero /* D619D0 802404D0 8E03013C */ lw $v1, 0x13c($s0) /* D619D4 802404D4 AC620000 */ sw $v0, ($v1) -/* D619D8 802404D8 3C03800A */ lui $v1, %hi(D_8009A650) -/* D619DC 802404DC 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D619D8 802404D8 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D619DC 802404DC 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D619E0 802404E0 8C620000 */ lw $v0, ($v1) /* D619E4 802404E4 34420080 */ ori $v0, $v0, 0x80 /* D619E8 802404E8 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_12/D62D10/func_802404CC_D631DC.s b/ver/us/asm/nonmatchings/world/area_pra/pra_12/D62D10/func_802404CC_D631DC.s index da3d3ee08a..c671533198 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_12/D62D10/func_802404CC_D631DC.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_12/D62D10/func_802404CC_D631DC.s @@ -17,8 +17,8 @@ glabel func_802404CC_D631DC /* D6320C 802404FC 0000202D */ daddu $a0, $zero, $zero /* D63210 80240500 8E03013C */ lw $v1, 0x13c($s0) /* D63214 80240504 AC620000 */ sw $v0, ($v1) -/* D63218 80240508 3C03800A */ lui $v1, %hi(D_8009A650) -/* D6321C 8024050C 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D63218 80240508 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D6321C 8024050C 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D63220 80240510 8C620000 */ lw $v0, ($v1) /* D63224 80240514 34420080 */ ori $v0, $v0, 0x80 /* D63228 80240518 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_13/D64600/func_8024049C_D64A7C.s b/ver/us/asm/nonmatchings/world/area_pra/pra_13/D64600/func_8024049C_D64A7C.s index 2e9fae051f..5422743696 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_13/D64600/func_8024049C_D64A7C.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_13/D64600/func_8024049C_D64A7C.s @@ -17,8 +17,8 @@ glabel func_8024049C_D64A7C /* D64AAC 802404CC 0000202D */ daddu $a0, $zero, $zero /* D64AB0 802404D0 8E03013C */ lw $v1, 0x13c($s0) /* D64AB4 802404D4 AC620000 */ sw $v0, ($v1) -/* D64AB8 802404D8 3C03800A */ lui $v1, %hi(D_8009A650) -/* D64ABC 802404DC 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D64AB8 802404D8 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D64ABC 802404DC 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D64AC0 802404E0 8C620000 */ lw $v0, ($v1) /* D64AC4 802404E4 34420080 */ ori $v0, $v0, 0x80 /* D64AC8 802404E8 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_14/D67D20/func_8024049C_D6819C.s b/ver/us/asm/nonmatchings/world/area_pra/pra_14/D67D20/func_8024049C_D6819C.s index d445518003..242e07309f 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_14/D67D20/func_8024049C_D6819C.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_14/D67D20/func_8024049C_D6819C.s @@ -17,8 +17,8 @@ glabel func_8024049C_D6819C /* D681CC 802404CC 0000202D */ daddu $a0, $zero, $zero /* D681D0 802404D0 8E03013C */ lw $v1, 0x13c($s0) /* D681D4 802404D4 AC620000 */ sw $v0, ($v1) -/* D681D8 802404D8 3C03800A */ lui $v1, %hi(D_8009A650) -/* D681DC 802404DC 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D681D8 802404D8 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D681DC 802404DC 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D681E0 802404E0 8C620000 */ lw $v0, ($v1) /* D681E4 802404E4 34420080 */ ori $v0, $v0, 0x80 /* D681E8 802404E8 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_15/D69830/func_80240020_D69830.s b/ver/us/asm/nonmatchings/world/area_pra/pra_15/D69830/func_80240020_D69830.s index d1276f07d5..b4e26e8928 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_15/D69830/func_80240020_D69830.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_15/D69830/func_80240020_D69830.s @@ -2,8 +2,8 @@ .set noreorder # don't insert nops after branches glabel func_80240020_D69830 -/* D69830 80240020 3C02800A */ lui $v0, %hi(D_8009A650) -/* D69834 80240024 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* D69830 80240020 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* D69834 80240024 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* D69838 80240028 8C430000 */ lw $v1, ($v0) /* D6983C 8024002C 2404FF7F */ addiu $a0, $zero, -0x81 /* D69840 80240030 00641824 */ and $v1, $v1, $a0 diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_16/D69B40/func_8024049C_D69FBC.s b/ver/us/asm/nonmatchings/world/area_pra/pra_16/D69B40/func_8024049C_D69FBC.s index 1c7b5d7038..b113c2de38 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_16/D69B40/func_8024049C_D69FBC.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_16/D69B40/func_8024049C_D69FBC.s @@ -17,8 +17,8 @@ glabel func_8024049C_D69FBC /* D69FEC 802404CC 0000202D */ daddu $a0, $zero, $zero /* D69FF0 802404D0 8E03013C */ lw $v1, 0x13c($s0) /* D69FF4 802404D4 AC620000 */ sw $v0, ($v1) -/* D69FF8 802404D8 3C03800A */ lui $v1, %hi(D_8009A650) -/* D69FFC 802404DC 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D69FF8 802404D8 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D69FFC 802404DC 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D6A000 802404E0 8C620000 */ lw $v0, ($v1) /* D6A004 802404E4 34420080 */ ori $v0, $v0, 0x80 /* D6A008 802404E8 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_18/D6B640/func_8024049C_D6BABC.s b/ver/us/asm/nonmatchings/world/area_pra/pra_18/D6B640/func_8024049C_D6BABC.s index 1d4cd6866e..2ce381d75b 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_18/D6B640/func_8024049C_D6BABC.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_18/D6B640/func_8024049C_D6BABC.s @@ -17,8 +17,8 @@ glabel func_8024049C_D6BABC /* D6BAEC 802404CC 0000202D */ daddu $a0, $zero, $zero /* D6BAF0 802404D0 8E03013C */ lw $v1, 0x13c($s0) /* D6BAF4 802404D4 AC620000 */ sw $v0, ($v1) -/* D6BAF8 802404D8 3C03800A */ lui $v1, %hi(D_8009A650) -/* D6BAFC 802404DC 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D6BAF8 802404D8 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D6BAFC 802404DC 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D6BB00 802404E0 8C620000 */ lw $v0, ($v1) /* D6BB04 802404E4 34420080 */ ori $v0, $v0, 0x80 /* D6BB08 802404E8 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_19/D6E9D0/func_8024049C_D6EE4C.s b/ver/us/asm/nonmatchings/world/area_pra/pra_19/D6E9D0/func_8024049C_D6EE4C.s index f7b46c9fda..f92b1bd023 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_19/D6E9D0/func_8024049C_D6EE4C.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_19/D6E9D0/func_8024049C_D6EE4C.s @@ -17,8 +17,8 @@ glabel func_8024049C_D6EE4C /* D6EE7C 802404CC 0000202D */ daddu $a0, $zero, $zero /* D6EE80 802404D0 8E03013C */ lw $v1, 0x13c($s0) /* D6EE84 802404D4 AC620000 */ sw $v0, ($v1) -/* D6EE88 802404D8 3C03800A */ lui $v1, %hi(D_8009A650) -/* D6EE8C 802404DC 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D6EE88 802404D8 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D6EE8C 802404DC 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D6EE90 802404E0 8C620000 */ lw $v0, ($v1) /* D6EE94 802404E4 34420080 */ ori $v0, $v0, 0x80 /* D6EE98 802404E8 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_20/D763C0/func_8024049C_D7683C.s b/ver/us/asm/nonmatchings/world/area_pra/pra_20/D763C0/func_8024049C_D7683C.s index 2cbb099de7..dc12e3e2ee 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_20/D763C0/func_8024049C_D7683C.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_20/D763C0/func_8024049C_D7683C.s @@ -17,8 +17,8 @@ glabel func_8024049C_D7683C /* D7686C 802404CC 0000202D */ daddu $a0, $zero, $zero /* D76870 802404D0 8E03013C */ lw $v1, 0x13c($s0) /* D76874 802404D4 AC620000 */ sw $v0, ($v1) -/* D76878 802404D8 3C03800A */ lui $v1, %hi(D_8009A650) -/* D7687C 802404DC 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D76878 802404D8 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D7687C 802404DC 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D76880 802404E0 8C620000 */ lw $v0, ($v1) /* D76884 802404E4 34420080 */ ori $v0, $v0, 0x80 /* D76888 802404E8 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_27/D799F0/func_802404CC_D79EBC.s b/ver/us/asm/nonmatchings/world/area_pra/pra_27/D799F0/func_802404CC_D79EBC.s index 73e8aec25a..b03b393467 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_27/D799F0/func_802404CC_D79EBC.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_27/D799F0/func_802404CC_D79EBC.s @@ -17,8 +17,8 @@ glabel func_802404CC_D79EBC /* D79EEC 802404FC 0000202D */ daddu $a0, $zero, $zero /* D79EF0 80240500 8E03013C */ lw $v1, 0x13c($s0) /* D79EF4 80240504 AC620000 */ sw $v0, ($v1) -/* D79EF8 80240508 3C03800A */ lui $v1, %hi(D_8009A650) -/* D79EFC 8024050C 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D79EF8 80240508 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D79EFC 8024050C 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D79F00 80240510 8C620000 */ lw $v0, ($v1) /* D79F04 80240514 34420080 */ ori $v0, $v0, 0x80 /* D79F08 80240518 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_28/D7B2A0/func_802404CC_D7B76C.s b/ver/us/asm/nonmatchings/world/area_pra/pra_28/D7B2A0/func_802404CC_D7B76C.s index 71601098f5..688561db01 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_28/D7B2A0/func_802404CC_D7B76C.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_28/D7B2A0/func_802404CC_D7B76C.s @@ -17,8 +17,8 @@ glabel func_802404CC_D7B76C /* D7B79C 802404FC 0000202D */ daddu $a0, $zero, $zero /* D7B7A0 80240500 8E03013C */ lw $v1, 0x13c($s0) /* D7B7A4 80240504 AC620000 */ sw $v0, ($v1) -/* D7B7A8 80240508 3C03800A */ lui $v1, %hi(D_8009A650) -/* D7B7AC 8024050C 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D7B7A8 80240508 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D7B7AC 8024050C 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D7B7B0 80240510 8C620000 */ lw $v0, ($v1) /* D7B7B4 80240514 34420080 */ ori $v0, $v0, 0x80 /* D7B7B8 80240518 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_29/D7CB70/func_8024049C_D7CFEC.s b/ver/us/asm/nonmatchings/world/area_pra/pra_29/D7CB70/func_8024049C_D7CFEC.s index e29f16f146..bf483d1e03 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_29/D7CB70/func_8024049C_D7CFEC.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_29/D7CB70/func_8024049C_D7CFEC.s @@ -17,8 +17,8 @@ glabel func_8024049C_D7CFEC /* D7D01C 802404CC 0000202D */ daddu $a0, $zero, $zero /* D7D020 802404D0 8E03013C */ lw $v1, 0x13c($s0) /* D7D024 802404D4 AC620000 */ sw $v0, ($v1) -/* D7D028 802404D8 3C03800A */ lui $v1, %hi(D_8009A650) -/* D7D02C 802404DC 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D7D028 802404D8 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D7D02C 802404DC 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D7D030 802404E0 8C620000 */ lw $v0, ($v1) /* D7D034 802404E4 34420080 */ ori $v0, $v0, 0x80 /* D7D038 802404E8 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_32/D86A20/func_80240814_D87214.s b/ver/us/asm/nonmatchings/world/area_pra/pra_32/D86A20/func_80240814_D87214.s index c8a0a5f94d..e632bc9d86 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_32/D86A20/func_80240814_D87214.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_32/D86A20/func_80240814_D87214.s @@ -2,8 +2,8 @@ .set noreorder # don't insert nops after branches glabel func_80240814_D87214 -/* D87214 80240814 3C02800A */ lui $v0, %hi(D_8009A650) -/* D87218 80240818 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* D87214 80240814 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* D87218 80240818 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* D8721C 8024081C 8C430000 */ lw $v1, ($v0) /* D87220 80240820 2404FF7F */ addiu $a0, $zero, -0x81 /* D87224 80240824 00641824 */ and $v1, $v1, $a0 diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_33/D89700/func_8024049C_D89B7C.s b/ver/us/asm/nonmatchings/world/area_pra/pra_33/D89700/func_8024049C_D89B7C.s index 2ac0fe5b64..f13f2489ac 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_33/D89700/func_8024049C_D89B7C.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_33/D89700/func_8024049C_D89B7C.s @@ -17,8 +17,8 @@ glabel func_8024049C_D89B7C /* D89BAC 802404CC 0000202D */ daddu $a0, $zero, $zero /* D89BB0 802404D0 8E03013C */ lw $v1, 0x13c($s0) /* D89BB4 802404D4 AC620000 */ sw $v0, ($v1) -/* D89BB8 802404D8 3C03800A */ lui $v1, %hi(D_8009A650) -/* D89BBC 802404DC 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D89BB8 802404D8 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D89BBC 802404DC 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D89BC0 802404E0 8C620000 */ lw $v0, ($v1) /* D89BC4 802404E4 34420080 */ ori $v0, $v0, 0x80 /* D89BC8 802404E8 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_34/D8B3D0/func_8024049C_D8B84C.s b/ver/us/asm/nonmatchings/world/area_pra/pra_34/D8B3D0/func_8024049C_D8B84C.s index e113cc9322..c6d0466245 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_34/D8B3D0/func_8024049C_D8B84C.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_34/D8B3D0/func_8024049C_D8B84C.s @@ -17,8 +17,8 @@ glabel func_8024049C_D8B84C /* D8B87C 802404CC 0000202D */ daddu $a0, $zero, $zero /* D8B880 802404D0 8E03013C */ lw $v1, 0x13c($s0) /* D8B884 802404D4 AC620000 */ sw $v0, ($v1) -/* D8B888 802404D8 3C03800A */ lui $v1, %hi(D_8009A650) -/* D8B88C 802404DC 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D8B888 802404D8 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D8B88C 802404DC 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D8B890 802404E0 8C620000 */ lw $v0, ($v1) /* D8B894 802404E4 34420080 */ ori $v0, $v0, 0x80 /* D8B898 802404E8 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_35/D8D270/func_8024049C_D8D6EC.s b/ver/us/asm/nonmatchings/world/area_pra/pra_35/D8D270/func_8024049C_D8D6EC.s index 7985c2c1ee..baf357b7f1 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_35/D8D270/func_8024049C_D8D6EC.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_35/D8D270/func_8024049C_D8D6EC.s @@ -17,8 +17,8 @@ glabel func_8024049C_D8D6EC /* D8D71C 802404CC 0000202D */ daddu $a0, $zero, $zero /* D8D720 802404D0 8E03013C */ lw $v1, 0x13c($s0) /* D8D724 802404D4 AC620000 */ sw $v0, ($v1) -/* D8D728 802404D8 3C03800A */ lui $v1, %hi(D_8009A650) -/* D8D72C 802404DC 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D8D728 802404D8 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D8D72C 802404DC 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D8D730 802404E0 8C620000 */ lw $v0, ($v1) /* D8D734 802404E4 34420080 */ ori $v0, $v0, 0x80 /* D8D738 802404E8 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_36/D91700/func_802404CC_D91BCC.s b/ver/us/asm/nonmatchings/world/area_pra/pra_36/D91700/func_802404CC_D91BCC.s index 04d81cbf2c..4f76af058a 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_36/D91700/func_802404CC_D91BCC.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_36/D91700/func_802404CC_D91BCC.s @@ -17,8 +17,8 @@ glabel func_802404CC_D91BCC /* D91BFC 802404FC 0000202D */ daddu $a0, $zero, $zero /* D91C00 80240500 8E03013C */ lw $v1, 0x13c($s0) /* D91C04 80240504 AC620000 */ sw $v0, ($v1) -/* D91C08 80240508 3C03800A */ lui $v1, %hi(D_8009A650) -/* D91C0C 8024050C 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D91C08 80240508 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D91C0C 8024050C 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D91C10 80240510 8C620000 */ lw $v0, ($v1) /* D91C14 80240514 34420080 */ ori $v0, $v0, 0x80 /* D91C18 80240518 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_37/D92F40/func_802404CC_D9340C.s b/ver/us/asm/nonmatchings/world/area_pra/pra_37/D92F40/func_802404CC_D9340C.s index c9b88fbf08..4d439e370f 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_37/D92F40/func_802404CC_D9340C.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_37/D92F40/func_802404CC_D9340C.s @@ -17,8 +17,8 @@ glabel func_802404CC_D9340C /* D9343C 802404FC 0000202D */ daddu $a0, $zero, $zero /* D93440 80240500 8E03013C */ lw $v1, 0x13c($s0) /* D93444 80240504 AC620000 */ sw $v0, ($v1) -/* D93448 80240508 3C03800A */ lui $v1, %hi(D_8009A650) -/* D9344C 8024050C 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D93448 80240508 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D9344C 8024050C 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D93450 80240510 8C620000 */ lw $v0, ($v1) /* D93454 80240514 34420080 */ ori $v0, $v0, 0x80 /* D93458 80240518 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_38/D955F0/func_802404CC_D95ABC.s b/ver/us/asm/nonmatchings/world/area_pra/pra_38/D955F0/func_802404CC_D95ABC.s index d7c8954bce..e7e311218a 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_38/D955F0/func_802404CC_D95ABC.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_38/D955F0/func_802404CC_D95ABC.s @@ -17,8 +17,8 @@ glabel func_802404CC_D95ABC /* D95AEC 802404FC 0000202D */ daddu $a0, $zero, $zero /* D95AF0 80240500 8E03013C */ lw $v1, 0x13c($s0) /* D95AF4 80240504 AC620000 */ sw $v0, ($v1) -/* D95AF8 80240508 3C03800A */ lui $v1, %hi(D_8009A650) -/* D95AFC 8024050C 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D95AF8 80240508 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D95AFC 8024050C 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D95B00 80240510 8C620000 */ lw $v0, ($v1) /* D95B04 80240514 34420080 */ ori $v0, $v0, 0x80 /* D95B08 80240518 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_39/D97890/func_802404CC_D97D5C.s b/ver/us/asm/nonmatchings/world/area_pra/pra_39/D97890/func_802404CC_D97D5C.s index 72b92aa634..957030e1b6 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_39/D97890/func_802404CC_D97D5C.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_39/D97890/func_802404CC_D97D5C.s @@ -17,8 +17,8 @@ glabel func_802404CC_D97D5C /* D97D8C 802404FC 0000202D */ daddu $a0, $zero, $zero /* D97D90 80240500 8E03013C */ lw $v1, 0x13c($s0) /* D97D94 80240504 AC620000 */ sw $v0, ($v1) -/* D97D98 80240508 3C03800A */ lui $v1, %hi(D_8009A650) -/* D97D9C 8024050C 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D97D98 80240508 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D97D9C 8024050C 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D97DA0 80240510 8C620000 */ lw $v0, ($v1) /* D97DA4 80240514 34420080 */ ori $v0, $v0, 0x80 /* D97DA8 80240518 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_pra/pra_40/D999D0/func_8024049C_D99E4C.s b/ver/us/asm/nonmatchings/world/area_pra/pra_40/D999D0/func_8024049C_D99E4C.s index d138bc9bb9..18ae2553a3 100644 --- a/ver/us/asm/nonmatchings/world/area_pra/pra_40/D999D0/func_8024049C_D99E4C.s +++ b/ver/us/asm/nonmatchings/world/area_pra/pra_40/D999D0/func_8024049C_D99E4C.s @@ -17,8 +17,8 @@ glabel func_8024049C_D99E4C /* D99E7C 802404CC 0000202D */ daddu $a0, $zero, $zero /* D99E80 802404D0 8E03013C */ lw $v1, 0x13c($s0) /* D99E84 802404D4 AC620000 */ sw $v0, ($v1) -/* D99E88 802404D8 3C03800A */ lui $v1, %hi(D_8009A650) -/* D99E8C 802404DC 2463A650 */ addiu $v1, $v1, %lo(D_8009A650) +/* D99E88 802404D8 3C03800A */ lui $v1, %hi(gOverrideFlags) +/* D99E8C 802404DC 2463A650 */ addiu $v1, $v1, %lo(gOverrideFlags) /* D99E90 802404E0 8C620000 */ lw $v0, ($v1) /* D99E94 802404E4 34420080 */ ori $v0, $v0, 0x80 /* D99E98 802404E8 AC620000 */ sw $v0, ($v1) diff --git a/ver/us/asm/nonmatchings/world/area_sam/sam_08/D2FC80/func_8024001C_D2FC9C.s b/ver/us/asm/nonmatchings/world/area_sam/sam_08/D2FC80/func_8024001C_D2FC9C.s index f6e93e3aa8..6ad86c69c6 100644 --- a/ver/us/asm/nonmatchings/world/area_sam/sam_08/D2FC80/func_8024001C_D2FC9C.s +++ b/ver/us/asm/nonmatchings/world/area_sam/sam_08/D2FC80/func_8024001C_D2FC9C.s @@ -2,8 +2,8 @@ .set noreorder # don't insert nops after branches glabel func_8024001C_D2FC9C -/* D2FC9C 8024001C 3C02800A */ lui $v0, %hi(D_8009A650) -/* D2FCA0 80240020 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* D2FC9C 8024001C 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* D2FCA0 80240020 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* D2FCA4 80240024 8C430000 */ lw $v1, ($v0) /* D2FCA8 80240028 2404FFBF */ addiu $a0, $zero, -0x41 /* D2FCAC 8024002C 00641824 */ and $v1, $v1, $a0 diff --git a/ver/us/asm/nonmatchings/world/area_sbk/sbk_56/953FC0/func_8024009C_95405C.s b/ver/us/asm/nonmatchings/world/area_sbk/sbk_56/953FC0/func_8024009C_95405C.s index cef7849b63..6585ba0017 100644 --- a/ver/us/asm/nonmatchings/world/area_sbk/sbk_56/953FC0/func_8024009C_95405C.s +++ b/ver/us/asm/nonmatchings/world/area_sbk/sbk_56/953FC0/func_8024009C_95405C.s @@ -2,8 +2,8 @@ .set noreorder # don't insert nops after branches glabel func_8024009C_95405C -/* 95405C 8024009C 3C02800A */ lui $v0, %hi(D_8009A650) -/* 954060 802400A0 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* 95405C 8024009C 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 954060 802400A0 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* 954064 802400A4 8C430000 */ lw $v1, ($v0) /* 954068 802400A8 2404FFBF */ addiu $a0, $zero, -0x41 /* 95406C 802400AC 00641824 */ and $v1, $v1, $a0 diff --git a/ver/us/asm/nonmatchings/world/area_tik/tik_07/879BE0/func_802402FC_879EDC.s b/ver/us/asm/nonmatchings/world/area_tik/tik_07/879BE0/func_802402FC_879EDC.s index c116bea45e..f6b6f3a5b2 100644 --- a/ver/us/asm/nonmatchings/world/area_tik/tik_07/879BE0/func_802402FC_879EDC.s +++ b/ver/us/asm/nonmatchings/world/area_tik/tik_07/879BE0/func_802402FC_879EDC.s @@ -2,8 +2,8 @@ .set noreorder # don't insert nops after branches glabel func_802402FC_879EDC -/* 879EDC 802402FC 3C02800A */ lui $v0, %hi(D_8009A650) -/* 879EE0 80240300 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* 879EDC 802402FC 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 879EE0 80240300 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* 879EE4 80240304 8C430000 */ lw $v1, ($v0) /* 879EE8 80240308 2404FFBF */ addiu $a0, $zero, -0x41 /* 879EEC 8024030C 00641824 */ and $v1, $v1, $a0 diff --git a/ver/us/asm/nonmatchings/world/area_tik/tik_10/8866D0/func_8024069C_886A5C.s b/ver/us/asm/nonmatchings/world/area_tik/tik_10/8866D0/func_8024069C_886A5C.s index f08811499c..11155c50ca 100644 --- a/ver/us/asm/nonmatchings/world/area_tik/tik_10/8866D0/func_8024069C_886A5C.s +++ b/ver/us/asm/nonmatchings/world/area_tik/tik_10/8866D0/func_8024069C_886A5C.s @@ -2,8 +2,8 @@ .set noreorder # don't insert nops after branches glabel func_8024069C_886A5C -/* 886A5C 8024069C 3C02800A */ lui $v0, %hi(D_8009A650) -/* 886A60 802406A0 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* 886A5C 8024069C 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 886A60 802406A0 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* 886A64 802406A4 8C430000 */ lw $v1, ($v0) /* 886A68 802406A8 2404FFBF */ addiu $a0, $zero, -0x41 /* 886A6C 802406AC 00641824 */ and $v1, $v1, $a0 diff --git a/ver/us/asm/nonmatchings/world/area_tik/tik_12/8891C0/func_80240C38_889808.s b/ver/us/asm/nonmatchings/world/area_tik/tik_12/8891C0/func_80240C38_889808.s index de27132741..f8a9b4951a 100644 --- a/ver/us/asm/nonmatchings/world/area_tik/tik_12/8891C0/func_80240C38_889808.s +++ b/ver/us/asm/nonmatchings/world/area_tik/tik_12/8891C0/func_80240C38_889808.s @@ -2,8 +2,8 @@ .set noreorder # don't insert nops after branches glabel func_80240C38_889808 -/* 889808 80240C38 3C02800A */ lui $v0, %hi(D_8009A650) -/* 88980C 80240C3C 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* 889808 80240C38 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 88980C 80240C3C 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* 889810 80240C40 8C430000 */ lw $v1, ($v0) /* 889814 80240C44 2404FFBF */ addiu $a0, $zero, -0x41 /* 889818 80240C48 00641824 */ and $v1, $v1, $a0 diff --git a/ver/us/asm/nonmatchings/world/area_tik/tik_17/892A50/func_8024004C_892A6C.s b/ver/us/asm/nonmatchings/world/area_tik/tik_17/892A50/func_8024004C_892A6C.s index 45bbeb8499..13161a2cff 100644 --- a/ver/us/asm/nonmatchings/world/area_tik/tik_17/892A50/func_8024004C_892A6C.s +++ b/ver/us/asm/nonmatchings/world/area_tik/tik_17/892A50/func_8024004C_892A6C.s @@ -2,8 +2,8 @@ .set noreorder # don't insert nops after branches glabel func_8024004C_892A6C -/* 892A6C 8024004C 3C02800A */ lui $v0, %hi(D_8009A650) -/* 892A70 80240050 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* 892A6C 8024004C 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 892A70 80240050 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* 892A74 80240054 8C430000 */ lw $v1, ($v0) /* 892A78 80240058 2404FFBF */ addiu $a0, $zero, -0x41 /* 892A7C 8024005C 00641824 */ and $v1, $v1, $a0 diff --git a/ver/us/asm/nonmatchings/world/area_tik/tik_19/897BD0/func_8024060C_897BEC.s b/ver/us/asm/nonmatchings/world/area_tik/tik_19/897BD0/func_8024060C_897BEC.s index 4bdd158001..67dbc226d4 100644 --- a/ver/us/asm/nonmatchings/world/area_tik/tik_19/897BD0/func_8024060C_897BEC.s +++ b/ver/us/asm/nonmatchings/world/area_tik/tik_19/897BD0/func_8024060C_897BEC.s @@ -2,8 +2,8 @@ .set noreorder # don't insert nops after branches glabel func_8024060C_897BEC -/* 897BEC 8024060C 3C02800A */ lui $v0, %hi(D_8009A650) -/* 897BF0 80240610 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* 897BEC 8024060C 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 897BF0 80240610 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* 897BF4 80240614 8C430000 */ lw $v1, ($v0) /* 897BF8 80240618 2404FFBF */ addiu $a0, $zero, -0x41 /* 897BFC 8024061C 00641824 */ and $v1, $v1, $a0 diff --git a/ver/us/asm/nonmatchings/world/partner/kooper/func_802BD17C_31B19C.s b/ver/us/asm/nonmatchings/world/partner/kooper/func_802BD17C_31B19C.s index 0b924c3438..6d22d6b9a9 100644 --- a/ver/us/asm/nonmatchings/world/partner/kooper/func_802BD17C_31B19C.s +++ b/ver/us/asm/nonmatchings/world/partner/kooper/func_802BD17C_31B19C.s @@ -19,8 +19,8 @@ glabel func_802BD17C_31B19C /* 31B1D4 802BD1B4 AC25EC68 */ sw $a1, %lo(D_802BEC68)($at) /* 31B1D8 802BD1B8 04A0000D */ bltz $a1, .L802BD1F0 /* 31B1DC 802BD1BC 24040001 */ addiu $a0, $zero, 1 -/* 31B1E0 802BD1C0 3C02800A */ lui $v0, %hi(D_8009A650) -/* 31B1E4 802BD1C4 2442A650 */ addiu $v0, $v0, %lo(D_8009A650) +/* 31B1E0 802BD1C0 3C02800A */ lui $v0, %hi(gOverrideFlags) +/* 31B1E4 802BD1C4 2442A650 */ addiu $v0, $v0, %lo(gOverrideFlags) /* 31B1E8 802BD1C8 8C430000 */ lw $v1, ($v0) /* 31B1EC 802BD1CC 3C01802C */ lui $at, %hi(D_802BEC6C) /* 31B1F0 802BD1D0 AC24EC6C */ sw $a0, %lo(D_802BEC6C)($at) diff --git a/ver/us/asm/nonmatchings/world/world/load_map_by_IDs.s b/ver/us/asm/nonmatchings/world/world/load_map_by_IDs.s index 5dcaa5e482..93d5c3cd92 100644 --- a/ver/us/asm/nonmatchings/world/world/load_map_by_IDs.s +++ b/ver/us/asm/nonmatchings/world/world/load_map_by_IDs.s @@ -27,8 +27,8 @@ glabel load_map_by_IDs /* 35B18 8005A718 AFBF004C */ sw $ra, 0x4c($sp) /* 35B1C 8005A71C 0C05260E */ jal func_80149838 /* 35B20 8005A720 AFB20040 */ sw $s2, 0x40($sp) -/* 35B24 8005A724 3C05800A */ lui $a1, %hi(D_8009A650) -/* 35B28 8005A728 24A5A650 */ addiu $a1, $a1, %lo(D_8009A650) +/* 35B24 8005A724 3C05800A */ lui $a1, %hi(gOverrideFlags) +/* 35B28 8005A728 24A5A650 */ addiu $a1, $a1, %lo(gOverrideFlags) /* 35B2C 8005A72C 2402FFBF */ addiu $v0, $zero, -0x41 /* 35B30 8005A730 3C128007 */ lui $s2, %hi(gGameStatusPtr) /* 35B34 8005A734 2652419C */ addiu $s2, $s2, %lo(gGameStatusPtr) diff --git a/ver/us/symbol_addrs.txt b/ver/us/symbol_addrs.txt index 9581367f51..c4f0b8f204 100644 --- a/ver/us/symbol_addrs.txt +++ b/ver/us/symbol_addrs.txt @@ -1295,6 +1295,10 @@ gMatrixListPos = 0x800741F0; // rom:0x4F5F0 D_800741F2 = 0x800741F2; // type:data rom:0x4F5F2 gCurrentDisplayContextIndex = 0x800741F4; // rom:0x4F5F4 D_800741F8 = 0x800741F8; // type:data rom:0x4F5F8 +D_800741FC = 0x800741FC; // type:data rom:0x4F5FC +D_80074200 = 0x80074200; // type:data rom:0x4F600 +D_80074210 = 0x80074210; // type:data rom:0x4F610 +D_80074230 = 0x80074230; // type:data rom:0x4F630 D_80074268 = 0x80074268; // type:data rom:0x4F668 gRandSeed = 0x80074410; // rom:0x4F810 SCRIPT_NpcDefeat = 0x80077E38; // rom:0x53238 @@ -1402,6 +1406,7 @@ D_80098990 = 0x80098990; // type:data rom:0x73D90 D_80098A10 = 0x80098A10; // type:data rom:0x73E10 D_80098A1C = 0x80098A1C; // type:data rom:0x73E1C D_80098A24 = 0x80098A24; // type:data rom:0x73E24 +world_rodata_alignment = 0x80099A9C; // type:data rom:0x74E9C D_80099B40 = 0x80099B40; // type:data rom:0x74F40 D_80099B50 = 0x80099B50; // type:data rom:0x74F50 D_80099B58 = 0x80099B58; // type:data rom:0x74F58 @@ -7461,7 +7466,7 @@ func_80240034_879C14 = 0x80240034; // type:func rom:0x879C14 tik_07_GetEntryPos = 0x802400F0; // type:func rom:0x879CD0 tik_07_GetCurrentCameraYawClamped180 = 0x802401D0; // type:func rom:0x879DB0 tik_07_SomeXYZFunc2 = 0x8024023C; // type:func rom:0x879E1C -tik_07_Set8009A650_40 = 0x802402E0; // type:func rom:0x879EC0 +tik_07_SetOverrideFlags_40 = 0x802402E0; // type:func rom:0x879EC0 func_802402FC_879EDC = 0x802402FC; // type:func rom:0x879EDC func_8024031C_879EFC = 0x8024031C; // type:func rom:0x879EFC func_80240348_879F28 = 0x80240348; // type:func rom:0x879F28 @@ -7534,7 +7539,7 @@ D_802441A0_886360 = 0x802441A0; // type:data rom:0x886360 tik_10_UnkTexturePanFunc = 0x80240000; // type:func rom:0x8863C0 tik_10_UnkTexturePanFunc2 = 0x80240124; // type:func rom:0x8864E4 func_80240310_8866D0 = 0x80240310; // type:func rom:0x8866D0 -tik_10_Set8009A650_40 = 0x80240680; // type:func rom:0x886A40 +tik_10_SetOverrideFlags_40 = 0x80240680; // type:func rom:0x886A40 func_8024069C_886A5C = 0x8024069C; // type:func rom:0x886A5C func_802406BC_886A7C = 0x802406BC; // type:func rom:0x886A7C func_802406E8_886AA8 = 0x802406E8; // type:func rom:0x886AA8 @@ -7569,7 +7574,7 @@ func_80240960_889530 = 0x80240960; // type:func rom:0x889530 tik_12_GetItemName = 0x80240A14; // type:func rom:0x8895E4 tik_12_SomeItemEntityFunc = 0x80240A78; // type:func rom:0x889648 tik_12_CheckItemFlags40 = 0x80240BC8; // type:func rom:0x889798 -tik_12_Set8009A650_40 = 0x80240C1C; // type:func rom:0x8897EC +tik_12_SetOverrideFlags_40 = 0x80240C1C; // type:func rom:0x8897EC func_80240C38_889808 = 0x80240C38; // type:func rom:0x889808 func_80240C58_889828 = 0x80240C58; // type:func rom:0x889828 func_80240C84_889854 = 0x80240C84; // type:func rom:0x889854 @@ -7627,7 +7632,7 @@ func_80240AD0_890670 = 0x80240AD0; // type:func rom:0x890670 D_80242758_8922F8 = 0x80242758; // type:data rom:0x8922F8 D_802427BC_89235C = 0x802427BC; // type:data rom:0x89235C func_80240000_892A20 = 0x80240000; // type:func rom:0x892A20 -tik_17_Set8009A650_40 = 0x80240030; // type:func rom:0x892A50 +tik_17_SetOverrideFlags_40 = 0x80240030; // type:func rom:0x892A50 func_8024004C_892A6C = 0x8024004C; // type:func rom:0x892A6C func_8024006C_892A8C = 0x8024006C; // type:func rom:0x892A8C func_80240098_892AB8 = 0x80240098; // type:func rom:0x892AB8 @@ -7669,7 +7674,7 @@ tik_19_GetCurrentCameraYawClamped180 = 0x802401D0; // type:func rom:0x8977B0 tik_19_SomeXYZFunc2 = 0x8024023C; // type:func rom:0x89781C tik_19_UnkTexturePanFunc = 0x802402E0; // type:func rom:0x8978C0 tik_19_UnkTexturePanFunc2 = 0x80240404; // type:func rom:0x8979E4 -tik_19_Set8009A650_40 = 0x802405F0; // type:func rom:0x897BD0 +tik_19_SetOverrideFlags_40 = 0x802405F0; // type:func rom:0x897BD0 func_8024060C_897BEC = 0x8024060C; // type:func rom:0x897BEC func_8024062C_897C0C = 0x8024062C; // type:func rom:0x897C0C func_80240658_897C38 = 0x80240658; // type:func rom:0x897C38 @@ -8358,7 +8363,7 @@ func_80240000_91E570 = 0x80240000; // type:func rom:0x91E570 func_80240040_91E5B0 = 0x80240040; // type:func rom:0x91E5B0 iwa_10_GetItemName = 0x802400F4; // type:func rom:0x91E664 iwa_10_UnkFloatFunc = 0x80240160; // type:func rom:0x91E6D0 -iwa_10_Set8009A650_40 = 0x802402F0; // type:func rom:0x91E860 +iwa_10_SetOverrideFlags_40 = 0x802402F0; // type:func rom:0x91E860 func_8024030C_91E87C = 0x8024030C; // type:func rom:0x91E87C func_8024032C_91E89C = 0x8024032C; // type:func rom:0x91E89C func_80240358_91E8C8 = 0x80240358; // type:func rom:0x91E8C8 @@ -8586,7 +8591,7 @@ sbk_55_SomeMatrixOperation2 = 0x802400D0; // type:func rom:0x952B20 sbk_56_SpawnSunEffect = 0x80240000; // type:func rom:0x953FC0 func_80240038_953FF8 = 0x80240038; // type:func rom:0x953FF8 func_8024005C_95401C = 0x8024005C; // type:func rom:0x95401C -sbk_56_Set8009A650_40 = 0x80240080; // type:func rom:0x954040 +sbk_56_SetOverrideFlags_40 = 0x80240080; // type:func rom:0x954040 func_8024009C_95405C = 0x8024009C; // type:func rom:0x95405C func_802400BC_95407C = 0x802400BC; // type:func rom:0x95407C func_802400E8_9540A8 = 0x802400E8; // type:func rom:0x9540A8 @@ -8846,7 +8851,7 @@ isk_09_CheckItemFlags40 = 0x80240268; // type:func rom:0x986748 func_802402BC_98679C = 0x802402BC; // type:func rom:0x98679C func_802402F0_9867D0 = 0x802402F0; // type:func rom:0x9867D0 D_802406F0_986BD0 = 0x802406F0; // type:data rom:0x986BD0 -isk_10_Set8009A650_40 = 0x80240000; // type:func rom:0x988B60 +isk_10_SetOverrideFlags_40 = 0x80240000; // type:func rom:0x988B60 func_8024001C_988B7C = 0x8024001C; // type:func rom:0x988B7C func_8024003C_988B9C = 0x8024003C; // type:func rom:0x988B9C func_80240068_988BC8 = 0x80240068; // type:func rom:0x988BC8 @@ -11022,7 +11027,7 @@ jan_08_SomeMatrixOperation = 0x80240310; // type:func rom:0xB5E5C0 jan_08_SomeMatrixOperation2 = 0x80240380; // type:func rom:0xB5E630 func_8024054C_B5E7FC = 0x8024054C; // type:func rom:0xB5E7FC func_802405A8_B5E858 = 0x802405A8; // type:func rom:0xB5E858 -jan_08_Set8009A650_40 = 0x80240660; // type:func rom:0xB5E910 +jan_08_SetOverrideFlags_40 = 0x80240660; // type:func rom:0xB5E910 func_8024067C_B5E92C = 0x8024067C; // type:func rom:0xB5E92C func_8024069C_B5E94C = 0x8024069C; // type:func rom:0xB5E94C func_802406C8_B5E978 = 0x802406C8; // type:func rom:0xB5E978 @@ -11842,7 +11847,7 @@ func_80241D14_C38244 = 0x80241D14; // type:func rom:0xC38244 func_80241D94_C382C4 = 0x80241D94; // type:func rom:0xC382C4 func_80241E3C_C3836C = 0x80241E3C; // type:func rom:0xC3836C func_80242154_C38684 = 0x80242154; // type:func rom:0xC38684 -dgb_04_Set8009A650_40 = 0x802423D0; // type:func rom:0xC38900 +dgb_04_SetOverrideFlags_40 = 0x802423D0; // type:func rom:0xC38900 func_802423EC_C3891C = 0x802423EC; // type:func rom:0xC3891C func_8024240C_C3893C = 0x8024240C; // type:func rom:0xC3893C func_80242438_C38968 = 0x80242438; // type:func rom:0xC38968 @@ -12188,7 +12193,7 @@ D_80247400_C68110 = 0x80247400; // type:data rom:0xC68110 D_80247410_C68120 = 0x80247410; // type:data rom:0xC68120 kzn_04_UnkTexturePanFunc = 0x80240000; // type:func rom:0xC68130 kzn_04_UnkTexturePanFunc2 = 0x80240124; // type:func rom:0xC68254 -kzn_04_Set8009A650_40 = 0x80240310; // type:func rom:0xC68440 +kzn_04_SetOverrideFlags_40 = 0x80240310; // type:func rom:0xC68440 func_8024032C_C6845C = 0x8024032C; // type:func rom:0xC6845C func_8024034C_C6847C = 0x8024034C; // type:func rom:0xC6847C func_80240378_C684A8 = 0x80240378; // type:func rom:0xC684A8 @@ -12310,7 +12315,7 @@ D_80245840_C76CC0 = 0x80245840; // type:data rom:0xC76CC0 D_80245848_C76CC8 = 0x80245848; // type:data rom:0xC76CC8 D_80245850_C76CD0 = 0x80245850; // type:data rom:0xC76CD0 D_80245858_C76CD8 = 0x80245858; // type:data rom:0xC76CD8 -kzn_09_Set8009A650_40 = 0x80240000; // type:func rom:0xC76CE0 +kzn_09_SetOverrideFlags_40 = 0x80240000; // type:func rom:0xC76CE0 func_8024001C_C76CFC = 0x8024001C; // type:func rom:0xC76CFC func_8024003C_C76D1C = 0x8024003C; // type:func rom:0xC76D1C func_80240068_C76D48 = 0x80240068; // type:func rom:0xC76D48 @@ -12594,7 +12599,7 @@ flo_07_SomeMatrixOperation2 = 0x80240450; // type:func rom:0xCAC640 func_8024061C_CAC80C = 0x8024061C; // type:func rom:0xCAC80C flo_07_GetItemName = 0x802406D0; // type:func rom:0xCAC8C0 D_80241BB0_CADDA0 = 0x80241BB0; // type:data rom:0xCADDA0 -flo_08_Set8009A650_40 = 0x80240000; // type:func rom:0xCAED40 +flo_08_SetOverrideFlags_40 = 0x80240000; // type:func rom:0xCAED40 func_8024001C_CAED5C = 0x8024001C; // type:func rom:0xCAED5C func_8024003C_CAED7C = 0x8024003C; // type:func rom:0xCAED7C func_80240068_CAEDA8 = 0x80240068; // type:func rom:0xCAEDA8 @@ -12762,7 +12767,7 @@ D_80245358_CD0668 = 0x80245358; // type:data rom:0xCD0668 D_80245360_CD0670 = 0x80245360; // type:data rom:0xCD0670 func_80240000_CD1E30 = 0x80240000; // type:func rom:0xCD1E30 func_80240040_CD1E70 = 0x80240040; // type:func rom:0xCD1E70 -flo_16_Set8009A650_40 = 0x802400E0; // type:func rom:0xCD1F10 +flo_16_SetOverrideFlags_40 = 0x802400E0; // type:func rom:0xCD1F10 func_802400FC_CD1F2C = 0x802400FC; // type:func rom:0xCD1F2C func_8024011C_CD1F4C = 0x8024011C; // type:func rom:0xCD1F4C func_80240148_CD1F78 = 0x80240148; // type:func rom:0xCD1F78 @@ -13146,7 +13151,7 @@ D_80243F28_D2FC58 = 0x80243F28; // type:data rom:0xD2FC58 D_80243F30_D2FC60 = 0x80243F30; // type:data rom:0xD2FC60 D_80243F38_D2FC68 = 0x80243F38; // type:data rom:0xD2FC68 D_80243F40_D2FC70 = 0x80243F40; // type:data rom:0xD2FC70 -sam_08_Set8009A650_40 = 0x80240000; // type:func rom:0xD2FC80 +sam_08_SetOverrideFlags_40 = 0x80240000; // type:func rom:0xD2FC80 func_8024001C_D2FC9C = 0x8024001C; // type:func rom:0xD2FC9C func_8024003C_D2FCBC = 0x8024003C; // type:func rom:0xD2FCBC func_80240068_D2FCE8 = 0x80240068; // type:func rom:0xD2FCE8 @@ -14128,7 +14133,7 @@ omo_10_UnkTexturePanFunc = 0x8024055C; // type:func rom:0xDD7F0C omo_10_UnkTexturePanFunc2 = 0x80240680; // type:func rom:0xDD8030 func_80240000_DDC830 = 0x80240000; // type:func rom:0xDDC830 func_802401A0_DDC9D0 = 0x802401A0; // type:func rom:0xDDC9D0 -omo_11_Set8009A650_40 = 0x80240790; // type:func rom:0xDDCFC0 +omo_11_SetOverrideFlags_40 = 0x80240790; // type:func rom:0xDDCFC0 func_802407AC_DDCFDC = 0x802407AC; // type:func rom:0xDDCFDC func_802407CC_DDCFFC = 0x802407CC; // type:func rom:0xDDCFFC func_802407F8_DDD028 = 0x802407F8; // type:func rom:0xDDD028 @@ -15313,7 +15318,7 @@ carthandle = 0x8009A638; // D_8009A63C = 0x8009A63C; // type:data D_8009A640 = 0x8009A640; // type:data D_8009A64C = 0x8009A64C; // type:data -D_8009A650 = 0x8009A650; // type:data +gOverrideFlags = 0x8009A650; // type:data D_8009A654 = 0x8009A654; // type:data D_8009A658 = 0x8009A658; // type:data D_8009A660 = 0x8009A660; // type:data diff --git a/ver/us/undefined_syms_auto.txt b/ver/us/undefined_syms_auto.txt index 5bb6459d49..ab31fbb4d8 100644 --- a/ver/us/undefined_syms_auto.txt +++ b/ver/us/undefined_syms_auto.txt @@ -2007,7 +2007,7 @@ carthandle = 0x8009A638; D_8009A63C = 0x8009A63C; D_8009A640 = 0x8009A640; D_8009A64C = 0x8009A64C; -D_8009A650 = 0x8009A650; +gOverrideFlags = 0x8009A650; D_8009A654 = 0x8009A654; D_8009A658 = 0x8009A658; D_8009A660 = 0x8009A660;