Skip to content

Commit 4613704

Browse files
authored
Merge pull request #12 from blackgamma7/master
Adding Register Labels, changing their values to Virtual memory, and revising the header info
2 parents b69d561 + f88f68a commit 4613704

File tree

2 files changed

+105
-18
lines changed

2 files changed

+105
-18
lines changed

src/main/java/n64loaderwv/N64Header.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public N64Header(byte[] data) {
2424
magic = b.readInt(0);
2525
loadAddress = b.readInt(8) & 0xFFFFFFFFL;
2626
title = b.readFixedLenAsciiString(0x20, 0x14);
27-
gameCode = b.readFixedLenAsciiString(0x3B, 0x4);
27+
gameCode = b.readFixedLenAsciiString(0x3c, 0x2);
2828
maskRomVersion = b.readByte(0x3F);
2929
} catch (IOException e) {
3030
Msg.error(this, e);
@@ -35,18 +35,20 @@ public static Structure getDataStructure()
3535
{
3636
Structure header_struct = new StructureDataType("Internal_Header", 0);
3737
header_struct.add(StructConverter.DWORD, 0x04, "Magic", null);
38-
header_struct.add(StructConverter.DWORD, 0x04, "Unknown 1", null);
38+
header_struct.add(StructConverter.DWORD, 0x04, "Clock Rate", null);
3939
header_struct.add(StructConverter.DWORD, 0x04, "Load Address", null);
40-
header_struct.add(StructConverter.DWORD, 0x04, "Unknown 2", null);
41-
header_struct.add(StructConverter.DWORD, 0x04, "Unknown 3", null);
42-
header_struct.add(StructConverter.DWORD, 0x04, "Unknown 4", null);
40+
header_struct.add(StructConverter.DWORD, 0x04, "Release Offset", null);
41+
header_struct.add(StructConverter.DWORD, 0x04, "CRC1", null);
42+
header_struct.add(StructConverter.DWORD, 0x04, "CRC2", null);
4343
header_struct.add(StructConverter.DWORD, 0x04, "Unknown 5", null);
4444
header_struct.add(StructConverter.DWORD, 0x04, "Unknown 6", null);
4545
header_struct.add(StructConverter.STRING, 0x14, "Game Title", null);
4646
header_struct.add(StructConverter.DWORD, 0x04, "Zeroed", null);
4747
header_struct.add(StructConverter.WORD, 0x02, "Zeroed", null);
4848
header_struct.add(StructConverter.BYTE, 0x01, "Zeroed", null);
49-
header_struct.add(StructConverter.STRING, 0x04, "Game Code", null);
49+
header_struct.add(StructConverter.BYTE, 0x01, "Media Type", null);
50+
header_struct.add(StructConverter.STRING, 0x02, "Game Code", null);
51+
header_struct.add(StructConverter.BYTE, 0x01, "Region", null);
5052
header_struct.add(StructConverter.BYTE, 0x01, "Mask ROM Version", null);
5153
return header_struct;
5254
}

src/main/java/n64loaderwv/N64LoaderWVLoader.java

Lines changed: 97 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -66,17 +66,18 @@ class BlockInfo
6666
ArrayList<BlockInfo> initSections = new ArrayList<N64LoaderWVLoader.BlockInfo>()
6767
{
6868
{
69-
add(new BlockInfo(0x00000000, 0x03EFFFFF, "RDRAM Memory",".rdram"));
70-
add(new BlockInfo(0x03F00000, 0x03FFFFFF, "RDRAM Registers",".rdreg"));
71-
add(new BlockInfo(0x04000000, 0x040FFFFF, "SP Registers",".spreg"));
72-
add(new BlockInfo(0x04100000, 0x041FFFFF, "DP Command Registers",".dpcreg"));
73-
add(new BlockInfo(0x04200000, 0x042FFFFF, "DP Span Registers",".dpsreg"));
74-
add(new BlockInfo(0x04300000, 0x043FFFFF, "MIPS Interface (MI) Registers",".mireg"));
75-
add(new BlockInfo(0x04400000, 0x044FFFFF, "Video Interface (VI) Registers",".vireg"));
76-
add(new BlockInfo(0x04500000, 0x045FFFFF, "Audio Interface (AI) Registers",".aireg"));
77-
add(new BlockInfo(0x04600000, 0x046FFFFF, "Peripheral Interface (PI) Registers",".pireg"));
78-
add(new BlockInfo(0x04700000, 0x047FFFFF, "RDRAM Interface (RI) Registers",".rireg"));
79-
add(new BlockInfo(0x04800000, 0x048FFFFF, "Serial Interface (SI) Registers",".sireg"));
69+
//add(new BlockInfo(0x00000000, 0x03EFFFFF, "RDRAM Memory",".rdram"));
70+
add(new BlockInfo(0xA3F00000, 0xA3F00027, "RDRAM Registers",".rdreg"));
71+
add(new BlockInfo(0xa4040000, 0xa404001f, "SP Registers",".spreg"));
72+
add(new BlockInfo(0xa4080000, 0xa4080003, "SP_PC_Reg",".spcreg"));
73+
add(new BlockInfo(0xA4100000, 0xA410001F, "DP Command Registers",".dpcreg"));
74+
add(new BlockInfo(0xA4200000, 0xa420000F, "DP Span Registers",".dpsreg"));
75+
add(new BlockInfo(0xa4300000, 0xa430000F, "MIPS Interface (MI) Registers",".mireg"));
76+
add(new BlockInfo(0xa4400000, 0xa4400037, "Video Interface (VI) Registers",".vireg"));
77+
add(new BlockInfo(0xa4500000, 0xa4500017, "Audio Interface (AI) Registers",".aireg"));
78+
add(new BlockInfo(0xa4600000, 0xa4600034, "Peripheral Interface (PI) Registers",".pireg"));
79+
add(new BlockInfo(0xa4700000, 0xa470001F, "RDRAM Interface (RI) Registers",".rireg"));
80+
add(new BlockInfo(0xa4800000, 0xa480001b, "Serial Interface (SI) Registers",".sireg"));
8081
add(new BlockInfo(0x1FC00000, 0x1FC007BF, "PIF Boot ROM",".pifrom"));
8182
add(new BlockInfo(0x1FC007C0, 0x1FC007FF, "PIF RAM",".pifram"));
8283
add(new BlockInfo(0x80000000, 0x800003FF, "Interrupt Vector Table",".ivt"));
@@ -163,7 +164,7 @@ protected void load(ByteProvider provider, LoadSpec loadSpec, List<Option> optio
163164

164165
Log.info("N64 Loader: Creating segment ROM");
165166
Structure header_struct = N64Header.getDataStructure();
166-
MakeBlock(program, ".rom", "ROM image", 0xB4000000, bapROM.getInputStream(0), (int)bapROM.length(), "101", header_struct, log, monitor);
167+
MakeBlock(program, ".rom", "ROM image", 0xB0000000, bapROM.getInputStream(0), (int)bapROM.length(), "100", header_struct, log, monitor);
167168

168169
Log.info("N64 Loader: Creating segment BOOT");
169170
MakeBlock(program, ".boot", "ROM bootloader", 0xA4000040, bapROM.getInputStream(0x40), 0xFC0, "111", null, log, monitor);
@@ -196,6 +197,90 @@ protected void load(ByteProvider provider, LoadSpec loadSpec, List<Option> optio
196197
program.getSymbolTable().addExternalEntryPoint(addr);
197198
program.getSymbolTable().createLabel(addr, "romMain", SourceType.ANALYSIS);
198199
}
200+
program.getSymbolTable().createLabel(MakeAddress(0xA3f00000L), "RDRAM_CONFIG", SourceType.ANALYSIS);
201+
program.getSymbolTable().createLabel(MakeAddress(0xA3f00004L), "RDRAM_DEVICE_ID", SourceType.ANALYSIS);
202+
program.getSymbolTable().createLabel(MakeAddress(0xA3f00008L), "RDRAM_DELAY", SourceType.ANALYSIS);
203+
program.getSymbolTable().createLabel(MakeAddress(0xA3f0000CL), "RDRAM_MODE", SourceType.ANALYSIS);
204+
program.getSymbolTable().createLabel(MakeAddress(0xA3f00010L), "RDRAM_REF_INTERVAL", SourceType.ANALYSIS);
205+
program.getSymbolTable().createLabel(MakeAddress(0xA3f00014L), "RDRAM_REF_ROW", SourceType.ANALYSIS);
206+
program.getSymbolTable().createLabel(MakeAddress(0xA3f00018L), "RDRAM_RAS_INTERVAL", SourceType.ANALYSIS);
207+
program.getSymbolTable().createLabel(MakeAddress(0xA3f0001CL), "RDRAM_MIN_INTERVAL", SourceType.ANALYSIS);
208+
program.getSymbolTable().createLabel(MakeAddress(0xA3f00020L), "RDRAM_ADDR_SELECT", SourceType.ANALYSIS);
209+
program.getSymbolTable().createLabel(MakeAddress(0xA3f00024L), "RDRAM_DEVICE_MANUF", SourceType.ANALYSIS);
210+
program.getSymbolTable().createLabel(MakeAddress(0xA4040000L), "SP_MEM_ADDR", SourceType.ANALYSIS);
211+
program.getSymbolTable().createLabel(MakeAddress(0xA4040004L), "SP_DRAM_ADDR", SourceType.ANALYSIS);
212+
program.getSymbolTable().createLabel(MakeAddress(0xA4040008L), "SP_RD_LEN", SourceType.ANALYSIS);
213+
program.getSymbolTable().createLabel(MakeAddress(0xA404000CL), "SP_WR_LEN", SourceType.ANALYSIS);
214+
program.getSymbolTable().createLabel(MakeAddress(0xA4040010L), "SP_STATUS", SourceType.ANALYSIS);
215+
program.getSymbolTable().createLabel(MakeAddress(0xA4040014L), "SP_DMA_FULL", SourceType.ANALYSIS);
216+
program.getSymbolTable().createLabel(MakeAddress(0xA4040018L), "SP_DMA_BUSY", SourceType.ANALYSIS);
217+
program.getSymbolTable().createLabel(MakeAddress(0xA404001CL), "SP_SEMAPHORE", SourceType.ANALYSIS);
218+
program.getSymbolTable().createLabel(MakeAddress(0xA408000CL), "SP_PC", SourceType.ANALYSIS);
219+
program.getSymbolTable().createLabel(MakeAddress(0xA4100000L), "DCP_START", SourceType.ANALYSIS);
220+
program.getSymbolTable().createLabel(MakeAddress(0xA4100004L), "DCP_END", SourceType.ANALYSIS);
221+
program.getSymbolTable().createLabel(MakeAddress(0xA4100008L), "DCP_CURRENT", SourceType.ANALYSIS);
222+
program.getSymbolTable().createLabel(MakeAddress(0xA410000cL), "DCP_STATUS", SourceType.ANALYSIS);
223+
program.getSymbolTable().createLabel(MakeAddress(0xA4100010L), "DCP_CLOCK", SourceType.ANALYSIS);
224+
program.getSymbolTable().createLabel(MakeAddress(0xA4100014L), "DCP_BUFBUSY", SourceType.ANALYSIS);
225+
program.getSymbolTable().createLabel(MakeAddress(0xA4100018L), "DCP_PIPEBUSY", SourceType.ANALYSIS);
226+
program.getSymbolTable().createLabel(MakeAddress(0xA410001cL), "DCP_START", SourceType.ANALYSIS);
227+
program.getSymbolTable().createLabel(MakeAddress(0xA4300000L), "MI_INIT_MODE", SourceType.ANALYSIS);
228+
program.getSymbolTable().createLabel(MakeAddress(0xA4300004L), "MI_VERSION", SourceType.ANALYSIS);
229+
program.getSymbolTable().createLabel(MakeAddress(0xA4300008L), "MI_INTR", SourceType.ANALYSIS);
230+
program.getSymbolTable().createLabel(MakeAddress(0xA430000CL), "MI_INTR_MASK", SourceType.ANALYSIS);
231+
program.getSymbolTable().createLabel(MakeAddress(0xA4400000L), "VI_STATUS", SourceType.ANALYSIS);
232+
program.getSymbolTable().createLabel(MakeAddress(0xA4400004L), "VI_ORIGIN", SourceType.ANALYSIS);
233+
program.getSymbolTable().createLabel(MakeAddress(0xA4400008L), "VI_WIDTH", SourceType.ANALYSIS);
234+
program.getSymbolTable().createLabel(MakeAddress(0xA440000CL), "VI_INTR", SourceType.ANALYSIS);
235+
program.getSymbolTable().createLabel(MakeAddress(0xA4400010L), "VI_CURRENT", SourceType.ANALYSIS);
236+
program.getSymbolTable().createLabel(MakeAddress(0xA4400014L), "VI_BURST", SourceType.ANALYSIS);
237+
program.getSymbolTable().createLabel(MakeAddress(0xA4400018L), "VI_V_SYNC", SourceType.ANALYSIS);
238+
program.getSymbolTable().createLabel(MakeAddress(0xA440001CL), "VI_H_SYNC", SourceType.ANALYSIS);
239+
program.getSymbolTable().createLabel(MakeAddress(0xA4400020L), "VI_LEAP", SourceType.ANALYSIS);
240+
program.getSymbolTable().createLabel(MakeAddress(0xA4400024L), "VI_H_START", SourceType.ANALYSIS);
241+
program.getSymbolTable().createLabel(MakeAddress(0xA4400028L), "VI_V_START", SourceType.ANALYSIS);
242+
program.getSymbolTable().createLabel(MakeAddress(0xA440002CL), "VI_V_BURST", SourceType.ANALYSIS);
243+
program.getSymbolTable().createLabel(MakeAddress(0xA4400030L), "VI_X_SCALE", SourceType.ANALYSIS);
244+
program.getSymbolTable().createLabel(MakeAddress(0xA4400034L), "VI_Y_SCALE", SourceType.ANALYSIS);
245+
program.getSymbolTable().createLabel(MakeAddress(0xA4500000L), "AI_DRAM_ADDR", SourceType.ANALYSIS);
246+
program.getSymbolTable().createLabel(MakeAddress(0xA4500004L), "AI_LEN", SourceType.ANALYSIS);
247+
program.getSymbolTable().createLabel(MakeAddress(0xA4500008L), "AI_CONTROL", SourceType.ANALYSIS);
248+
program.getSymbolTable().createLabel(MakeAddress(0xA450000CL), "AI_STATUS", SourceType.ANALYSIS);
249+
program.getSymbolTable().createLabel(MakeAddress(0xA4500010L), "AI_DACRATE", SourceType.ANALYSIS);
250+
program.getSymbolTable().createLabel(MakeAddress(0xA4500014L), "AI_BITRATE", SourceType.ANALYSIS);
251+
program.getSymbolTable().createLabel(MakeAddress(0xA4600000L), "PI_DRAM_ADDR", SourceType.ANALYSIS);
252+
program.getSymbolTable().createLabel(MakeAddress(0xA4600004L), "PI_CART_ADDR", SourceType.ANALYSIS);
253+
program.getSymbolTable().createLabel(MakeAddress(0xA4600008L), "PI_RD_LEN", SourceType.ANALYSIS);
254+
program.getSymbolTable().createLabel(MakeAddress(0xA460000CL), "PI_WR_LEN", SourceType.ANALYSIS);
255+
program.getSymbolTable().createLabel(MakeAddress(0xA4600010L), "PI_STATUS", SourceType.ANALYSIS);
256+
program.getSymbolTable().createLabel(MakeAddress(0xA4600014L), "PI_BSD_DOM1_LAT", SourceType.ANALYSIS);
257+
program.getSymbolTable().createLabel(MakeAddress(0xA4600018L), "PI_BSD_DOM1_PWD", SourceType.ANALYSIS);
258+
program.getSymbolTable().createLabel(MakeAddress(0xA460001CL), "PI_BSD_DOM1_PGS", SourceType.ANALYSIS);
259+
program.getSymbolTable().createLabel(MakeAddress(0xA4600020L), "PI_BSD_DOM1_RLS", SourceType.ANALYSIS);
260+
program.getSymbolTable().createLabel(MakeAddress(0xA4600024L), "PI_BSD_DOM2_LAT", SourceType.ANALYSIS);
261+
program.getSymbolTable().createLabel(MakeAddress(0xA4600028L), "PI_BSD_DOM2_PWD", SourceType.ANALYSIS);
262+
program.getSymbolTable().createLabel(MakeAddress(0xA460002CL), "PI_BSD_DOM2_PGS", SourceType.ANALYSIS);
263+
program.getSymbolTable().createLabel(MakeAddress(0xA4600030L), "PI_BSD_DOM2_RLS", SourceType.ANALYSIS);
264+
program.getSymbolTable().createLabel(MakeAddress(0xA4700000L), "RI_MODE", SourceType.ANALYSIS);
265+
program.getSymbolTable().createLabel(MakeAddress(0xA4700004L), "RI_CONFIG", SourceType.ANALYSIS);
266+
program.getSymbolTable().createLabel(MakeAddress(0xA4700008L), "RI_CURRENT_LOAD", SourceType.ANALYSIS);
267+
program.getSymbolTable().createLabel(MakeAddress(0xA470000CL), "RI_SELECT", SourceType.ANALYSIS);
268+
program.getSymbolTable().createLabel(MakeAddress(0xA4700010L), "RI_REFRESH", SourceType.ANALYSIS);
269+
program.getSymbolTable().createLabel(MakeAddress(0xA4700014L), "RI_LATENCY", SourceType.ANALYSIS);
270+
program.getSymbolTable().createLabel(MakeAddress(0xA4700018L), "RI_RERROR", SourceType.ANALYSIS);
271+
program.getSymbolTable().createLabel(MakeAddress(0xA470001CL), "RI_WERROR", SourceType.ANALYSIS);
272+
program.getSymbolTable().createLabel(MakeAddress(0xA4800000L), "SI_DRAM_ADDR", SourceType.ANALYSIS);
273+
program.getSymbolTable().createLabel(MakeAddress(0xA4800004L), "SI_PIF_ADDR_RD64B_REG", SourceType.ANALYSIS);
274+
program.getSymbolTable().createLabel(MakeAddress(0xA4800010L), "SI_PIF_ADDR_WR64B_REG", SourceType.ANALYSIS);
275+
program.getSymbolTable().createLabel(MakeAddress(0xA4800018L), "SI_STATUS", SourceType.ANALYSIS);
276+
program.getSymbolTable().createLabel(MakeAddress(0x80000300L), "NTSC_PAL", SourceType.ANALYSIS);
277+
program.getSymbolTable().createLabel(MakeAddress(0x80000304L), "CART_DD", SourceType.ANALYSIS);
278+
program.getSymbolTable().createLabel(MakeAddress(0x80000308L), "ROM_BASE", SourceType.ANALYSIS);
279+
program.getSymbolTable().createLabel(MakeAddress(0x8000030cL), "RESET", SourceType.ANALYSIS);
280+
program.getSymbolTable().createLabel(MakeAddress(0x80000310L), "CIC_ID", SourceType.ANALYSIS);
281+
program.getSymbolTable().createLabel(MakeAddress(0x80000314L), "VERSION", SourceType.ANALYSIS);
282+
program.getSymbolTable().createLabel(MakeAddress(0x80000318L), "RDRAM_SIZE", SourceType.ANALYSIS);
283+
program.getSymbolTable().createLabel(MakeAddress(0x8000031cL), "NMI_BUFFER", SourceType.ANALYSIS);
199284
}catch(Exception ex) {}
200285

201286
Log.info("N64 Loader: Done Loading");

0 commit comments

Comments
 (0)