1964js/coffee/constants.coffee

593 lines
No EOL
17 KiB
CoffeeScript

###* @license 1964js - JavaScript/HTML5 port of 1964 - N64 emulator
Copyright (C) 2012 Joel Middendorf
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.###
#jslint bitwise: true
class C1964jsConstants
"use strict"
constructor: ->
#mem map
@MEMORY_START_PIF = 0x1FC00000
@MEMORY_START_PIF_RAM = 0x1FC007C0
@MEMORY_SIZE_PIF = 0x10000
#cp0
@INDEX = 0
@RANDOM = 1
@ENTRYLO0 = 2
@ENTRYLO1 = 3
@CONTEXT = 4
@PAGEMASK = 5
@WIRED = 6
@RESERVED0 = 7
@BADVADDR = 8
@COUNT = 9
@ENTRYHI = 10
@COMPARE = 11
@STATUS = 12
@CAUSE = 13
@EPC = 14
@PREVID = 15
@CONFIG = 16
@LLADDR = 17
@WATCHLO = 18
@WATCHHI = 19
@XCONTEXT = 20
@RESERVED1 = 21
@RESERVED2 = 22
@RESERVED3 = 23
@RESERVED4 = 24
@RESERVED5 = 25
@PERR = 26
@CACHEERR = 27
@TAGLO = 28
@TAGHI = 29
@ERROREPC = 30
@RESERVED6 = 31
#sp_dmem
@SP_DMEM_TASK = 0x00000FC0
#sp_reg_1
@SP_MEM_ADDR_REG = 0
@SP_DRAM_ADDR_REG = 4
@SP_RD_LEN_REG = 8
@SP_WR_LEN_REG = 12
@SP_STATUS_REG = 16
@SP_DMA_FULL_REG = 20
@SP_DMA_BUSY_REG = 24
@SP_SEMAPHORE_REG = 28
#sp_reg_2
@SP_PC_REG = 0
@SP_IBIST_REG = 4
#vi
@VI_STATUS_REG = 0
@VI_ORIGIN_REG = 4
@VI_WIDTH_REG = 8
@VI_INTR_REG = 12
@VI_CURRENT_REG = 16
@VI_BURST_REG = 20
@VI_V_SYNC_REG = 24
@VI_H_SYNC_REG = 28
@VI_LEAP_REG = 32
@VI_H_START_REG = 36
@VI_V_START_REG = 40
@VI_V_BURST_REG = 44
@VI_X_SCALE_REG = 48
@VI_Y_SCALE_REG = 52
#ai
@AI_DRAM_ADDR_REG = 0
@AI_LEN_REG = 4
@AI_CONTROL_REG = 8
@AI_STATUS_REG = 12
@AI_DACRATE_REG = 16
@AI_BITRATE_REG = 20
#pi
@PI_DRAM_ADDR_REG = 0
@PI_CART_ADDR_REG = 4
@PI_RD_LEN_REG = 8
@PI_WR_LEN_REG = 12
@PI_STATUS_REG = 16
@PI_BSD_DOM1_LAT_REG = 20
@PI_BSD_DOM1_PWD_REG = 24
@PI_BSD_DOM1_PGS_REG = 28
@PI_BSD_DOM1_RLS_REG = 32
@PI_BSD_DOM2_LAT_REG = 36
@PI_BSD_DOM2_PWD_REG = 40
@PI_BSD_DOM2_PGS_REG = 44
@PI_BSD_DOM2_RLS_REG = 48
#ri
@RI_MODE_REG = 0
@RI_CONFIG_REG = 4
@RI_CURRENT_LOAD_REG = 8
@RI_SELECT_REG = 12
@RI_REFRESH_REG = 16
@RI_LATENCY_REG = 20
@RI_RERROR_REG = 24
@RI_WERROR_REG = 28
#mi
@MI_INIT_MODE_REG = 0
@MI_VERSION_REG = 4
@MI_INTR_REG = 8
@MI_INTR_MASK_REG = 12
#si
@SI_DRAM_ADDR_REG = 0
@SI_PIF_ADDR_RD64B_REG = 4
@SI_PIF_ADDR_WR64B_REG = 16
@SI_STATUS_REG = 24
#flags
@SI_STATUS_DMA_BUSY = 0x0001
@SI_STATUS_RD_BUSY = 0x0002
@SI_STATUS_DMA_ERROR = 0x0008
@SI_STATUS_INTERRUPT = 0x1000
@AI_STATUS_FIFO_FULL = 0x80000000
@AI_STATUS_DMA_BUSY = 0x40000000
@PI_STATUS_RESET = 0x01
@PI_STATUS_CLR_INTR = 0x02
@PI_STATUS_ERROR = 0x04
@PI_STATUS_IO_BUSY = 0x02
@PI_STATUS_DMA_BUSY = 0x01
@MI_INTR_SP = 0x00000001
@MI_INTR_SI = 0x00000002
@MI_INTR_AI = 0x00000004
@MI_INTR_VI = 0x00000008
@MI_INTR_PI = 0x00000010
@MI_INTR_DP = 0x00000020
@MI_INTR_MASK_SP = 0x01 #Bit 0: SP intr mask
@MI_INTR_MASK_SI = 0x02 #Bit 1: SI intr mask
@MI_INTR_MASK_AI = 0x04 #Bit 2: AI intr mask
@MI_INTR_MASK_VI = 0x08 #Bit 3: VI intr mask
@MI_INTR_MASK_PI = 0x10 #Bit 4: PI intr mask
@MI_INTR_MASK_DP = 0x20 #Bit 5: DP intr mask
@MI_INTR_MASK_SP_CLR = 0x01
@MI_INTR_MASK_SP_SET = 0x02
@MI_INTR_MASK_SI_CLR = 0x04
@MI_INTR_MASK_SI_SET = 0x08
@MI_INTR_MASK_AI_CLR = 0x10
@MI_INTR_MASK_AI_SET = 0x20
@MI_INTR_MASK_VI_CLR = 0x40
@MI_INTR_MASK_VI_SET = 0x80
@MI_INTR_MASK_PI_CLR = 0x100
@MI_INTR_MASK_PI_SET = 0x200
@MI_INTR_MASK_DP_CLR = 0x400
@MI_INTR_MASK_DP_SET = 0x800
#MI mode register read flags
@MI_MODE_INIT = 0x0080
@MI_MODE_EBUS = 0x0100
@MI_MODE_RDRAM = 0x0200
#MI mode register write flags
@MI_CLR_INIT = 0x0080
@MI_SET_INIT = 0x0100
@MI_CLR_EBUS = 0x0200
@MI_SET_EBUS = 0x0400
@MI_CLR_DP_INTR = 0x0800
@MI_CLR_RDRAM = 0x1000
@MI_SET_RDRAM = 0x2000
#DPC registers
@DPC_START_REG = 0
@DPC_END_REG = 4
@DPC_CURRENT_REG = 8
@DPC_STATUS_REG = 12
@DPC_CLOCK_REG = 16
@DPC_BUFBUSY_REG = 20
@DPC_PIPEBUSY_REG = 24
@DPC_TMEM_REG = 28
#SP_STATUS_REG read flags
@SP_STATUS_HALT = 0x0001
@SP_STATUS_BROKE = 0x0002
@SP_STATUS_DMA_BUSY = 0x0004
@SP_STATUS_DMA_FULL = 0x0008
@SP_STATUS_IO_FULL = 0x0010
@SP_STATUS_SSTEP = 0x0020
@SP_STATUS_INTR_BREAK = 0x0040
@SP_STATUS_YIELD = 0x0080
@SP_STATUS_YIELDED = 0x0100
@SP_STATUS_TASKDONE = 0x0200
@SP_STATUS_SIG3 = 0x0400
@SP_STATUS_SIG4 = 0x0800
@SP_STATUS_SIG5 = 0x1000
@SP_STATUS_SIG6 = 0x2000
@SP_STATUS_SIG7 = 0x4000
#DPC_STATUS_REG read flags
@DPC_STATUS_XBUS_DMEM_DMA = 0x0000001
@DPC_STATUS_FREEZE = 0x0000002
@DPC_STATUS_FLUSH = 0x0000004
@DPC_STATUS_START_GCLK = 0x008 #Bit 3: start gclk
@DPC_STATUS_TMEM_BUSY = 0x010 #Bit 4: tmem busy
@DPC_STATUS_PIPE_BUSY = 0x020 #Bit 5: pipe busy
@DPC_STATUS_CMD_BUSY = 0x040 #Bit 6: cmd busy
@DPC_STATUS_CBUF_READY = 0x080 #Bit 7: cbuf ready
@DPC_STATUS_DMA_BUSY = 0x100 #Bit 8: dma busy
@DPC_STATUS_END_VALID = 0x200 #Bit 9: end valid
@DPC_STATUS_START_VALID = 0x400 #Bit 10: start valid
#DPC_STATUS_REG write flags
@DPC_CLR_XBUS_DMEM_DMA = 0x0000001
@DPC_SET_XBUS_DMEM_DMA = 0x0000002
@DPC_CLR_FREEZE = 0x0000004
@DPC_SET_FREEZE = 0x0000008
@DPC_CLR_FLUSH = 0x0000010
@DPC_SET_FLUSH = 0x0000020
@DPC_CLR_TMEM_REG = 0x0000040
@DPC_CLR_PIPEBUSY_REG = 0x0000080
@DPC_CLR_BUFBUSY_REG = 0x0000100
@DPC_CLR_CLOCK_REG = 0x0000200
@IE = 0x00000001
@EXL = 0x00000002
@ERL = 0x00000004
@BD = 0x80000000
@BEV = 0x00400000
#CAUSE register exception codes
@EXC_INT = 0
@EXC_MOD = 4
@EXC_RMISS = 8
@TLBL_Miss = 8
@EXC_WMISS = 12
@TLBS_Miss = 12
@EXC_RADE = 16
@EXC_WADE = 20
@EXC_IBE = 24
@EXC_DBE = 28
@EXC_SYSCALL = 32
@EXC_BREAK = 36
@EXC_II = 40
@EXC_CPU = 44
@EXC_OV = 48
@EXC_TRAP = 52
@EXC_VCEI = 56
@EXC_FPE = 60
@EXC_WATCH = 92
@EXC_VCED = 124
#Pending interrupt flags
@CAUSE_IP8 = 0x00008000 #External level 8 pending - COMPARE
@CAUSE_IP7 = 0x00004000 #External level 7 pending - INT4
@CAUSE_IP6 = 0x00002000 #External level 6 pending - INT3
@CAUSE_IP5 = 0x00001000 #External level 5 pending - INT2
@CAUSE_IP4 = 0x00000800 #External level 4 pending - INT1
@CAUSE_IP3 = 0x00000400 #External level 3 pending - INT0
@CAUSE_SW2 = 0x00000200 # Software level 2 pending
@CAUSE_SW1 = 0x00000100 # Software level 1 pending
@CAUSE_BD = 0x80000000
@COP1_CONDITION_BIT = 0x00800000
#TLB
@NTLBENTRIES = 31 #Entry 31 is reserved by rdb
@TLBHI_VPN2MASK = 0xffffe000
@TLBHI_VPN2SHIFT = 13
@TLBHI_PIDMASK = 0xff
@TLBHI_PIDSHIFT = 0
@TLBHI_NPID = 255 #255 to fit in 8 bits
@TLBLO_PFNMASK = 0x3fffffc0
@TLBLO_PFNSHIFT = 6
@TLBLO_CACHMASK = 0x38 #Cache coherency algorithm
@TLBLO_CACHSHIFT = 3
@TLBLO_UNCACHED = 0x10 #Not cached
@TLBLO_NONCOHRNT = 0x18 #Cacheable non-coherent
@TLBLO_EXLWR = 0x28 #Exclusive write
@TLBLO_D = 0x4 #Writeable
@TLBLO_V = 0x2 #Valid bit
@TLBLO_G = 0x1 #global access bit
@TLBINX_PROBE = 0x80000000
@TLBINX_INXMASK = 0x3f
@TLBINX_INXSHIFT = 0
@TLBRAND_RANDMASK = 0x3f
@TLBRAND_RANDSHIFT = 0
@TLBWIRED_WIREDMASK = 0x3f
@TLBCTXT_BASEMASK = 0xff800000
@TLBCTXT_BASESHIFT = 23
@TLBCTXT_BASEBITS = 9
@TLBCTXT_VPNMASK = 0x7ffff0
@TLBCTXT_VPNSHIFT = 4
@TLBPGMASK_4K = 0x0
@TLBPGMASK_16K = 0x6000
@TLBPGMASK_64K = 0x1e000
# sp dmem tasks
@BAD_TASK = 0
@GFX_TASK = 1
@SND_TASK = 2
@JPG_TASK = 4
#os task
@TASK_TYPE = 0x00000FC0
@TASK_FLAGS = 0x00000FC4
@TASK_MICROCODE_BOOT = 0x00000FC8
@TASK_MICROCODE_BOOT_SIZE = 0x00000FCC
@TASK_MICROCODE = 0x00000FD0
@TASK_MICROCODE_SIZE = 0x00000FD4
@TASK_MICROCODE_DATA = 0x00000FD8
@TASK_MICROCODE_DATA_SIZE = 0x00000FDC
@TASK_DRAM_STACK = 0x00000FE0
@TASK_DRAM_STACK_SIZE = 0x00000FE4
@TASK_OUTPUT_BUFF = 0x00000FE8
@TASK_OUTPUT_BUFF_SIZE = 0x00000FEC
@TASK_DATA_PTR = 0x00000FF0
@TASK_DATA_SIZE = 0x00000FF4
@TASK_YIELD_DATA_PTR = 0x00000FF8
@TASK_YIELD_DATA_SIZE = 0x00000FFC
#custom
@MAX_DL_STACK_SIZE = 32
@MAX_DL_COUNT = 1000000
@MAX_VERTS = 80
@RSP_SPNOOP = 0 # handle 0 gracefully
@RSP_MTX = 1
@RSP_RESERVED0 = 2 # unknown
@RSP_MOVEMEM = 3 # move a block of memory (up to 4 words) to dmem
@RSP_VTX = 4
@RSP_RESERVED1 = 5 # unknown
@RSP_DL = 6
@RSP_RESERVED2 = 7 # unknown
@RSP_RESERVED3 = 8 # unknown
@RSP_SPRITE2D = 9 # sprite command
@RSP_SPRITE2D_BASE = 9 # sprite command
@RSP_1ST = 0xBF
@RSP_TRI1 = @RSP_1ST
@RSP_CULLDL = @RSP_1ST - 1
@RSP_POPMTX = @RSP_1ST - 2
@RSP_MOVEWORD = @RSP_1ST - 3
@RSP_TEXTURE = @RSP_1ST - 4
@RSP_SETOTHERMODE_H = @RSP_1ST - 5
@RSP_SETOTHERMODE_L = @RSP_1ST - 6
@RSP_ENDDL = @RSP_1ST - 7
@RSP_SETGEOMETRYMODE = @RSP_1ST - 8
@RSP_CLEARGEOMETRYMODE = @RSP_1ST - 9
@RSP_LINE3D = @RSP_1ST - 10
@RSP_RDPHALF_1 = @RSP_1ST - 11
@RSP_RDPHALF_2 = @RSP_1ST - 12
@RSP_RDPHALF_CONT = @RSP_1ST - 13
@RSP_MODIFYVTX = @RSP_1ST - 13
@RSP_TRI2 = @RSP_1ST - 14
@RSP_BRANCH_Z = @RSP_1ST - 15
@RSP_LOAD_UCODE = @RSP_1ST - 16
@RSP_SPRITE2D_SCALEFLIP = @RSP_1ST - 1
@RSP_SPRITE2D_DRAW = @RSP_1ST - 2
@RSP_ZELDAVTX = 1
@RSP_ZELDAMODIFYVTX = 2
@RSP_ZELDACULLDL = 3
@RSP_ZELDABRANCHZ = 4
@RSP_ZELDATRI1 = 5
@RSP_ZELDATRI2 = 6
@RSP_ZELDALINE3D = 7
@RSP_ZELDARDPHALF_2 = 0xf1
@RSP_ZELDASETOTHERMODE_H = 0xe3
@RSP_ZELDASETOTHERMODE_L = 0xe2
@RSP_ZELDARDPHALF_1 = 0xe1
@RSP_ZELDASPNOOP = 0xe0
@RSP_ZELDAENDDL = 0xdf
@RSP_ZELDADL = 0xde
@RSP_ZELDALOAD_UCODE = 0xdd
@RSP_ZELDAMOVEMEM = 0xdc
@RSP_ZELDAMOVEWORD = 0xdb
@RSP_ZELDAMTX = 0xda
@RSP_ZELDAGEOMETRYMODE = 0xd9
@RSP_ZELDAPOPMTX = 0xd8
@RSP_ZELDATEXTURE = 0xd7
@RSP_ZELDASUBMODULE = 0xd6
# 4 is something like a conditional DL
@RSP_DMATRI = 0x05
@G_DLINMEM = 0x07
# RDP commands:
@RDP_NOOP = 0xc0
@RDP_SETCIMG = 0xff
@RDP_SETZIMG = 0xfe
@RDP_SETTIMG = 0xfd
@RDP_SETCOMBINE = 0xfc
@RDP_SETENVCOLOR = 0xfb
@RDP_SETPRIMCOLOR = 0xfa
@RDP_SETBLENDCOLOR = 0xf9
@RDP_SETFOGCOLOR = 0xf8
@RDP_SETFILLCOLOR = 0xf7
@RDP_FILLRECT = 0xf6
@RDP_SETTILE = 0xf5
@RDP_LOADTILE = 0xf4
@RDP_LOADBLOCK = 0xf3
@RDP_SETTILESIZE = 0xf2
@RDP_LOADTLUT = 0xf0
@RDP_RDPSETOTHERMODE = 0xef
@RDP_SETPRIMDEPTH = 0xee
@RDP_SETSCISSOR = 0xed
@RDP_SETCONVERT = 0xec
@RDP_SETKEYR = 0xeb
@RDP_SETKEYGB = 0xea
@RDP_FULLSYNC = 0xe9
@RDP_TILESYNC = 0xe8
@RDP_PIPESYNC = 0xe7
@RDP_LOADSYNC = 0xe6
@RDP_TEXRECT_FLIP = 0xe5
@RDP_TEXRECT = 0xe4
@RSP_ZELDA_MTX_MODELVIEW = 0x00
@RSP_ZELDA_MTX_PROJECTION = 0x04
@RSP_ZELDA_MTX_MUL = 0x00
@RSP_ZELDA_MTX_LOAD = 0x02
@RSP_ZELDA_MTX_PUSH = 0x00
@RSP_ZELDA_MTX_NOPUSH = 0x01
# RSP_SETOTHERMODE_L sft: shift count
@RSP_SETOTHERMODE_SHIFT_ALPHACOMPARE = 0
@RSP_SETOTHERMODE_SHIFT_ZSRCSEL = 2
@RSP_SETOTHERMODE_SHIFT_RENDERMODE = 3
@RSP_SETOTHERMODE_SHIFT_BLENDER = 16
# RSP_SETOTHERMODE_H sft: shift count
@RSP_SETOTHERMODE_SHIFT_BLENDMASK = 0 # unsupported
@RSP_SETOTHERMODE_SHIFT_ALPHADITHER = 4
@RSP_SETOTHERMODE_SHIFT_RGBDITHER = 6
@RSP_SETOTHERMODE_SHIFT_COMBKEY = 8
@RSP_SETOTHERMODE_SHIFT_TEXTCONV = 9
@RSP_SETOTHERMODE_SHIFT_TEXTFILT = 12
@RSP_SETOTHERMODE_SHIFT_TEXTLUT = 14
@RSP_SETOTHERMODE_SHIFT_TEXTLOD = 16
@RSP_SETOTHERMODE_SHIFT_TEXTDETAIL = 17
@RSP_SETOTHERMODE_SHIFT_TEXTPERSP = 19
@RSP_SETOTHERMODE_SHIFT_CYCLETYPE = 20
@RSP_SETOTHERMODE_SHIFT_COLORDITHER = 22 # unsupported in HW 2.0
@RSP_SETOTHERMODE_SHIFT_PIPELINE = 23
# RSP_SETOTHERMODE_H gPipelineMode
@RSP_PIPELINE_MODE_1PRIMITIVE = 1 << @RSP_SETOTHERMODE_SHIFT_PIPELINE
@RSP_PIPELINE_MODE_NPRIMITIVE = 0 << @RSP_SETOTHERMODE_SHIFT_PIPELINE
# RSP_SETOTHERMODE_H gSetCycleType
@CYCLE_TYPE_1 = 0
@CYCLE_TYPE_2 = 1
@CYCLE_TYPE_COPY = 2
@CYCLE_TYPE_FILL = 3
# RSP_SETOTHERMODE_H gSetTextureLUT
@TLUT_FMT_NONE = 0 << @RSP_SETOTHERMODE_SHIFT_TEXTLUT
@TLUT_FMT_UNKNOWN = 1 << @RSP_SETOTHERMODE_SHIFT_TEXTLUT
@TLUT_FMT_RGBA16 = 2 << @RSP_SETOTHERMODE_SHIFT_TEXTLUT
@TLUT_FMT_IA16 = 3 << @RSP_SETOTHERMODE_SHIFT_TEXTLUT
# RSP_SETOTHERMODE_H gSetTextureFilter
@RDP_TFILTER_POINT = 0 << @RSP_SETOTHERMODE_SHIFT_TEXTFILT
@RDP_TFILTER_AVERAGE = 3 << @RSP_SETOTHERMODE_SHIFT_TEXTFILT
@RDP_TFILTER_BILERP = 2 << @RSP_SETOTHERMODE_SHIFT_TEXTFILT
# RSP_SETOTHERMODE_L gSetAlphaCompare
@RDP_ALPHA_COMPARE_NONE = 0 << @RSP_SETOTHERMODE_SHIFT_ALPHACOMPARE
@RDP_ALPHA_COMPARE_THRESHOLD = 1 << @RSP_SETOTHERMODE_SHIFT_ALPHACOMPARE
@RDP_ALPHA_COMPARE_DITHER = 3 << @RSP_SETOTHERMODE_SHIFT_ALPHACOMPARE
# RSP_SETOTHERMODE_L gSetRenderMode
@Z_COMPARE = 0x0010
@Z_UPDATE = 0x0020
@ZMODE_DEC = 0x0c00
# flags for RSP_SETGEOMETRYMODE
@G_ZBUFFER = 0x00000001
@G_TEXTURE_ENABLE = 0x00000002 # Microcode use only
@G_SHADE = 0x00000004 # enable Gouraud interp
@G_SHADING_SMOOTH = 0x00000200 # flat or smooth shaded
@G_CULL_FRONT = 0x00001000
@G_CULL_BACK = 0x00002000
@G_CULL_BOTH = 0x00003000 # To make code cleaner
@G_FOG = 0x00010000
@G_LIGHTING = 0x00020000
@G_TEXTURE_GEN = 0x00040000
@G_TEXTURE_GEN_LINEAR = 0x00080000
@G_LOD = 0x00100000 # NOT IMPLEMENTED
# G_SETIMG fmt: set image formats
@TXT_FMT_RGBA = 0
@TXT_FMT_YUV = 1
@TXT_FMT_CI = 2
@TXT_FMT_IA = 3
@TXT_FMT_I = 4
# G_SETIMG size: set image pixel size
@TXT_SIZE_4b = 0
@TXT_SIZE_8b = 1
@TXT_SIZE_16b = 2
@TXT_SIZE_32b = 3
# Texturing macros
@RDP_TXT_LOADTILE = 7
@RDP_TXT_RENDERTILE = 0
@RDP_TXT_NOMIRROR = 0
@RDP_TXT_WRAP = 0
@RDP_TXT_MIRROR = 0x1
@RDP_TXT_CLAMP = 0x2
@RDP_TXT_NOMASK = 0
@RDP_TXT_NOLOD = 0
# 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.
@RSP_GBI1_MV_MEM_VIEWPORT = 0x80
@RSP_GBI1_MV_MEM_LOOKATY = 0x82
@RSP_GBI1_MV_MEM_LOOKATX = 0x84
@RSP_GBI1_MV_MEM_L0 = 0x86
@RSP_GBI1_MV_MEM_L1 = 0x88
@RSP_GBI1_MV_MEM_L2 = 0x8a
@RSP_GBI1_MV_MEM_L3 = 0x8c
@RSP_GBI1_MV_MEM_L4 = 0x8e
@RSP_GBI1_MV_MEM_L5 = 0x90
@RSP_GBI1_MV_MEM_L6 = 0x92
@RSP_GBI1_MV_MEM_L7 = 0x94
@RSP_GBI1_MV_MEM_TXTATT = 0x96
@RSP_GBI1_MV_MEM_MATRIX_1 = 0x9e #NOTE: this is in moveword table
@RSP_GBI1_MV_MEM_MATRIX_2 = 0x98
@RSP_GBI1_MV_MEM_MATRIX_3 = 0x9a
@RSP_GBI1_MV_MEM_MATRIX_4 = 0x9c
@RSP_GBI2_MV_MEM__VIEWPORT = 8
@RSP_GBI2_MV_MEM__LIGHT = 10
@RSP_GBI2_MV_MEM__POINT = 12
@RSP_GBI2_MV_MEM__MATRIX = 14 #NOTE: this is in moveword table
@RSP_GBI2_MV_MEM_O_LOOKATX = (0)
@RSP_GBI2_MV_MEM_O_LOOKATY = (24)
@RSP_GBI2_MV_MEM_O_L0 = (2 * 24)
@RSP_GBI2_MV_MEM_O_L1 = (3 * 24)
@RSP_GBI2_MV_MEM_O_L2 = (4 * 24)
@RSP_GBI2_MV_MEM_O_L3 = (5 * 24)
@RSP_GBI2_MV_MEM_O_L4 = (6 * 24)
@RSP_GBI2_MV_MEM_O_L5 = (7 * 24)
@RSP_GBI2_MV_MEM_O_L6 = (8 * 24)
@RSP_GBI2_MV_MEM_O_L7 = (9 * 24)
# 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.
@RSP_MOVE_WORD_MATRIX = 0x00 # NOTE: also used by movemem
@RSP_MOVE_WORD_NUMLIGHT = 0x02
@RSP_MOVE_WORD_CLIP = 0x04
@RSP_MOVE_WORD_SEGMENT = 0x06
@RSP_MOVE_WORD_FOG = 0x08
@RSP_MOVE_WORD_LIGHTCOL = 0x0a
@RSP_MOVE_WORD_POINTS = 0x0c
@RSP_MOVE_WORD_PERSPNORM = 0x0e
# These are offsets from the address in the dmem table
@RSP_MV_WORD_OFFSET_NUMLIGHT = 0x00
@RSP_MV_WORD_OFFSET_CLIP_RNX = 0x04
@RSP_MV_WORD_OFFSET_CLIP_RNY = 0x0c
@RSP_MV_WORD_OFFSET_CLIP_RPX = 0x14
@RSP_MV_WORD_OFFSET_CLIP_RPY = 0x1c
@RSP_MV_WORD_OFFSET_FOG = 0x00
@RSP_MV_WORD_OFFSET_POINT_RGBA = 0x10
@RSP_MV_WORD_OFFSET_POINT_ST = 0x14
@RSP_MV_WORD_OFFSET_POINT_XYSCREEN = 0x18
@RSP_MV_WORD_OFFSET_POINT_ZSCREEN = 0x1c
# flags to inhibit pushing of the display list (on branch)
@RSP_DLIST_PUSH = 0x00
@RSP_DLIST_NOPUSH = 0x01
#hack global space until we export classes properly
#node.js uses exports; browser uses this (window)
root = exports ? self
root.C1964jsConstants = C1964jsConstants