Closed buzzler closed 5 years ago
loRom 과 hiRom 구분법!
loRom 은 0x7FD7 에 1 byte 값으로 롬의 비트수가 적혀 있고 hiRom 은 0xFFD7 에 1 byte 값으로 롬의 비트 수가 적혀 있다. 저 비트 수만큼 0x400 를 왼쪽으로 시프트 시키면 롬파일 크기가 된다. 그래서 그렇게 계산된 숫자와 실제 롬의 크기가 일치하는지 확인하면 loRom과 hiRom 구분이 확실해짐.
예를들어.. 슈퍼 마리오 월드롬을 먼저 0x7FD7 에 있는 1 byte 를 가져오면 0x09 가 들어있다. 10진수로 9. 그러면 0x400 를 왼쪽으로 9칸 이동시키면.. 0x80000 이 된다. 이는 10진수로 524288. 즉 롬파일 크기가 524288 바이트 라면 슈퍼 마리오 월드의 롬 타잎은 loRom 이라는 결론.
파싱 완료!
At the end of bank 0 (the very first bank of the cartridge), 64 ($40) bytes of cartridge information are stored. These informations are crucial to the execution of the ROM saved on the cartridge, as it includes the internal name of the ROM, the interrupt vectors (addresses to machine code within the ROM in 16 bit format), version, etc. This portion of the ROM is also known as the SNES header (not to confuse with the SMC header, which we will touch very soon).
The end of the very first bank of the ROM depends on with memory map it uses. In case of LoROM, the end of the first page is at $7FFF, for HiROM the first page ends at $FFFF. So you basically have to check on both positions of the ROM if the informations fit the normal header format, that is, if they are plausible enough.
즉.. hiRom 인지 loRom 인지 먼저 판단하고 hiRom 이라면 첫 번째 뱅크의 끝이 $FFFF 이고 loRom 이라면 첫 번째 뱅크의 끝이 $7FFF 이니까.. 첫 번째 뱅크의 맨 끝에서 64바이트가 헤더 정보다! 라는 말.
다시 또 요약하면. loRom 은 0x7FC0 부터 64 bytes 를 헤더영역으로, hiRom 은 0xFFC0 부터 64 bytes 를 헤더영역으로 사용한다.
그리고! 헤더영역의 처음부터 21 bytes 가 게임 제목이다.
참조