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
|