The following settings must be used to enable the script console.
+Go to Options > Configuration and uncheck Hide advanced settings. +Optional: You may also want to uncheck Pause emulation when window is not active for general debugging.
+ + +Click Advanced, then check Enable Debugger. +Optional: Check Always use interpreter core -- +This is required for some of the events interface functions to work, but it may impact game performance.
+ + +Go to Debugger > Scripts... to open the script console.
+ + +You can view the scripts directory in the file explorer by clicking the ... button. +JavaScript (*.js) files in the root of this directory are visible to the console.
+A script may be toggled by double clicking it, or selecting it and then clicking the Run/Stop button.
+While a script is active you may select it and enter code in the input box at the bottom of of the window. +Entered code is evaluated in the selected script's instance (namespace is not shared between instances). +You can use the up and down arrow keys to scroll through input history.
+You may configure a script to run automatically when Project64 is started by right clicking it and clicking Autorun...
+ + +Project64's script system uses the Duktape JavaScript engine. Duktape supports ECMAScript E5 and some features from ES2015+.
+ + ++console.log("Hello", "world!"); ++ +
+console.print("Hello "); +console.print("world!\n"); ++ +
Overrides the default input behavior; console input will be passed to inputListener instead of being evaluated as JS code.
+ +The listener may be unset by calling console.listen(null).
++console.listen(function(input) { + var args = input.split(" "); + var command = args.shift(); + switch(command) { + case "ping": + console.log("pong (args were:", args.join(", "), ")"); + return; + case "end": + console.log("done"); + console.listen(null); + return; + default: + console.log("unknown command '" + command + "'"); + } +}); ++ +
Path to the current ROM directory. Read-only.
+ +Object containing information about the current ROM. null if no ROM is loaded.
+pj64.romInfo.goodName | RDB "Good Name". |
pj64.romInfo.fileName | Name of the ROM file including the file extension. |
pj64.romInfo.filePath | Path to the ROM file. |
pj64.romInfo.crc1 | Internal CRC 1. |
pj64.romInfo.crc2 | Internal CRC 2. |
pj64.romInfo.name | Internal name. |
pj64.romInfo.mediaFormat | Internal media format number. |
pj64.romInfo.id | Internal ID character pair. |
pj64.romInfo.countryCode | Internal country code character. |
pj64.romInfo.version | Internal version number. |
+// Read some data from ROM and RAM +var firstWordInROM = mem.u32[0xB0000000]; +var firstWordInRAM = mem.u32[0x80000000]; ++
+// Move player to 0,0,0 (SM64 US) +const pPlayerX = 0x8033B1AC; +const pPlayerY = 0x8033B1B0; +const pPlayerZ = 0x8033B1B4; + +mem.f32[pPlayerX] = 0; +mem.f32[pPlayerY] = 0; +mem.f32[pPlayerZ] = 0; ++ +
+mem.bindvar(global, 0x8033B1AC, 'playerX', f32); +mem.bindvar(global, 0x8033B1B0, 'playerY', f32); +mem.bindvar(global, 0x8033B1B4, 'playerZ', f32); + +console.log("Player's coordinates are ", playerX, playerY, playerZ); ++ +
Adds multiple memory-bound properties to object. +vars must be an array in which each item is an array containing an address, name, and type ID (in order) describing a variable.
+ +Returns object.
++mem.bindvars(global, [ + [ 0x8033B1AC, 'playerX', f32 ], + [ 0x8033B1B0, 'playerY', f32 ], + [ 0x8033B1B4, 'playerZ', f32 ] +]); + +console.log("Player's coordinates are ", playerX, playerY, playerZ); ++ +
Adds multiple memory-bound properties to object. +properties must be an object in which each key/value pair specifies the name and type ID of a variable.
+ +Returns object.
++var playerPos = mem.bindstruct({}, 0x8033B1AC, { x: f32, y: f32, z: f32 }); +console.log("Player's coordinates are ", playerPos.x, playerPos.y, playerPos.z); ++ +
+const vec3f = mem.typedef({ x: f32, y: f32, z: f32 }); +var playerAngle = new vec3f(0x8033B19C); +var playerPos = new vec3f(0x8033B1AC); ++ +
+fs.writefile("ram_dump.bin", mem.getblock(K0BASE, mem.ramSize)); ++ +
+mem.setblock(0x80400000, fs.readfile("textures.bin")); ++ +
+const romName = mem.getstring(0xB0000020, 0x14); ++ +
+// C +duk_ret_t example(duk_context* ctx) +{ + uint8_t* memory = NULL; + duk_get_global_string(ctx, "mem"); + duk_get_prop_string(ctx, -1, "ptr"); + memory = duk_get_pointer(ctx, -1); + duk_pop_n(ctx, 3); + // do something to memory here + return 0; +} ++ +
Returns a callback ID.
+ ++
e.callbackId | ID of the callback associated with the event. |
e.state | State number. See table below. |
EMU_STARTED | Emulation started. |
EMU_STOPPED | Emulation stopped. |
EMU_PAUSED | Emulation paused. |
EMU_RESUMED | Emulation resumed from a pause. |
EMU_RESETTING | Emulation is resetting. |
EMU_RESET | Emulation reset. |
EMU_LOADED_ROM | A ROM or 64DD image has been loaded. |
EMU_DEBUG_PAUSED | Emulation paused via debugger break. |
EMU_DEBUG_RESUMED | Emulation resumed via the debugger. |
Returns a callback ID.
++events.onexec(0x802CB1C0, function() { + console.log("func_802CB1C0 was called"); +}); ++
+// Log every CPU step +events.onexec(ADDR_ANY, function(e) { + console.log(e.pc.hex() + ": " + asm.decode(mem.u32[e.pc], e.pc)); +}); ++ +
e.callbackId | ID of the callback associated with the event. |
e.pc | Program counter address. |
Returns a callback ID.
+ +Returns a callback ID.
++events.onwrite(PI_WR_LEN_REG, function(e) { + var romAddr = mem.u32[PI_CART_ADDR_REG] + K1BASE; + var ramAddr = mem.u32[PI_DRAM_ADDR_REG] + K0BASE; + var length = e.value + 1; + console.log("Loaded " + romAddr.hex() + " -> " + ramAddr.hex() + " (Length: " + length.hex() + ")"); +}); ++ +
+
e.callbackId | ID of the callback associated with the event. |
e.pc | Program counter address. |
e.address | Address that the CPU is going to read/write. |
e.fpu | true if the source/destination register is on the floating point unit. |
e.reg | Index of the source/destination register. |
e.valueType | The value's type ID. Varies depending on the opcode; refer to the table below. |
e.value | Value that the CPU is going to read/write. |
e.valueHi | Upper 32 bits of the value if e.valueType is u64; otherwise undefined. |
+
e.type | Opcode(s) |
s8 | LB, SB |
u8 | LBU |
s16 | LH, SH |
u16 | LHU |
s32 | LL, LW, LWL, LWR, SW, SWL, SWR |
u32 | LWU |
u64 | LD, LDL, LDR, SD, SDL, SDR |
f32 | LWC1, SWC1 |
f64 | LDC1, SDC1 |
Returns a callback ID.
++// Log every JAL +const JAL = asm.encode("jal 0"); +const ANY_TARGET = 0xFC000000; // Mask off target field +events.onopcode(ADDR_ANY, JAL, ANY_TARGET, function(e) { + console.log(e.pc.hex() + ": " + asm.decode(mem.u32[e.pc], e.pc)); +}); ++ +
e.callbackId | ID of the callback associated with the event. |
e.pc | Program counter address. |
e.opcode | The opcode. |
Returns a callback ID.
+See General purpose register flags for a list of valid flags. Multiple registers may be specified via bitwise OR.
++// Break when any general purpose register contains 0x49533634 +const IS64_SIGNATURE = 0x49533634; +events.ongprvalue(ADDR_ANY, GPR_ANY, IS64_SIGNATURE, function() { + debug.breakhere(); +}); ++ +
GPR_ANY
+GPR_R0 GPR_AT GPR_V0 GPR_V1 GPR_A0 GPR_A1 GPR_A2 GPR_A3
+GPR_T0 GPR_T1 GPR_T2 GPR_T3 GPR_T4 GPR_T5 GPR_T6 GPR_T7
+GPR_S0 GPR_S1 GPR_S2 GPR_S3 GPR_S4 GPR_S5 GPR_S6 GPR_S7
+GPR_T8 GPR_T9 GPR_K0 GPR_K1 GPR_GP GPR_SP GPR_FP GPR_RA
+ +e.callbackId | ID of the callback associated with the event. |
e.pc | Program counter address. |
e.value | The value. |
e.reg | Index of the register containing the value. |
Returns a callback ID.
+Useful for monitoring and overriding controller input.
++// Log P1's controller input +events.onpifread(function() { + if(mem.u32[PIF_RAM_START + 0x00] == 0xFF010401) { + console.log(mem.u32[PIF_RAM_START + 0x04].hex()); + } +}); ++ +
+// Play an M64 TAS file +var m64file = fs.readfile("sm64-1key.m64"); +var numSamples = m64file.readUInt32LE(0x018); +var sampleIndex = 0; + +events.onpifread(function() { + for(var nController = 0; nController < 4; nController++) { + var cmdAddr = PIF_RAM_START + (nController * 8); + if(mem.u32[cmdAddr + 0x00] == 0xFF010401 && sampleIndex < numSamples) { + mem.u32[cmdAddr + 0x04] = m64file.readUInt32BE(0x400 + sampleIndex * 4); + sampleIndex++; + } + } +}); ++ +
e.callbackId | ID of the callback associated with the event. |
Returns a callback ID.
+Useful for monitoring and overriding display lists and audio lists.
++events.onsptask(function(e) { + if (e.taskType == M_GFXTASK) { + console.log("Display list address: " + e.dataAddress); + } + else if (e.taskType == M_AUDTASK) { + console.log("Audio list address: " + e.dataAddress); + } +}); ++ +
e.callbackId | ID of the callback associated with the event. |
e.taskType | The task type. M_GFXTASK (1) for graphics tasks, or M_AUDTASK (2) for audio tasks. |
e.taskFlags | Task flags. |
e.ucodeBootAddress | Address of the boot microcode. |
e.ucodeBootSize | Size of the boot microcode. |
e.ucodeAddress | Address of the task microcode. |
e.ucodeSize | Size of the task microcode. |
e.ucodeDataAddress | Address of the microcode data. |
e.ucodeDataSize | Size of the microcode data. |
e.dramStackAddress | Address of the DRAM matrix stack. |
e.dramStackSize | Size of the DRAM matrix stack. |
e.outputBuffAddress | DP command buffer address for "_dram" and "_fifo" graphics microcodes. |
e.outputBuffSize | DP command buffer size for "_dram" and "_fifo" graphics microcodes. |
e.dataAddress | Address of the display list or audio list. |
e.dataSize | Size of the display list or audio list. |
e.yieldDataAddress | Address of the yield data buffer. |
e.yieldDataSize | Size of the yield data buffer. |
Note: The properties of this object differ slightly from those in the DMEM OSTask structure; +all physical addresses are converted to KSEG0 addresses.
+ +Returns a callback ID.
++// Log all cartridge <-> RDRAM data transfers +events.onpidma(function(e) { + var dir = e.direction == OS_READ ? 'READ' : 'WRITE'; + console.log('[PI]', dir, e.dramAddress.hex(), e.cartAddress.hex(), e.length.hex()); +}); ++ +
e.callbackId | The ID of the callback associated with the event. |
e.direction | The direction of the DMA transfer. May be OS_READ (0), or OS_WRITE (1). |
e.dramAddress | The address in PI_DRAM_ADDR_REG (+K0BASE). |
e.cartAddress | The address in PI_CART_ADDR_REG (+K1BASE). |
e.length | The value of PI_RD_LEN_REG or PI_WR_LEN_REG (+1), depending on the transfer direction. |
Returns a callback ID.
+ +Returns a callback ID.
+ +Returns a callback ID.
+ ++
e.callbackId | ID of the callback associated with the event. |
e.button | The mouse button number. See table below. |
e.x | Cursor X position. |
e.y | Cursor Y position. |
+
MouseEvent.LEFT | 0 |
MouseEvent.MIDDLE | 1 |
MouseEvent.RIGHT | 2 |
MouseEvent.NONE | -1 |
+// This callback will only be invoked once +events.onexec(0x802CB1C0, function(e) { + console.log("func_802CB1C0 was called"); + events.remove(e.callbackId); +}); ++ +
The following AddressRange objects are defined globally:
+ +ADDR_ANY | 0x00000000 : 0xFFFFFFFF | Any address |
ADDR_ANY_KUSEG | 0x00000000 : 0x7FFFFFFF | MIPS user mode TLB mapped segment |
ADDR_ANY_KSEG0 | 0x80000000 : 0x9FFFFFFF | MIPS cached unmapped segment |
ADDR_ANY_KSEG1 | 0xA0000000 : 0xBFFFFFFF | MIPS uncached unmapped segment |
ADDR_ANY_KSEG2 | 0xC0000000 : 0xFFFFFFFF | MIPS kernel mode TLB mapped segment |
ADDR_ANY_RDRAM | 0x80000000 : 0x807FFFFF | Cached RDRAM |
ADDR_ANY_RDRAM_UNC | 0xA0000000 : 0xA07FFFFF | Uncached RDRAM |
ADDR_ANY_CART_ROM | 0x90000000 : 0x95FFFFFF | Cached cartridge ROM |
ADDR_ANY_CART_ROM_UNC | 0xB0000000 : 0xB5FFFFFF | Uncached cartridge ROM |
+width: Width of the image.
+height: Height of the image.
+format: Optional image format. IMG_RGBA32 by default. See the table below for supported formats.
+pixels: Optional Buffer object containing pixel data.
+The byte length must be equal to (width * height * N64Image.bpp(format)) / 8. Copied to image.pixels.
+palette: Optional Buffer object containing palette data. Copied to image.palette.
+
Format | Pixels | Palette |
IMG_RGBA16 | 16-bit colors (r5g5b5a1) | (not used) |
IMG_RGBA32 | 32-bit colors (r8g8b8a8) | (not used) |
IMG_CI4_RGBA16 | 4-bit color indices | 16-bit colors (r5g5b5a1) |
IMG_CI4_IA16 | 4-bit color indices | 16-bit intensity/alpha values (i8a8) |
IMG_CI8_RGBA16 | 8-bit color indices | 16-bit colors (r5g5b5a1) |
IMG_CI8_IA16 | 8-bit color indices | 16-bit intensity/alpha values (i8a8) |
IMG_IA4 | 4-bit intensity/alpha values (i3a1) | (not used) |
IMG_IA8 | 8-bit intensity/alpha values (i4a4) | (not used) |
IMG_IA16 | 16-bit intensity/alpha values (i8a8) | (not used) |
IMG_I4 | 4-bit intensity values | (not used) |
IMG_I8 | 8-bit intensity values | (not used) |
+var image = N64Image.fromPNG(fs.readfile("image.png")); ++Color quantization is not implemented. An error is thrown if format is a color-index (CI) type +and the color count of the PNG image exceeds the maximum number of colors supported. The maximum +number of colors supported by the CI4 and CI8 formats are 16 and 256, respectively. + +
Static function. Returns a simplified image format number from a given GBI pixel size and format configuration. +Returns -1 if the configuration is invalid or unsupported. See the table below for supported configurations.
+gbiFmt | gbiSiz | gbiTlutFmt | Return value |
G_IM_FMT_RGBA | G_IM_SIZ_16b | (not used) | IMG_RGBA16 |
G_IM_FMT_RGBA | G_IM_SIZ_32b | (not used) | IMG_RGBA32 |
G_IM_FMT_CI | G_IM_SIZ_4b | G_TT_RGBA16 | IMG_CI4_RGBA16 |
G_IM_FMT_CI | G_IM_SIZ_4b | G_TT_IA16 | IMG_CI4_IA16 |
G_IM_FMT_CI | G_IM_SIZ_8b | G_TT_RGBA16 | IMG_CI8_RGBA16 |
G_IM_FMT_CI | G_IM_SIZ_8b | G_TT_IA16 | IMG_CI8_IA16 |
G_IM_FMT_IA | G_IM_SIZ_4b | (not used) | IMG_IA4 |
G_IM_FMT_IA | G_IM_SIZ_8b | (not used) | IMG_IA8 |
G_IM_FMT_IA | G_IM_SIZ_16b | (not used) | IMG_IA16 |
G_IM_FMT_I | G_IM_SIZ_4b | (not used) | IMG_I4 |
G_IM_FMT_I | G_IM_SIZ_8b | (not used) | IMG_I8 |
+N64Image.bpp(IMG_CI8_RGBA16); // 8 +N64Image.bpp(G_IM_SIZ_16b); // 16 ++ +
+fs.writefile("image.png", image.toPNG()); ++ +
Variables representing the CPU's Coprocessor 0 registers.
+cpu.cop0.index | Index register. |
cpu.cop0.random | Random register. |
cpu.cop0.entrylo0 | EntryLo0 register. |
cpu.cop0.entrylo1 | EntryLo1 register. |
cpu.cop0.context | Context register. |
cpu.cop0.pagemask | PageMask register. |
cpu.cop0.wired | Wired register. |
cpu.cop0.badvaddr | BadVAddr register. |
cpu.cop0.count | Count register. |
cpu.cop0.entryhi | EntryHi register. |
cpu.cop0.compare | Compare register. |
cpu.cop0.status | Status register. |
cpu.cop0.cause | Cause register. Generates an interrupt when written. |
cpu.cop0.epc | EPC register. |
cpu.cop0.config | Config register. |
cpu.cop0.taglo | TagLo register. |
cpu.cop0.taghi | TagHi register. |
cpu.cop0.errorepc | ErrorEPC register. |
+Emulation may be resumed by calling debug.resume() or clicking the "Go" button in the CPU commands window. +
++// Break if the CPU tries to write 5 to 0x80339EA8 +events.onwrite(0x80339EA8, function(e) { + if(e.value == 5) { + debug.breakhere(); + } +}); ++ +
+// Do not let the CPU write to 0x8033B21E +events.onwrite(0x8033B21E, function() { + debug.skip(); +}); ++ +
Returns the opcode as a number.
++asm.encode("nop"); // 0x00000000 +asm.encode("addiu sp, sp, -24"); // 0x27BDFFE8 +asm.encode("b 0x80400000", 0x803FFF00); // 0x1000003F +asm.encode("b 0x80400000", 0x80400100); // 0x1000FFBF ++ +
Returns a line of assembly code as a string.
++asm.decode(0x00000000); // "NOP" +asm.decode(0x27BDFFE8); // "ADDIU SP, SP, -0x18" +asm.decode(0x1000003F, 0x803FFF00); // "B 0x80400000" +asm.decode(0x1000FFBF, 0x80400100); // "B 0x80400000" ++ +
+asm.gprname(4); // Returns "a0" ++ +
Returns a file descriptor.
+ +
+offset: Optional position in the source buffer.
+length: Optional maximum number of bytes to write.
+position: Optional file position.
+
Returns the number of bytes written.
++var fd = fs.open("file.txt", "wb"); +fs.write(fd, "Hello "); +fs.write(fd, "world!\n"); +fs.close(fd); ++ +
+fs.writefile("ram_dump.bin", mem.getblock(K0BASE, mem.ramSize)); ++ +
+offset: Position in the source buffer.
+length: Number of bytes to read.
+position: File position. +
Returns the number of bytes read.
+ +Object containing information about a file or directory. Generated by fs.fstat/fs.stat.
++
stats.dev | ID of the device the file resides on |
stats.ino | inode number |
stats.mode | File permissions |
stats.nlink | Number of links to the file |
stats.uid | User ID |
stats.gid | Group ID |
stats.rdev | Device ID (if file is character or block special) |
stats.size | Size of the file in bytes |
stats.atimeMs | Last access timestamp in milliseconds |
stats.mtimeMs | Last modification timestamp in milliseconds |
stats.ctimeMs | Creation timestamp in milliseconds |
stats.atime | JS Date object representing the last access time |
stats.mtime | JS Date object representing the last modification time |
stats.ctime | JS Date object representing the creation time |
+
Returns true if the fs.Stats object describes a directory.
+ +stats.isFile()+
Returns true if the fs.Stats object describes a regular file.
+ +Creates a Socket object. options may contain the following properties:
+allowHalfOpen | If true, the socket will not automatically fully close when the read half is closed. false by default. |
+var client = new Socket(); + +client.connect(80, 'www.example.com', function() { + var response = ''; + + client.on('data', function(data) { + response += data.toString(); + }); + + client.on('end', function() { + console.log(response); + }); + + const message = [ + "GET / HTTP/1.1", + "Host: www.example.com", + "Connection: close", + "\r\n" + ].join("\r\n"); + + client.end(message); +}); ++ +
Sends data on the socket.
+Optional callback is invoked when all bytes of data are sent. + +Sends optional data and closes the write half of the socket after all buffered writes are sent.
+Optional callback is invoked when all buffered writes are sent and the write half of the socket is closed. + +Registers a listener for the 'connect' event.
+listener is invoked when the connection is established. +Returns the Socket object.
+ +Registers a listener for the 'lookup' event.
+listener receives an object with the following properties when the host name is resolved:
+err | null, or an Error object if an error occurred (TODO) |
address | IP address string |
port | Port number |
family | "IPv4" or "IPv6" |
Returns the Socket object.
+ +Registers a listener for the 'data' event.
+listener receives data as a Buffer object. +Returns the Socket object.
+ +Registers a listener for the 'end' event.
+listener is invoked when the other side closes the read half of the socket. +Returns the Socket object.
+ +Registers a listener for the 'close' event.
+listener is invoked when the socket is fully closed. +Returns the Socket object.
+ +Registers a listener for the 'drain' event.
+listener is invoked when all buffered writes are sent. +Returns the Socket object.
+ +Registers a listener for the 'error' event.
+listener receives an Error object when an error occurs. +Returns the Socket object.
+ +Returns the Socket object.
+ ++var server = new Server(); +server.listen(1337, "127.0.0.1"); + +server.on('connection', function(c) { + c.on('data', function(data) { + if(data.toString() == 'ping') { + c.write('pong'); + } + }); + + c.on('end', function() { + console.log("client ended connection"); + }) +}); ++ +
Registers a listener for the 'connection' event.
+listener receives a Socket object when a client has connected. +Returns the Server object.
+ +Registers a listener for the 'listening' event.
+listener is invoked when the server begins listening for connections. +Returns the Server object.
+ +Registers a listener for the 'close' event.
+listener is invoked when the server is closed. +Returns the Server object.
+ +Registers a listener for the 'error' event.
+listener receives an Error object when an error occurs. +Returns the Server object.
+ +Returns the Server object.
+ ++global.test = 1; +console.log(test); // "1" ++ +
+
-
+
- The name of a JavaScript (*.js) or DLL (*.dll) file in the Scripts/modules directory. +
- If id begins with ./ or ../, the path of a JavaScript or DLL file relative to the calling module's location. +
+/* Scripts/module_example.js */ + +const mymodule = require('mymodule/lib.js'); // Loads Scripts/modules/mymodule/lib.js +mymodule.init(); // Prints "Loaded mymodule" ++
+/* Scripts/modules/mymodule/lib.js */ + +function init() { + console.log("Loaded mymodule"); +} + +module.exports = { + init: init +}; ++
Native modules use the Duktape C module convention.
+ +Returns the standard output of the subprocess as a string.
+ +options may contain any of the following properties:
+ +showWindow | If true, the window of the subprocess is visible. false by default. |
verbose | If true, the output of the subprocess is sent to the script manager console. false by default. |
cwd | Current working directory of the subprocess. By default this is the directory containing Project64. |
This function throws an error if the operation fails or if the exit code of the subprocess is non-zero. +The thrown error object contains the following properties:
+ +status | The exit code of the subprocess. |
stdout | The standard output of the subprocess. |
stderr | The standard error output of the subprocess. |
pid | The PID of the subprocess. |
+try { + exec("dir", { verbose: true }); +} catch(err) { + console.log("exec() failed with code", err.status); + console.log(err.stderr); +} ++ +
Returns a timeout ID.
+ +Returns an interval ID.
+ ++var n = 123; +n.hex(); // 0000007B +n.hex(4); // 007B ++ +
u8 | Unsigned 8-bit integer |
u16 | Unsigned 16-bit integer |
u32 | Unsigned 32-bit integer |
s8 | Signed 8-bit integer |
s16 | Signed 16-bit integer |
s32 | Signed 32-bit integer |
f32 | 32-bit single precision floating-point |
f64 | 64-bit double precision floating-point |
u64 | Unsigned 64-bit integer |
s64 | Signed 64-bit integer |
Note: The mem.bind*/mem.typedef APIs do not currently support u64 and s64.
+ ++
RDRAM_CONFIG_REG | 0xA3F00000 |
RDRAM_DEVICE_TYPE_REG | 0xA3F00000 |
RDRAM_DEVICE_ID_REG | 0xA3F00004 |
RDRAM_DELAY_REG | 0xA3F00008 |
RDRAM_MODE_REG | 0xA3F0000C |
RDRAM_REF_INTERVAL_REG | 0xA3F00010 |
RDRAM_REF_ROW_REG | 0xA3F00014 |
RDRAM_RAS_INTERVAL_REG | 0xA3F00018 |
RDRAM_MIN_INTERVAL_REG | 0xA3F0001C |
RDRAM_ADDR_SELECT_REG | 0xA3F00020 |
RDRAM_DEVICE_MANUF_REG | 0xA3F00024 |
SP_MEM_ADDR_REG | 0xA4040000 |
SP_DRAM_ADDR_REG | 0xA4040004 |
SP_RD_LEN_REG | 0xA4040008 |
SP_WR_LEN_REG | 0xA404000C |
SP_STATUS_REG | 0xA4040010 |
SP_DMA_FULL_REG | 0xA4040014 |
SP_DMA_BUSY_REG | 0xA4040018 |
SP_SEMAPHORE_REG | 0xA404001C |
SP_PC_REG | 0xA4080000 |
SP_IBIST_REG | 0xA4080004 |
DPC_START_REG | 0xA4100000 |
DPC_END_REG | 0xA4100004 |
DPC_CURRENT_REG | 0xA4100008 |
DPC_STATUS_REG | 0xA410000C |
DPC_CLOCK_REG | 0xA4100010 |
DPC_BUFBUSY_REG | 0xA4100014 |
DPC_PIPEBUSY_REG | 0xA4100018 |
DPC_TMEM_REG | 0xA410001C |
DPS_TBIST_REG | 0xA4200000 |
DPS_TEST_MODE_REG | 0xA4200004 |
DPS_BUFTEST_ADDR_REG | 0xA4200008 |
DPS_BUFTEST_DATA_REG | 0xA420000C |
MI_INIT_MODE_REG | 0xA4300000 |
MI_MODE_REG | 0xA4300000 |
MI_VERSION_REG | 0xA4300004 |
MI_NOOP_REG | 0xA4300004 |
MI_INTR_REG | 0xA4300008 |
MI_INTR_MASK_REG | 0xA430000C |
VI_STATUS_REG | 0xA4400000 |
VI_CONTROL_REG | 0xA4400000 |
VI_ORIGIN_REG | 0xA4400004 |
VI_DRAM_ADDR_REG | 0xA4400004 |
VI_WIDTH_REG | 0xA4400008 |
VI_H_WIDTH_REG | 0xA4400008 |
VI_INTR_REG | 0xA440000C |
VI_V_INTR_REG | 0xA440000C |
VI_CURRENT_REG | 0xA4400010 |
VI_V_CURRENT_LINE_REG | 0xA4400010 |
VI_BURST_REG | 0xA4400014 |
VI_TIMING_REG | 0xA4400014 |
VI_V_SYNC_REG | 0xA4400018 |
VI_H_SYNC_REG | 0xA440001C |
VI_LEAP_REG | 0xA4400020 |
VI_H_SYNC_LEAP_REG | 0xA4400020 |
VI_H_START_REG | 0xA4400024 |
VI_H_VIDEO_REG | 0xA4400024 |
VI_V_START_REG | 0xA4400028 |
VI_V_VIDEO_REG | 0xA4400028 |
VI_V_BURST_REG | 0xA440002C |
VI_X_SCALE_REG | 0xA4400030 |
VI_Y_SCALE_REG | 0xA4400034 |
AI_DRAM_ADDR_REG | 0xA4500000 |
AI_LEN_REG | 0xA4500004 |
AI_CONTROL_REG | 0xA4500008 |
AI_STATUS_REG | 0xA450000C |
AI_DACRATE_REG | 0xA4500010 |
AI_BITRATE_REG | 0xA4500014 |
PI_DRAM_ADDR_REG | 0xA4600000 |
PI_CART_ADDR_REG | 0xA4600004 |
PI_RD_LEN_REG | 0xA4600008 |
PI_WR_LEN_REG | 0xA460000C |
PI_STATUS_REG | 0xA4600010 |
PI_BSD_DOM1_LAT_REG | 0xA4600014 |
PI_BSD_DOM1_PWD_REG | 0xA4600018 |
PI_BSD_DOM1_PGS_REG | 0xA460001C |
PI_BSD_DOM1_RLS_REG | 0xA4600020 |
PI_BSD_DOM2_LAT_REG | 0xA4600024 |
PI_BSD_DOM2_PWD_REG | 0xA4600028 |
PI_BSD_DOM2_PGS_REG | 0xA460002C |
PI_BSD_DOM2_RLS_REG | 0xA4600030 |
RI_MODE_REG | 0xA4700000 |
RI_CONFIG_REG | 0xA4700004 |
RI_CURRENT_LOAD_REG | 0xA4700008 |
RI_SELECT_REG | 0xA470000C |
RI_REFRESH_REG | 0xA4700010 |
RI_COUNT_REG | 0xA4700010 |
RI_LATENCY_REG | 0xA4700014 |
RI_RERROR_REG | 0xA4700018 |
RI_WERROR_REG | 0xA470001C |
SI_DRAM_ADDR_REG | 0xA4800000 |
SI_PIF_ADDR_RD64B_REG | 0xA4800004 |
SI_PIF_ADDR_WR64B_REG | 0xA4800010 |
SI_STATUS_REG | 0xA4800018 |
+
PIF_ROM_START | 0xBFC00000 |
PIF_RAM_START | 0xBFC007C0 |
SP_DMEM_START | 0xA4000000 |
SP_IMEM_START | 0xA4001000 |
+
KUBASE | 0x00000000 |
K0BASE | 0x80000000 |
K1BASE | 0xA0000000 |
K2BASE | 0xC0000000 |
+
UT_VEC | 0x80000000 |
R_VEC | 0xBFC00000 |
XUT_VEC | 0x80000080 |
ECC_VEC | 0x80000100 |
E_VEC | 0x80000180 |
+
M_GFXTASK | 1 |
M_AUDTASK | 2 |
+
OS_READ | 0 |
OS_WRITE | 1 |
+
G_IM_FMT_RGBA | 0 |
G_IM_FMT_YUV | 1 |
G_IM_FMT_CI | 2 |
G_IM_FMT_IA | 3 |
G_IM_FMT_I | 4 |
+
G_IM_SIZ_4b | 0 |
G_IM_SIZ_8b | 1 |
G_IM_SIZ_16b | 2 |
G_IM_SIZ_32b | 3 |
+
G_TT_NONE | 0x0000 |
G_TT_RGBA16 | 0x8000 |
G_TT_IA16 | 0xC000 |