Skip to content

Commit

Permalink
Merge pull request #12 from blackgamma7/master
Browse files Browse the repository at this point in the history
Adding Register Labels, changing their values to Virtual memory, and revising the header info
  • Loading branch information
zeroKilo committed Aug 24, 2020
2 parents b69d561 + f88f68a commit 4613704
Show file tree
Hide file tree
Showing 2 changed files with 105 additions and 18 deletions.
14 changes: 8 additions & 6 deletions src/main/java/n64loaderwv/N64Header.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public N64Header(byte[] data) {
magic = b.readInt(0);
loadAddress = b.readInt(8) & 0xFFFFFFFFL;
title = b.readFixedLenAsciiString(0x20, 0x14);
gameCode = b.readFixedLenAsciiString(0x3B, 0x4);
gameCode = b.readFixedLenAsciiString(0x3c, 0x2);
maskRomVersion = b.readByte(0x3F);
} catch (IOException e) {
Msg.error(this, e);
Expand All @@ -35,18 +35,20 @@ public static Structure getDataStructure()
{
Structure header_struct = new StructureDataType("Internal_Header", 0);
header_struct.add(StructConverter.DWORD, 0x04, "Magic", null);
header_struct.add(StructConverter.DWORD, 0x04, "Unknown 1", null);
header_struct.add(StructConverter.DWORD, 0x04, "Clock Rate", null);
header_struct.add(StructConverter.DWORD, 0x04, "Load Address", null);
header_struct.add(StructConverter.DWORD, 0x04, "Unknown 2", null);
header_struct.add(StructConverter.DWORD, 0x04, "Unknown 3", null);
header_struct.add(StructConverter.DWORD, 0x04, "Unknown 4", null);
header_struct.add(StructConverter.DWORD, 0x04, "Release Offset", null);
header_struct.add(StructConverter.DWORD, 0x04, "CRC1", null);
header_struct.add(StructConverter.DWORD, 0x04, "CRC2", null);
header_struct.add(StructConverter.DWORD, 0x04, "Unknown 5", null);
header_struct.add(StructConverter.DWORD, 0x04, "Unknown 6", null);
header_struct.add(StructConverter.STRING, 0x14, "Game Title", null);
header_struct.add(StructConverter.DWORD, 0x04, "Zeroed", null);
header_struct.add(StructConverter.WORD, 0x02, "Zeroed", null);
header_struct.add(StructConverter.BYTE, 0x01, "Zeroed", null);
header_struct.add(StructConverter.STRING, 0x04, "Game Code", null);
header_struct.add(StructConverter.BYTE, 0x01, "Media Type", null);
header_struct.add(StructConverter.STRING, 0x02, "Game Code", null);
header_struct.add(StructConverter.BYTE, 0x01, "Region", null);
header_struct.add(StructConverter.BYTE, 0x01, "Mask ROM Version", null);
return header_struct;
}
Expand Down
109 changes: 97 additions & 12 deletions src/main/java/n64loaderwv/N64LoaderWVLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,17 +66,18 @@ class BlockInfo
ArrayList<BlockInfo> initSections = new ArrayList<N64LoaderWVLoader.BlockInfo>()
{
{
add(new BlockInfo(0x00000000, 0x03EFFFFF, "RDRAM Memory",".rdram"));
add(new BlockInfo(0x03F00000, 0x03FFFFFF, "RDRAM Registers",".rdreg"));
add(new BlockInfo(0x04000000, 0x040FFFFF, "SP Registers",".spreg"));
add(new BlockInfo(0x04100000, 0x041FFFFF, "DP Command Registers",".dpcreg"));
add(new BlockInfo(0x04200000, 0x042FFFFF, "DP Span Registers",".dpsreg"));
add(new BlockInfo(0x04300000, 0x043FFFFF, "MIPS Interface (MI) Registers",".mireg"));
add(new BlockInfo(0x04400000, 0x044FFFFF, "Video Interface (VI) Registers",".vireg"));
add(new BlockInfo(0x04500000, 0x045FFFFF, "Audio Interface (AI) Registers",".aireg"));
add(new BlockInfo(0x04600000, 0x046FFFFF, "Peripheral Interface (PI) Registers",".pireg"));
add(new BlockInfo(0x04700000, 0x047FFFFF, "RDRAM Interface (RI) Registers",".rireg"));
add(new BlockInfo(0x04800000, 0x048FFFFF, "Serial Interface (SI) Registers",".sireg"));
//add(new BlockInfo(0x00000000, 0x03EFFFFF, "RDRAM Memory",".rdram"));
add(new BlockInfo(0xA3F00000, 0xA3F00027, "RDRAM Registers",".rdreg"));
add(new BlockInfo(0xa4040000, 0xa404001f, "SP Registers",".spreg"));
add(new BlockInfo(0xa4080000, 0xa4080003, "SP_PC_Reg",".spcreg"));
add(new BlockInfo(0xA4100000, 0xA410001F, "DP Command Registers",".dpcreg"));
add(new BlockInfo(0xA4200000, 0xa420000F, "DP Span Registers",".dpsreg"));
add(new BlockInfo(0xa4300000, 0xa430000F, "MIPS Interface (MI) Registers",".mireg"));
add(new BlockInfo(0xa4400000, 0xa4400037, "Video Interface (VI) Registers",".vireg"));
add(new BlockInfo(0xa4500000, 0xa4500017, "Audio Interface (AI) Registers",".aireg"));
add(new BlockInfo(0xa4600000, 0xa4600034, "Peripheral Interface (PI) Registers",".pireg"));
add(new BlockInfo(0xa4700000, 0xa470001F, "RDRAM Interface (RI) Registers",".rireg"));
add(new BlockInfo(0xa4800000, 0xa480001b, "Serial Interface (SI) Registers",".sireg"));
add(new BlockInfo(0x1FC00000, 0x1FC007BF, "PIF Boot ROM",".pifrom"));
add(new BlockInfo(0x1FC007C0, 0x1FC007FF, "PIF RAM",".pifram"));
add(new BlockInfo(0x80000000, 0x800003FF, "Interrupt Vector Table",".ivt"));
Expand Down Expand Up @@ -163,7 +164,7 @@ protected void load(ByteProvider provider, LoadSpec loadSpec, List<Option> optio

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

Log.info("N64 Loader: Creating segment BOOT");
MakeBlock(program, ".boot", "ROM bootloader", 0xA4000040, bapROM.getInputStream(0x40), 0xFC0, "111", null, log, monitor);
Expand Down Expand Up @@ -196,6 +197,90 @@ protected void load(ByteProvider provider, LoadSpec loadSpec, List<Option> optio
program.getSymbolTable().addExternalEntryPoint(addr);
program.getSymbolTable().createLabel(addr, "romMain", SourceType.ANALYSIS);
}
program.getSymbolTable().createLabel(MakeAddress(0xA3f00000L), "RDRAM_CONFIG", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA3f00004L), "RDRAM_DEVICE_ID", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA3f00008L), "RDRAM_DELAY", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA3f0000CL), "RDRAM_MODE", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA3f00010L), "RDRAM_REF_INTERVAL", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA3f00014L), "RDRAM_REF_ROW", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA3f00018L), "RDRAM_RAS_INTERVAL", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA3f0001CL), "RDRAM_MIN_INTERVAL", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA3f00020L), "RDRAM_ADDR_SELECT", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA3f00024L), "RDRAM_DEVICE_MANUF", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4040000L), "SP_MEM_ADDR", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4040004L), "SP_DRAM_ADDR", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4040008L), "SP_RD_LEN", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA404000CL), "SP_WR_LEN", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4040010L), "SP_STATUS", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4040014L), "SP_DMA_FULL", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4040018L), "SP_DMA_BUSY", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA404001CL), "SP_SEMAPHORE", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA408000CL), "SP_PC", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4100000L), "DCP_START", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4100004L), "DCP_END", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4100008L), "DCP_CURRENT", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA410000cL), "DCP_STATUS", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4100010L), "DCP_CLOCK", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4100014L), "DCP_BUFBUSY", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4100018L), "DCP_PIPEBUSY", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA410001cL), "DCP_START", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4300000L), "MI_INIT_MODE", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4300004L), "MI_VERSION", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4300008L), "MI_INTR", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA430000CL), "MI_INTR_MASK", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4400000L), "VI_STATUS", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4400004L), "VI_ORIGIN", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4400008L), "VI_WIDTH", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA440000CL), "VI_INTR", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4400010L), "VI_CURRENT", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4400014L), "VI_BURST", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4400018L), "VI_V_SYNC", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA440001CL), "VI_H_SYNC", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4400020L), "VI_LEAP", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4400024L), "VI_H_START", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4400028L), "VI_V_START", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA440002CL), "VI_V_BURST", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4400030L), "VI_X_SCALE", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4400034L), "VI_Y_SCALE", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4500000L), "AI_DRAM_ADDR", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4500004L), "AI_LEN", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4500008L), "AI_CONTROL", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA450000CL), "AI_STATUS", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4500010L), "AI_DACRATE", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4500014L), "AI_BITRATE", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4600000L), "PI_DRAM_ADDR", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4600004L), "PI_CART_ADDR", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4600008L), "PI_RD_LEN", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA460000CL), "PI_WR_LEN", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4600010L), "PI_STATUS", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4600014L), "PI_BSD_DOM1_LAT", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4600018L), "PI_BSD_DOM1_PWD", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA460001CL), "PI_BSD_DOM1_PGS", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4600020L), "PI_BSD_DOM1_RLS", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4600024L), "PI_BSD_DOM2_LAT", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4600028L), "PI_BSD_DOM2_PWD", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA460002CL), "PI_BSD_DOM2_PGS", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4600030L), "PI_BSD_DOM2_RLS", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4700000L), "RI_MODE", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4700004L), "RI_CONFIG", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4700008L), "RI_CURRENT_LOAD", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA470000CL), "RI_SELECT", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4700010L), "RI_REFRESH", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4700014L), "RI_LATENCY", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4700018L), "RI_RERROR", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA470001CL), "RI_WERROR", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4800000L), "SI_DRAM_ADDR", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4800004L), "SI_PIF_ADDR_RD64B_REG", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4800010L), "SI_PIF_ADDR_WR64B_REG", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0xA4800018L), "SI_STATUS", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0x80000300L), "NTSC_PAL", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0x80000304L), "CART_DD", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0x80000308L), "ROM_BASE", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0x8000030cL), "RESET", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0x80000310L), "CIC_ID", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0x80000314L), "VERSION", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0x80000318L), "RDRAM_SIZE", SourceType.ANALYSIS);
program.getSymbolTable().createLabel(MakeAddress(0x8000031cL), "NMI_BUFFER", SourceType.ANALYSIS);
}catch(Exception ex) {}

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

0 comments on commit 4613704

Please sign in to comment.