The Final Fantasy Legend/ROM map

From Data Crystal
Jump to navigation Jump to search

Chip tiny.png The following article is a ROM map for The Final Fantasy Legend.

The following article is a ROM map for The Final Fantasy Legend. Offsets are file offsets in the 128 KiB ROM image. No external header (no copier header). MBC2 controls bank switching: bank 0 fixed at CPU 0000–3FFF, banks 1–7 switchable at CPU 4000–7FFF. All addresses and sizes in hexadecimal.

Sources: saga1dx (layout.link, rom.asm), Fledermaus formffl.txt, Tower Reversed (ffl-meat-theory.txt). Feel free to add any locations you have found that aren't on this document.

Bank 0 (00000–03FFF)

Fixed bank; interrupt vectors, header, core code.

Range Description
00000-00040 Interrupt vectors — restart and interrupt entries
00040-00100 Code — memclear8, memset8, memcpy8/16, vramcpy16, _RunOAMDMA, etc.
00100-00150 ROM header — entry point, Nintendo logo, title (SAGA), cartridge type (MBC2+Battery), ROM size, checksums
00150-001E3 Code — multiply_8_8, divide_16_16, VRAMEnable/Disable, FarCall, LoadMenuSprite, etc.
001E3-00200 Free space
00200-00224 Code — memcpy8_far, memcpy16_far, vramcpy8_far
00224-0032F Boot / free space
0032F-00E02 Code — _LoadMetasprite, _SetMetaspriteAttribute, _FarCall, VBlank, etc.
00E02-00E1A Meat flavour — algorithm and batch offsets 00, 07, 12, 1B
00E1A-0144F Code — _LoadMenuSprite, _multiply_8_8, _divide_16_16, etc.
0144F-01466 Free space
01466-02CFF Code / data — undocumented
02CFF-02D0E Code / data — 15 bytes
02D0E-03DCC Code / data — undocumented
03DCC-03DD8 Not used
03DD8-03DDE Code / data — undocumented
03DDE-03DED Free space
03DED-03FFF Code / data — FUN_14E4; rest undocumented

Bank 1 (04000–07FFF)

Range Description
04000-06000 Code / data — undocumented
06000-08000 Player tile data — 2bpp character tiles

Bank 2 (08000–0BFFF)

Monster transformation and tile data.

Range Description
08000-0AFD3 Code / data — undocumented
0AFD3-0B2A8 Flavour combination table — 25 rows × 29 bytes; (monster1 flavour, monster2 flavour) → result list ID
0B2A8-0B438 Result lists — 25 lists × 16 bytes; character IDs per list for result levels 0–F
0B438-0B500 Meat levels — 200 bytes (low nybbles); each monster's meat level (0–E hex)
0B500-0B900 Code / data — undocumented
0B900-0B9C8 Meat flavours (LPIC IDs) — derived flavour data; algorithm in Bank 0 at 0E02
0B9C8-0BA00 Code / data — undocumented
0BA00-0BE00 Title tile data — 2bpp
0BE00-0BF00 Sphere tile data — 2bpp
0BF00-0C000 Misc tile data — 2bpp trash icon, ©, etc.

Bank 3 (0C000–0FFFF)

Range Description
0C000-0F100 Code / data — undocumented
0F100-0FD51 Font tile data — 2bpp
0FD51-0FFDF Scene_Title — title scene
0FFDF-10000 FUN_03_7FDF

Bank 4 (10000–13FFF)

Range Description
10000-14000 Enemy tile data — 2bpp enemy character tiles, full bank

Bank 5 (14000–17FFF)

Contents not yet documented.

Range Description
14000-18000 Code / data — undocumented

Bank 6 (18000–1BFFF)

Battle code, encounter and character data, mutant effect dispatch.

Range Description
18000-193BF Code — Scene_Battle, LoadBattleScreenGraphic
193BF-193EE Mutant effect dispatch — post-battle effect loop; compare RNG to mutatefreq; jump table to handlers
1A400-1A868 Encounter list / data
1A868-1AAE8 Encounter data
1AAE8-1AB28 Character / monster table — 8 bytes per record; 64 bytes in this range (entry count TBD, revisit). +2..+5 = S,D,A,M; HP in hpvalues 1B254
1AB28-1B1F0 Data — gap to crtypepos; contents TBD
1B1F0-1B254 Creature type / moves
1B254-1B700 HP / gold / silver / move tables
1B700-1C000 Ability data

Bank 7 (1C000–1FFFF)

Range Description
1C000-1C003 ResetAudio
1C003-1EE00 UpdateAudio and code — rest undocumented
1EE00-1F1AC Battle screen graphic loader
1F1AC-20000 Battle screen graphic loader — main routine