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.
This ROM map documents the memory layout of The Final Fantasy Legend (USA version). All addresses are file offsets in hexadecimal within the 128 KiB ROM. The game uses MBC2 for bank switching, with 8 banks of 16 KiB each. CPU addresses differ when code is bank-switched (e.g., Bank 6 file offset $1A008 = CPU address $6008 when Bank 6 is active).
| Start |
End |
Size |
Description |
Notes
|
| 0000 |
00FF |
256 B |
ROM Header |
Internal name: SAGA, ROM size: 128 KiB, Cart type: MBC2+Battery, Checksum: $BE66
|
Bank 0 (0000-3FFF) - Fixed Bank
| Start |
End |
Size |
Description |
Notes
|
| 0000 |
00FF |
256 B |
ROM Header |
See ROM Header section
|
| 0100 |
014F |
80 B |
Startup Code |
Entry point, interrupt vectors
|
| 014E |
014F |
2 B |
Global Checksum |
gcb1, gcb2 (formffl)
|
| 0150 |
03FF |
688 B |
Core Code |
RST handlers, interrupt routines
|
| 0400 |
0BFF |
2 KiB |
Code / Data |
Undocumented
|
| 0E00 |
0EFF |
256 B |
Code |
Meat flavour algorithm at $00E02 (Tower Reversed)
|
| 0E16 |
0E19 |
4 B |
Flavour Offsets |
Batch offsets: 00, 07, 12, 1B (Tower Reversed)
|
| 0E7F |
0EFF |
129 B |
Code |
Far-call template (copied to WRAM $C38A)
|
| 0F00 |
3FFF |
12.5 KiB |
Code / Data |
Undocumented
|
Bank 1 (4000-7FFF) - Switchable
| Start |
End |
Size |
Description |
Notes
|
| 4000 |
7FFF |
16 KiB |
Code / Data |
Undocumented (Bank 1)
|
Bank 2 (8000-BFFF) - Switchable
| Start |
End |
Size |
Description |
Notes
|
| 8000 |
83FF |
1 KiB |
Map Tile Data |
maptilepos $4000 (formffl)
|
| 8800 |
8BFF |
1 KiB |
Graphics/Sprite Set |
gsetaddr $08820, gsetstart $08000 (formffl)
|
| 8C00 |
8FFF |
1 KiB |
Sprite Set Data |
ssetstart $08840, ssetmax $27 (formffl)
|
| 9000 |
91FF |
512 B |
NPC Pics |
npcpics $09240, piclistmax $17 (formffl)
|
| 9200 |
92FF |
256 B |
Exit Table |
exitspos $092D0, exitmax $1D9 (formffl)
|
| 9800 |
98CF |
208 B |
NPC Blocks |
npc1start-npc1end $0985E-$098CF (formffl)
|
| 98D0 |
99FF |
48 B |
Room Metadata |
roomaddr $098D0, roommax $C7 (formffl)
|
| 9A60 |
A2EF |
2.1 KiB |
Room Data |
Room data (formffl)
|
| A2F0 |
AFA4 |
3.2 KiB |
NPC Blocks 2 |
npc2start-npc2end $0A2F0-$0AFA4 (formffl)
|
| AFD3 |
B2A7 |
725 B |
Flavour Combination Table |
meattable $0AFD3 (formffl) - 25 rows × 29 bytes
|
| B2A8 |
B437 |
400 B |
Result Lists |
meatlists $0B2A8 (formffl) - 25 lists × 16 bytes
|
| B438 |
B4FF |
200 B |
Meat Levels |
spidmlpos $0B438 (formffl) - low nybbles, 0-E hex per monster
|
| B500 |
B8FF |
1 KiB |
Field Text |
ftextstart $0B500, ftextend $0B85F (formffl)
|
| B860 |
B8FF |
160 B |
Field Text Addr |
ftextaddr $0B860 (formffl)
|
| B900 |
B9C7 |
200 B |
Meat Flavours (LPIC IDs) |
lpidpos $0B900 (formffl)
|
| B9C8 |
B9FF |
56 B |
Meat Flavour Specs |
lspecpos $0B9C8 (formffl)
|
| BA00 |
BDFF |
1 KiB |
Title Tile Data |
titlepos $BA00 (formffl) - 2bpp
|
| BE00 |
BEFF |
256 B |
Sphere Tile Data |
crystalpos $BE00 (formffl) - 2bpp
|
| BF00 |
BFFF |
256 B |
Misc Tile Data |
heartpos $BF00, textpos $F100 (formffl) - trash icon, ©, etc.
|
Bank 3 (C000-FFFF) - Switchable
| Start |
End |
Size |
Description |
Notes
|
| F100 |
FD4F |
3.2 KiB |
Font Tile Data |
FontTileData (saga1dx) - 2bpp
|
| FD50 |
FFDE |
655 B |
Title Scene |
Scene_Title (saga1dx) at CPU $7D50
|
| FFDF |
FFFF |
33 B |
Code |
FUN_03_7FDF (saga1dx)
|
Bank 4 (10000-13FFF) - Switchable
| Start |
End |
Size |
Description |
Notes
|
| 10000 |
13FFF |
16 KiB |
Enemy Tile Data |
EnemyTileData (saga1dx) - 2bpp enemy character tiles
|
Bank 5 (14000-17FFF) - Switchable
| Start |
End |
Size |
Description |
Notes
|
| 14000 |
1463F |
1.6 KiB |
Character Names |
cnamepos $14000 (formffl)
|
| 14640 |
14E3F |
2 KiB |
Ability Names |
anamepos $14640 (formffl)
|
| 14E40 |
14E9F |
96 B |
DTE 1 Tile Spec |
dte1pos $14E40 (formffl)
|
| 14EA0 |
14EEF |
80 B |
DTE 2 Tile Spec |
dte2pos $14EA0 (formffl)
|
| 14EF0 |
17B2F |
10.8 KiB |
Status/Scene Text |
stextstart $14EF0, stextend $17B2F (formffl)
|
| 17B30 |
17D2D |
510 B |
Status Text Addr/Data |
stextaddr $17B30 (formffl)
|
| 17D2E |
17E0F |
226 B |
Shop Data |
shopdata $17D2E (formffl)
|
| 17E10 |
17F8F |
384 B |
Item Prices |
itemprices $17E10 (formffl)
|
| 17F90 |
17FBF |
48 B |
Guild Data |
guilddata $17F90 (formffl)
|
| 17FC0 |
17FFF |
64 B |
Status Position/Tail |
statuspos $17FC0 (formffl)
|
Bank 6 (18000-1BFFF) - Switchable
| Start |
End |
Size |
Description |
Notes
|
| 18000 |
193BE |
4.9 KiB |
Battle Code |
Scene_Battle, LoadBattleScreenGraphic (saga1dx)
|
| 193BF |
193ED |
47 B |
Mutant Effect Dispatch |
Post-battle effect loop (traced)
|
| 193EE |
193FF |
18 B |
Learn Ability Handler |
CPU $53EE (traced)
|
| 1A400 |
1A867 |
1.1 KiB |
Encounter List/Data |
enclistpos $1A400, encdatapos $1A868 (formffl)
|
| 1A868 |
1AAE7 |
640 B |
Encounter Data |
encdatapos to cdatapos (formffl)
|
| 1AAE8 |
1AB27 |
64 B |
Character/Monster Table |
cdatapos $1AAE8, charmax $C7 (200 entries, 8 bytes each)
|
| 1B1F0 |
1B253 |
100 B |
Creature Type/Moves |
crtypepos $1B1F0, movesstart $1B321 (formffl)
|
| 1B254 |
1B293 |
64 B |
HP Values |
hpvalues $1B254 (formffl) - 2 bytes per monster, 16-bit LE
|
| 1B294 |
1B2A3 |
16 B |
Silver Values |
silvvalues $1B294 (formffl)
|
| 1B2A4 |
1B6FF |
1.1 KiB |
Gold Values / Move Data |
goldvalues $1B2A4, movesend $1B6FF (formffl)
|
| 1B700 |
1BFFF |
2.3 KiB |
Ability Data |
adatapos $1B700, abilmax $FF (formffl)
|
Bank 7 (1C000-1FFFF) - Switchable
| Start |
End |
Size |
Description |
Notes
|
| 1C000 |
1C002 |
3 B |
Reset Audio |
ResetAudio (saga1dx) at CPU $4000
|
| 1C003 |
1C62E |
1.6 KiB |
Update Audio / Code |
UpdateAudio at $4003 (saga1dx)
|
| 1C62F |
1C69A |
108 B |
Music Table Addr |
musicaddr $1C62F (formffl)
|
| 1C69B |
1E86E |
6.5 KiB |
Music Data |
musicstart $1C69B, musicend $1E86F (formffl)
|
| 1EBC7 |
1EC56 |
144 B |
SFX Table Addr |
sfxaddr $1EBC7 (formffl)
|
| 1EC57 |
1EDFE |
424 B |
SFX Data |
sfxstart $1EC57, sfxend $1EDFF (formffl)
|
| 1F1AC |
1FBAF |
2.5 KiB |
Battle Screen Graphic Loader |
___LOADBATTLESCREENGRAPHIC (saga1dx) at CPU $71AC
|
| 1FC1E |
1FCAB |
142 B |
Attack Sequence Addr |
seqaddrpos $1FC00, seqsstart $1FCAC (formffl)
|
| 1FCAC |
1FFFF |
852 B |
Attack Sequences |
seqsend $1FFFF (formffl)
|
Text Routines (Bank 6, CPU addresses)
| Start |
End |
Size |
Description |
Notes
|
| CPU $6008 |
CPU $6008 |
1 B |
Text Display Routine |
File $1A008 - Copies $DE00→$C600
|
| CPU $63DE |
CPU $63DE |
1 B |
Copy Textbox to VRAM |
File $1A3DE - Copies $C600→VRAM $9900
|
| CPU $5F80 |
CPU $5F80 |
1 B |
Message-ID Path |
File $19F80 - Builds message from table using ID in E
|
Field Code Entry Points (formffl)
| Start |
End |
Size |
Description |
Notes
|
| 03739 |
03739 |
1 B |
Field Code Table Pointer 1 |
fcaddr1pos $03739
|
| 03769 |
03769 |
1 B |
Field Code Table Pointer 2 |
fcaddr2pos $03769
|
Bugfix Patches (formffl)
| Start |
End |
Size |
Description |
Notes
|
| 18A04 |
18E78 |
Various |
Combat Tweaks |
mcsawfix1/2/3, mcexplfix1/2, mcconffix1/2/3, mcstrblfix, mcsmdeffix, mcwmdeffix
|
| 18990 |
18DCC |
Various |
Ability Fixes |
mcxclypfix, mcxclyfixo/c/a, mcmhitefix, mcebarrfix, mccoiltfix, mcshshdfix, mcdrnpcfix
|
| 194CE |
190D0 |
Various |
Rate Fixes |
mcmuqrfix1/2, mcescrate, mccritrate, mcstlrate1/2, mcsanerate, mcfailrate, mcwidefail
|
| 18DE4 |
19D52 |
Various |
Ability Handlers |
mcsthtwork, mcsthtdenm, mcmrrlimit, mcpoisabil, mcstlabil, mcwrnabil1-4, mcparaabil, mcslepabil
|
Mutation Data (formffl)
| Start |
End |
Size |
Description |
Notes
|
| 1BF00 |
1BF09 |
10 B |
Mutation Frequency |
mutatefreq $1BF00 (formffl)
|
| 1BF0A |
1BF0E |
5 B |
Mutation Values |
mutatevals $1BF0A (formffl)
|
| 1BF0F |
1BF4F |
65 B |
Mutation Abilities |
mutateabil $1BF0F (formffl)
|
| 1BF50 |
1BFFF |
176 B |
Creature HP Values |
creahpvals $1BF50 (formffl)
|
| 1F4D7 |
1F4D7 |
1 B |
Fight Music |
fightmusic $1F4D7 (formffl)
|
Character Names Table
Character names stored at cnamepos $14000–$1463F (200 entries × 8 bytes). All entries verified via text extraction (2026-02-12).
| ID |
Name |
ID |
Name |
ID |
Name |
ID |
Name
|
| 00 |
FLY |
50 |
OGRE |
A0 |
KINGSWRD |
F0 |
MUTANT
|
| 01 |
DRGONFLY |
51 |
GIANT |
A1 |
MAGICIAN |
F1 |
MUTANT
|
| 02 |
HORNET |
52 |
TITAN |
A2 |
CONJURER |
F2 |
HUMAN
|
| 03 |
MOSQUITO |
53 |
SUSANO-O |
A3 |
SORCERER |
F3 |
HUMAN
|
| 04 |
CICADA |
54 |
GRIFFIN |
A4 |
WIZARD |
F4 |
MUTANT
|
| 05 |
MANTIS |
55 |
MANTCORE |
A5 |
VAMPIRE |
F5 |
MUTANT
|
| 06 |
BARRACUD |
56 |
CHIMERA |
A6 |
STEWARD |
F6 |
HUMAN
|
| 07 |
PIRANHA |
57 |
NUE |
A7 |
GUARD |
F7 |
HUMAN
|
| 08 |
SHARK |
58 |
SPHINX |
A8 |
HUNTER |
F8 |
MUTANT
|
| 09 |
GUNFISH |
59 |
KI-RIN |
A9 |
ROBOT |
F9 |
MUTANT
|
| 0A |
ELEC |
5A |
BIG |
AA |
TROOPER |
FA |
HUMAN
|
| 0B |
LEVIATHN |
5B |
GAZER |
AB |
ARMOR |
FB |
HUMAN
|
| 0C |
CACTUS |
5C |
SEEKER |
AC |
MACHINE |
FC |
MUTANT
|
| 0D |
P-FLOWER |
5D |
WATCHER |
AD |
HUMAN |
FD |
MUTANT
|
| 0E |
GARLIC |
5E |
EVIL |
AE |
HUMAN |
FE |
GEN-BU
|
| 0F |
THORN |
5F |
BEHOLDER |
AF |
MUTANT |
FF |
SEI-RYU
|
| 10 |
F-FLOWER |
60 |
SKELETON |
B0 |
MUTANT |
100 |
BYAK-KO
|
| 11 |
DARKROSE |
61 |
RED |
B1 |
HUMAN |
101 |
SU-ZAKU
|
| 12 |
CLIPPER |
62 |
DOKURO |
B2 |
HUMAN |
102 |
GEN-BU2
|
| 13 |
BEETLE |
63 |
WARRIOR |
B3 |
MUTANT |
103 |
SEI-RYU2
|
| 14 |
ANT |
64 |
BONEKING |
B4 |
MUTANT |
104 |
BYAK-KO2
|
| 15 |
ATOM |
65 |
LICH |
B5 |
HUMAN |
105 |
SU-ZAKU2
|
| 16 |
SCORPION |
66 |
SLIME |
B6 |
HUMAN |
106 |
SU-ZAKU
|
| 17 |
SCARAB |
67 |
JELLY |
B7 |
MUTANT |
107 |
ASHURA
|
| 18 |
SHRIMP |
68 |
TORORO |
B8 |
MUTANT |
108 |
CREATOR
|
| 19 |
ATOMCRAB |
69 |
GUMMY |
B9 |
HUMAN |
|
|
| 1A |
CRAB |
6A |
PUDDING |
BA |
HUMAN |
|
|
| 1B |
ICE |
6B |
HI-SLIME |
BB |
MUTANT |
|
|
| 1C |
KINGCRAB |
6C |
GARGOYLE |
BC |
MUTANT |
|
|
| 1D |
DAGON |
6D |
IMP |
BD |
GEN-BU |
|
|
| 1E |
WOLF |
6E |
DEMON |
BE |
SEI-RYU |
|
|
| 1F |
JAGUAR |
6F |
DEMOLORD |
BF |
BYAK-KO |
|
|
| 20 |
SABERCAT |
70 |
DEMOKING |
C0 |
SU-ZAKU |
|
|
| 21 |
SNOWCAT |
71 |
ATHTALOT |
C1 |
GEN-BU2 |
|
|
| 22 |
BLACKCAT |
72 |
MEDUSA |
C2 |
SEI-RYU2 |
|
|
| 23 |
FENSWOLF |
73 |
SIREN |
C3 |
BYAK-KO2 |
|
|
| 24 |
REDBULL |
74 |
LAMIA |
C4 |
SU-ZAKU2 |
|
|
| 25 |
RHINO |
75 |
NAGA |
C5 |
SU-ZAKU |
|
|
| 26 |
TRICERAS |
76 |
SCYLLA |
C6 |
ASHURA |
|
|
| 27 |
BEHEMOTH |
77 |
LILITH |
C7 |
CREATOR |
|
|
| 28 |
BAKU |
78 |
ZOMBIE |
|
|
|
|
| 29 |
GANESHA |
79 |
GHOUL |
|
|
|
|
| 2A |
CONDOR |
7A |
MOU-JYA |
|
|
|
|
| 2B |
RAVEN |
7B |
WIGHT |
|
|
|
|
| 2C |
HARPY |
7C |
GHAST |
|
|
|
|
| 2D |
TEN-GU |
7D |
REVNANT |
|
|
|
|
| 2E |
GARUDA |
7E |
O-BAKE |
|
|
|
|
| 2F |
NIKE |
7F |
PHANTOM |
|
|
|
|
| 30 |
SNAKE |
80 |
BURUBURU |
|
|
|
|
| 31 |
SERPENT |
81 |
WRAITH |
|
|
|
|
| 32 |
ANACONDA |
82 |
SPECTOR |
|
|
|
|
| 33 |
HYDRA |
83 |
GHOST |
|
|
|
|
| 34 |
KO-RUN |
84 |
WOODMAN |
|
|
|
|
| 35 |
JORGANDR |
85 |
CLAYMAN |
|
|
|
|
| 36 |
OCTOPUS |
86 |
STONEMAN |
|
|
|
|
| 37 |
CLAM |
87 |
IRONMAN |
|
|
|
|
| 38 |
AMOEBA |
88 |
FIREMAN |
|
|
|
|
| 39 |
AMMONITE |
89 |
MAZIN |
|
|
|
|
| 3A |
SQUID |
8A |
ALBATROS |
|
|
|
|
| 3B |
KRAKEN |
8B |
EAGLE |
|
|
|
|
| 3C |
WORM |
8C |
THUNDER |
|
|
|
|
| 3D |
P-WORM |
8D |
COCATRIS |
|
|
|
|
| 3E |
CRAWLER |
8E |
ROCK |
|
|
|
|
| 3F |
LAVAWORM |
8F |
PHOENIX |
|
|
|
|
| 40 |
SANDWORM |
90 |
DRAGON |
|
|
|
|
| 41 |
GIGAWORM |
91 |
DRAGON |
|
|
|
|
| 42 |
LIZARD |
92 |
DRAGON |
|
|
|
|
| 43 |
P-FROG |
93 |
DRAGON |
|
|
|
|
| 44 |
GECKO |
94 |
DRAGON |
|
|
|
|
| 45 |
DINOSAUR |
95 |
TIAMAT |
|
|
|
|
| 46 |
SALAMAND |
96 |
KARATEKA |
|
|
|
|
| 47 |
BASILISK |
97 |
PIRATE |
|
|
|
|
| 48 |
WERERAT |
98 |
WRESTLER |
|
|
|
|
| 49 |
WEREWOLF |
99 |
KELLER |
|
|
|
|
| 4A |
CATWOMAN |
9A |
GANG |
|
|
|
|
| 4B |
MINOTAUR |
9B |
ASIGARU |
|
|
|
|
| 4C |
RAKSHASA |
9C |
SAMURAI |
|
|
|
|
| 4D |
ANUBIS |
9D |
NINJA |
|
|
|
|
| 4E |
GOBLIN |
9E |
SOLDIER |
|
|
|
|
| 4F |
ONI |
9F |
MUSASI |
|
|
|
|
Ability Names Table
Ability names stored at anamepos $14640–$14E3F (256 entries × 8 bytes, 252 used). All entries verified via text extraction (2026-02-12).
| ID |
Name |
ID |
Name |
ID |
Name |
ID |
Name
|
| 00 |
POTION |
40 |
WHIP |
80 |
HONEY |
C0 |
TORNADO
|
| 01 |
XPOTION |
41 |
E-WHIP |
81 |
CURE |
C1 |
ACID
|
| 02 |
CURE |
42 |
SAW |
82 |
HEAL |
C2 |
WHIRL
|
| 03 |
ROD |
43 |
SMG |
83 |
REVIVE |
C3 |
STEAL
|
| 04 |
NEEDLE |
44 |
GRENADE |
84 |
CARE |
C4 |
TENTACL
|
| 05 |
SYMBOL |
45 |
BAZOOKA |
85 |
RAISE |
C5 |
D-BEAM
|
| 06 |
EYEDROP |
46 |
BALKAN |
86 |
TELEPOR |
C6 |
FIRE
|
| 07 |
REVIVE |
47 |
MISSILE |
87 |
HEAD |
C7 |
ICE
|
| 08 |
ELIXIR |
48 |
N-BOMB |
88 |
NOSE |
C8 |
ELEC
|
| 09 |
<3 |
49 |
LASER |
89 |
PINCER |
C9 |
FLARE
|
| 0A |
ARCANE |
4A |
HYPER |
8A |
BEAK |
CA |
STOP
|
| 0B |
DOOR |
4B |
[SHIELD]BRONZE |
8B |
PUNCH |
CB |
SLEEP
|
| 0C |
STRONG |
4C |
[SHIELD]GOLD |
8C |
BITE |
CC |
AXE
|
| 0D |
AGILITY |
4D |
[SHIELD]SILVER |
8D |
FIN |
CD |
S-SKIN
|
| 0E |
HP200 |
4E |
[SHIELD]FLAME |
8E |
BONE |
CE |
P-SKIN
|
| 0F |
HP400 |
4F |
[SHIELD]ICE |
8F |
SWORD |
CF |
P-SKIN
|
| 10 |
HP600 |
50 |
[SHIELD]DRAGON |
90 |
HARI-TE |
D0 |
BURNING
|
| 11 |
[SWORD]KING |
51 |
[SHIELD]AEZIS |
91 |
BASH |
D1 |
[43]FIRE
|
| 12 |
[AXE]KING |
52 |
[DTE2:ED]BRONZE |
92 |
SAW |
D2 |
[43]ICE
|
| 13 |
[SHIELD]KING |
53 |
[DTE2:ED]GOLD |
93 |
2PINCER |
D3 |
[43]ELEC
|
| 14 |
AIRSEED |
54 |
[DTE2:ED]SILVER |
94 |
4HEADS |
D4 |
[43]POISON
|
| 15 |
RED ORB |
55 |
[DTE2:ED]ARMY |
95 |
NAIL |
D5 |
[43]STONE
|
| 16 |
BLUEORB |
56 |
[DTE2:ED]BAND |
96 |
[DTE1:88]LEGS |
D6 |
[43]PARA
|
| 17 |
ERASE99 |
57 |
[DTE2:ED]DRAGON |
97 |
2TUSKS |
D7 |
[43]WEAPON
|
| 18 |
BLUEKEY |
58 |
[AXE]BRONZE |
98 |
4HORNS |
D8 |
[43]QUAKE
|
| 19 |
JAILKEY |
59 |
[AXE]GOLD |
99 |
2SWORDS |
D9 |
EXPLODE
|
| 1A |
WHITKEY |
5A |
[AXE]SILVER |
9A |
6ARMS |
DA |
[43]CHANGE
|
| 1B |
ROCK |
5B |
[AXE]DRAGON |
9B |
POISON |
DB |
[43]DAMAGE
|
| 1C |
LIGHT |
5C |
[AXE]SUIT |
9C |
POISON |
DC |
STONE
|
| 1D |
REPENT |
5D |
[AXE]ARTHUR |
9D |
TUSK |
DD |
[43]ICE WP
|
| 1E |
ROM |
5E |
[DTE2:EA]BRONZE |
9E |
P-FANGS |
DE |
[43]ALL
|
| 1F |
BOARD |
5F |
[DTE2:EA]GOLD |
9F |
STRICT |
DF |
[44]FIRE
|
| 20 |
HAMMER |
60 |
[DTE2:EA]SILVER |
A0 |
PETRIFY |
E0 |
[44]ELEC
|
| 21 |
[SWORD]LONG |
61 |
[DTE2:EA]GIANT |
A1 |
D-FANGS |
E1 |
[44]ICE
|
| 22 |
AXE |
62 |
[DTE2:EA]NINJA |
A2 |
SL-GAZE |
E2 |
SHELL
|
| 23 |
[SWORD]BATTLE |
63 |
[DTE2:EB]HERMES |
A3 |
SLEEP |
E3 |
SHELL
|
| 24 |
[SWORD]KATANA |
64 |
[DTE2:EB]GETA |
A4 |
BLIND |
E4 |
DRINK
|
| 25 |
[SWORD]SILVER |
65 |
[DTE2:EB] |
A5 |
FLASH |
E5 |
CHILL
|
| 26 |
[SWORD]CORAL |
66 |
[AXE]POWER |
A6 |
INK |
E6 |
POLLEN
|
| 27 |
[SWORD]OGRE |
67 |
WAND |
A7 |
HORN |
E7 |
ROCKET
|
| 28 |
[SWORD]DRAGON |
68 |
STAFF |
A8 |
GAZE |
E8 |
BEAM
|
| 29 |
[SWORD]SUN |
69 |
BOOK |
A9 |
GAZE |
E9 |
MELT
|
| 2A |
[SWORD]FLAME |
6A |
FIRE |
AA |
RIDDLE |
EA |
SPHERE
|
| 2B |
[SWORD]ICE |
6B |
ICE |
AB |
SING |
EB |
MIRROR
|
| 2C |
[SWORD]ELEC |
6C |
ELEC |
AC |
TAIL |
EC |
KINESIS
|
| 2D |
RAPIER |
6D |
FOG |
AD |
GAZE |
ED |
P-BLAST
|
| 2E |
SABER |
6E |
FLARE |
AE |
GAZE |
EE |
LEECH
|
| 2F |
L-SABER |
6F |
SLEEP |
AF |
DRAIN |
EF |
UNCURSE
|
| 30 |
CATCRAW |
70 |
STONE |
B0 |
STENCH |
F0 |
ESP
|
| 31 |
P-KNIFE |
71 |
DEATH |
B1 |
SAND |
F1 |
HYPNOS
|
| 32 |
P-SWORD |
72 |
PUNCH |
B2 |
TREMBLE |
F2 |
BARRIER
|
| 33 |
REVENGE |
73 |
KICK |
B3 |
ELECTRO |
F3 |
MIRROR
|
| 34 |
[SWORD]VAMPIC |
74 |
BUTT |
B4 |
BOTHER |
F4 |
POWER
|
| 35 |
[SWORD]DEFEND |
75 |
X-KICK |
B5 |
WEB |
F5 |
ARMOR
|
| 36 |
[SWORD]RUNE |
76 |
JUDO |
B6 |
TOUCH |
F6 |
GAZE
|
| 37 |
[SWORD]XCLBR |
77 |
KARATE |
B7 |
KISS |
F7 |
[DTE1:83]HEADS
|
| 38 |
[SWORD]GLASS |
78 |
TEMPTER |
B8 |
KICK |
F8 |
[43]PAR WP
|
| 39 |
MASMUNE |
79 |
COUNTER |
B9 |
FLAME |
F9 |
STEALTH
|
| 3A |
BOW |
7A |
ANTDOTE |
BA |
ICE |
FA |
WARNING
|
| 3B |
LONGBOW |
7B |
BELL |
BB |
THUNDER |
FB |
FORSEEN
|
| 3C |
Gr. BOW |
7C |
PAN |
BC |
GAS |
|
|
| 3D |
COLT |
7D |
SHOCKER |
BD |
ACID |
|
|
| 3E |
MUSKET |
7E |
LEFT |
BE |
SQUIRT |
|
|
| 3F |
MAGNUM |
7F |
RIGHT |
BF |
QUAKE |
|
|
Note: Some ability names contain control codes (e.g., [CTRL_FE], [DASH], [SWORD], [SHIELD], [AXE]) and DTE references (e.g., [DTE1:88], [DTE2:ED]) which are decoded during display. Numbers in brackets (e.g., [43], [44]) represent special control codes.
Notes
- All addresses are file offsets (hex) in the 128 KiB ROM
- CPU addresses differ when code is bank-switched (e.g., Bank 6 file $1A008 = CPU $6008 when Bank 6 is active)
- Character table layout: 8 bytes per record, +2..+5 = S,D,A,M (Strength, Defense, Agility, Magic)
- HP stored separately in hpvalues table at $1B254 (2 bytes per monster, 16-bit little-endian)
- Text encoding: Tile indices (space=$FF, normalbase=$8A verified, dte1base=$50, dte2base=$C0, borderbase=$F7). Character/ability names use fixed-width 8-byte entries. NORMALBASE is $8A (not $80), verified via "FLY" decoding (2026-02-12).
- DTE (Double Tile Encoding): DTE bytes expand to 2-byte sequences via lookup tables. DTE decoding is recursive (DTE result can contain another DTE byte). Character names heavily use DTE compression.
- Mutant post-battle effects: Dispatch loop at $193BF, handlers at $53EE (learn ability), $542F, $546F, $5468, $545A (gain stats), etc.
Sources
- formffl.txt (Fledermaus ROM editor)
- saga1dx disassembly (GitHub: akatsuki105/saga1dx)
- Tower Reversed dumps (https://towerreversed.neocities.org/)
- Traced execution (meat-eating message, post-battle effects)