Sindibad: Chitei no Daimakyuu/ROM map

From Data Crystal
Jump to navigation Jump to search

Chip tiny.png The following article is a ROM map for Sindibad: Chitei no Daimakyuu.

Bank 00

Necessarily the core startup, also the controller input, text output, the audio driver / music engine, and odd (vestigial?) bits of code for running parts of the CD system and possibly debugging hardware.

 - E000-E022: Reset handler, set up basic CPU state and memory
   mappings (I/O and RAM to traditional locations, banks 1, 2, and 7
   to $4000, $6000, and $C000, call out to set overscan color and
   video mode, jump to $01.4A02.
 - E023-E044: Transfer data from ($02) to video RAM at address in
   $04-05, with length in $06-07.  Sets the VDC state per $04-05,
   writes in the address of the VDC data register in its place, sets
   $01 to the TIA opcode, $08 to the RTS opcode, and JSRs to run the
   resulting procedure.
 - E045-E050: Transfer data from ($02) to ($04), with length in
   $06-07.  Sets $01 to the TII opcode, $08 to the RTS opcode, and
   JSRs to run the resulting procedure.
 - E051-E074: Transfer 32 ($20) bytes of data from address in YX to BG
   palette at index in A.  This is a single palette block.
 - E075-E09A: Transfer 32 ($20) bytes of data from address in YX to
   Sprite palette at index in A + 256 ($100).  This is a single
   palette block.
 - E09B-E0A7: Write data in YX to BG palette at index in A.
 - E0A8-E0B6: Write data in YX to Sprite palette at index in A + 256
   ($100).
 - E0B7-E0C5: Zero out sprite palette entry $100 (set overscan to
   black).
 - E0C6-E0E5: Set video mode using register data at $E0E6-E109.
 - E0E6-E109: Video mode register data.  CR=$0008, RCR=BXR=BYR=0,
   MWR=$0050, HSR=$0202, HDR=$041F, VPR=$0F02, VDW=$00EF, VCR=$0004,
   DCR=$0010, DVSSR=$1000.
 - E10A-E174: Read the game controllers.
   - E10A-E114: Clear Y (controller index), signal a possible
     multi-tap (or six-button pad?) to reset its counter.
   - E115-E12C: Select the D-pad bits for the current controller.
     Burn a few cycles (seems excessive here?).  Copy the current
     controller state to the previous state.  Read input from the
     controller, shift it to the high nybble, and store it as the
     current state.
   - E12D-E13F: Select the button bits (I, II, SELECT, and RUN) for
     the current controller.  Burn a few (six?) cycles.  Read input
     from the controller, mask to just the low nybble, OR the D-pad
     bits into the high nybble, invert the bits (apparently the
     controllers are active-low), and store back to the current
     controller state.
   - E140-E148: Compute which controller inputs are "newly pressed"
     since the last time they were read.
   - E149-E14D: Loop back to $e115 until all of the controllers have
     been read.
   - E14E-E16B: For each controller (from zero to four), if the
     corresponding bit of $1f is set, and the SELECT button is newly
     pressed, and the current input state is just the RUN and SELECT
     buttons being pressed, jump to $e000 (the reset entry point).
   - E16C-E173: OR together the current input state of the first three
     controllers and store the result as the input state for the first
     controller.
   - E174-E174: Return.
 - E175-E179: Five-entry powers-of-two table for indexed testing of a
   bitmask (see $e151).
 - E17A-E1BB: ??? seems to stuff controller input?
 - E1BC-E1F3: ??? seems to stuff controller input?
 - E1F4-E235: ??? seems to stuff controller input?
 - E236-E26D: ??? seems to stuff controller input?
 - E26E-E304: ??? sets X and Y scroll at the end?
 - E305-E32C: ???
   - E305-E30A: If $2c40 (??) is zero, return.
   - E30B-E313: Read VRAM $1000, push the resulting word (character
     sprite Y coordinate?) to the stack.
   - E314-E31E: Write the word read from VRAM $1000 to VRAM $1038
     (another sprite Y coordinate?)
   - E31F-E32B: Pull the word from the stack (the registers weren't
     clobbered, but better safe than sorry?) and write it to VRAM
     $103C (another sprite Y coordinate?)
   - E32C-E32C: Return.
 - E32D-E33F: ??? update party sprites for input/motion?
   - E32D-E338: If $2c0a is nonzero, copy $81-$89 to $84-$8c,
     descending.
   - E339-E33F: Set facing of first party sprite from controller ($81
     = $10), call $e4ed (to update its position ??), and fall through
     to $e340.
 - E340-E3BC: ??? party sprite ID selection ??
 - E3BD-E44D: ??? party sprite 1-3 position adjustment and upload ??
 - E44E-E4D4: ??? party sprite 1-3 motion computation ??
 - E4D5-E4EB: ??? compute screen location of party sprite ??
 - E4EC-E4EC: An (unreferenced?) RTS instruction?
 - E4ED-E4FB: ??? Set world position of first party character sprite?
 - E4FC-E517: Write a tile to the text window.
 - E518-E597: ??? $D0.W = X; $D2.W = $8D.W >> 3; $D0.W += $D2.W; $D0.W
   &= 0xff3f; $D4.W = Y; $D2.W = $8F.W >> 3; $D4.W += $D2.W; $D4.W &=
   0xff3f; $D4.W <<= 6; $D4.W += $D0.W; YX = $D4.W; ???  VRAM address
   calculation.  VRAM address of tile at screen XY given current
   scroll positions.
 - E598-E5C9: ???
 - E5CA-E74B: ??? NPC sprite evaluation ??
 - E74C-E786: ??? Update NPC sprite positions ??
 - E787-E7A5: Write $0200 to VRAM at address $C8.W, and increment
   $C8.W by four.  Appears to move a sprite to scanline 448,
   effectively off-screen?
 - E7A6-E7F3: ???
 - E7F4-E830: Read byte from YX-$8000 in the linear array of banks
   $14-$17 (script data).
 - E831-E8D0: ???
   - Takes parameter in YX, pointing to a series of 4-byte records
     terminated with an $ff.
     - First byte is split into low-six-bits and high-bit.
     - Second byte has one (and only one) of the top four bits set.
   - E831-E836: Store YX in $2f10.W.
   - E837-E843: Read byte from address stored in $2f10.W.
   - E844-E848: If the byte read was #$ff, return.
   - E849-E84F: Store a copy of the low six bits of the byte read in
     $2f12 (??).
   - E850-E856: Shift the high bit of the byte read to the low
     position, clearing all other bits, and store in $2f14 (??).
   - E857-E867: Increment $2f10.W.
   - E868-E874: Read byte from address stored in $2f10.W.
   - E875-E877: Store byte read in $2f13 (??).
   - E878-E888: Increment $2f10.W.
   - E889-E895: Read byte from address stored in $2f10.W.
   - E896-E898: Store byte read in $2f15 (??).
   - E899-E8A9: Increment $2f10.W.
   - E8AA-E8B6: Read byte from address stored in $2f10.W.
   - E8B7-E8B9: Store byte read in $2f16 (??).
   - E8BA-E8CA: Increment $2f10.W.
   - E8CB-E8CD: Call E8D1 to ??
   - E8CE-E8D0: Jump to E837.
 - E8D1-E930: ??? many exits?
   - E8D1-E8E4: Dispatch on $2f13 (??).  If it is #$10, jump to E8E5.
     If it is #$40, jump to E8F8.  If it is #$80, jump to E90B.  If it
     is #$20, jump to E91E.  Otherwise, return.
   - E8E5-E8E7: Call E931 to ??
   - E8E8-E8ED: If $2f14 (??) is nonzero, return.
   - E8EE-E8F3: Load $2f12 (??) into A and call $01.5a07 to ??
   - E8F4-E8F7: Call $01.4ab4 to ??, and return.
     - Something to do with sprites?
   - E8F8-E8FA: Call E931 to ??
   - E8FB-E900: If $2f14 (??) is nonzero, return.
   - E901-E906: Load $2f12 (??) into A and call $01.5a34 to ??
   - E907-E90A: Call $01.4ab4 to ??, and return.
     - Something to do with sprites?
   - E90B-E90D: Call E931 to ??
   - E90E-E913: If $2f14 (??) is nonzero, return.
   - E914-E919: Load $2f12 (??) into A and call $01.5a73 to ??
   - E91A-E91D: Call $01.4ab4 to ??, and return.
     - Something to do with sprites?
   - E91E-E920: Call E931 to ??
   - E921-E926: If $2f14 (??) is nonzero, return.
   - E927-E92C: Load $2f12 (??) into A and call $01.5a34 to ??
   - E92D-E930: Call $01.4ab4 to ??, and return.
     - Something to do with sprites?
 - E931-E983: ???
   - E931-E939: If $2f15.W (??) is zero, return.
   - E93A-E943: Load $2f12 (??) into A, call $01.5afc to ?? (calculate
     an in-CPU-memory SATB entry address?), store the result (from YX)
     to $00.W.
   - E944-E952: Increment $00.W by #$0004 (??).
     - If this /is/ a SATB entry, this is the tile ID.
   - E953-E962: Write the value stored in $2f15 (??) to the address
     stored in $00.W.
   - E963-E96F: Increment $00.W by one.
   - E970-E97F: Write the value stored in $2f16 (??) to the address
     stored in $00.W.
   - E980-E983: Call E5CA to ??, and return.
 - E984-E9B1: Pull return address to $0C-0D, increments it, pushes the
   incremented version back to the stack, pushes ZPage $00-$05 to the
   stack, JMPs to the return address.  Stepped loop initiator, paired
   with E9B2.  Run from $00.W to $02.W, in steps of $04.W.
 - E9B2-EA4A: Stepped loop terminator, paired with E984.
   - E9B2-E9CF: Pull return address to $0A.W, then $00.W, $02.W,
     $04.W, and $0C.W.
   - E9D0-E9D7: Save a copy of $00.W in $08.W.
   - E9D8-E9E4: Add $04.W to $00.W.
   - E9E5-E9E7: If $04.W is negative, branch to EA01.
   - E9E8-E9EF: Save a copy of $02.W in $06.W.
   - E9F0-EA00: Subtract $00.W from $06.W.  Branch to EA30 if the
     result is non-negative, EA18 otherwise.
   - EA01-EA08: Save a copy of $00.W in $06.W.
   - EA09-EA17: Subtract $02.W from $06.W.  Branch to EA30 if the
     result is non-negative, fall through to EA18 otherwise.
   - EA18-EA2F: Copy $08.W to $00.W, increment $0A.W by one, and jump
     indirect through $0A.W, returning to caller.
   - EA30-EA4A: Push $0C.W, $04.W, $02.W, and $00.W to the stack and
     jump indirect through $0C.W, returning to the caller of E984.
 - EA4B-EAB5: Compare $00.W and $02.W, using the criteria in $04.W (as
   ASCII drawn from the set '<=>' in any order with any padding),
   returning to the address in $06.W if the condition is true.  Each
   of the three call sites would be twenty-five bytes SHORTER if
   they'd been open-coded.
   - EA4B-EA53: Call EA82 if $04 is '='.
   - EA54-EA5C: Call EA91 if $04 is '<'.
   - EA5D-EA65: Call EAA0 if $04 is '>'.
   - EA66-EA6E: Call EA82 if $05 is '='.
   - EA6F-EA77: Call EA91 if $05 is '<'.
   - EA78-EA80: Call EAA0 if $05 is '>'.
   - EA81-EA81: Return.
   - EA82-EA90: Branch to EAAF if $00.W = $02.W, otherwise return.
   - EA91-EA9F: Branch to EAAF if $00.W < $02.W, otherwise return.
   - EAA0-EAAE: Branch to EAAF if $02.W < $00.W, otherwise return.
   - EAAF-EAB5: Discard four bytes from the stack (two return
     addresses) and jump indirect $06.
 - EAB6-EAE6: Text output loop head.  Run per-char output delay, read
   next script byte, dispatch for codes $f9, $fb-$ff, otherwise fall
   through.
 - EAE7-EB12: Output text character, check for next character being
   voiced or plosive mark (call ECE3), fall through.
 - EB13-EB20: Increment $40 (?), calling EBF2 if it hits the limit
   (stored in $46), then jump to the loop head at EAB6.
 - EB21-EB21: Handle $ff text escape (End Of Text), returning to
   caller.
 - EB22-EB34: Handle $fe text escape (End Of Line), calling EBF2 and
   incrementing the text input pointer, then jump to the loop head at
   EAB6.
 - EB35-EBB1: Handle $fd (Wait For Input) text escape.
   - EB35-EB3F: If $42 + 1 is NOT equal to $40, call EBF2 to issue a
     newline.
   - EB40-EB4A: Increment $40 by half of $46 - $42 (position halfway
     across the text window?).
   - EB4B-EB89: ???
   - EB8A-EBA7: ???
   - EBA8-EBAE: Loop calling E10A to read the controller until $10 is
     zero(?).
   - EBAF-EBB1: Return to the text display loop head at EAB6.
 - EBB2-EBCC: Handle $fc (CLear Window) text escape?  Call EF0A
   (redisplay window?), then copy $5d to $40, $5e to $41, increment
   the text input pointer, and jump to the loop head at EAB6.
 - EBCD-EBF1: Handle $f9 text escape?  Output spaces (total count in
   $7a), emitting newlines as required.
 - EBF2-ECE2: Output a newline to the text window.
   - EBF2-EC04: Reset $40 to the left start position (stored in $5d),
     load $41 into A and increment twice, branching to EC05 if either
     increment results in the value stored in $47.  Store the result
     back to $41 and return.
   - EC05-???: Scroll text window up?
 - ECE3-ED1E: Handle voiced/plosive marks?
   - ECE3-ECE9: Store $40, $41 (text window cursor position) and A
     (diacritic to display) on the stack.
   - ECEA-ECF7: Increase $40 (text window horizontal cursor position)
     by 1 and decrease it by the low four bits of $5c.
   - ECF8-ED06: Decrease $41 (text window vertical cursor position) by
     the high four bits of $5c.
   - ED07-ED0A: Restore A (diacritic code to display) from the stack
     and call E4FC to display it.
   - ED0B-ED10: Restore $40, $41 (text window cursor position) from
     the stack.
   - ED11-ED1E: Increment the text input pointer and return.
 - ED1F-ED21: Call EE6A to move window-area sprites offscreen, fall
   through to ED22.
 - ED22-EE6A: Display text window area and borders?
   - ED22-ED3C: Compute window right border position, bottom border
     position, and top and left text positions from the left and top
     border positions and width and height.
   - ED3D-ED49: Call E4FC to write tile $a1 to the top-left corner of
     the border.
   - ED4A-ED56: Call E4FC to write tile $a3 to the top-right corner of
     the border.
   - ED57-ED63: Call E4FC to write tile $a7 to the bottom-left corner
     of the border.
   - ED64-ED70: Call E4FC to write tile $a9 to the bottom-right corner
     of the border.
   - ED71-ED89: Call E984 to start a loop from the left window border
     plus one to the right window border minus one, with an increment
     of one per iteration.
   - ED8A-ED96: Call E4FC to write tile $a2 to the top border at a
     horizontal position found in $00.
   - ED97-ED99: Call E9B2 to continue or finish the loop.
   - ED9A-???
 - EE6A-EE96: ??? Move sprites in the window area off-screen ??
 - EE97-EF09: ??? Searches the Sprite Attribute Table for a particular
   X-Y coordinate pair and moves the sprite off-screen ??
   - EE97-EE99: Call EF3E to ??? calculate a sprite position ??
   - EE9A-EEB3: Set $C8.W to 0x1000 (the SAT base address?), map bank
     $05 to $8000-$9fff, load the byte pointed to by $A8.W and add
     four.
   - EEB4-EEBA: Save A (a loop counter) and $C8.W on the stack.
   - EEBB-EECB: Call 5DED to read a word from VRAM at $C8.W, and jump
     to EEED if it is not equal to $CE.W.
   - EECC-EED8: Increment $C8.W by one.
   - EED9-EEE9: Call 5DED to read a word from VRAM at $C8.W, and jump
     to EEED if it is not equal to $CC.W.
   - EEEA-EEEC: Call E787 to ??? move the sprite off-screen ??
   - EEED-EEF2: Restore $C8.W from the stack.
   - EEF3-EF01: Add 4 to $C8.W.
   - EF02-EF08: Restore A from the stack, decrement it, and branch to
     EEB4 if it is not zero.
   - EF09-EF09: Return.
 - EF0A-EF3D: ??? (Re)display the text window?
   - EF0A-EF0C: Call EE6A to clear sprites away from the window area.
   - EF0D-EF12: Stash $42 (window left border) and $44 (window width)
     on the stack.
   - EF13-EF1A: Add half of $44 (window width) to $42 (window left
     border).  This centers the window.
   - EF1B-EF21: Load A with half of $44 (window width) and set $44
     to 2.
   - EF23-EF2D: With A saved on the stack, call ED22 to redisplay the
     window, decrement $42 (window left border), and increment $44
     (window width) by two.
   - EF2E-EF33: Decrement A and jump back to EF23 if it is nonzero.
   - EF34-EF3D: Restore $44 (window width) and $42 (window left
     border) from the stack, call ED22 to redisplay the window, and
     return.
 - EF3E-EF80: ??? Sprite position computation ???
   - EF3E-EF5E: $CC.W = (((u16)$40) << 3) + 0x2000;
   - EF5F-EF7F: $CE.W = (((u16)$41) << 3) + 0x4000;
   - EF80-EF80: return;
 - EF81-EFFF: Padding (all $FF bytes).
 - F000-FB58: The audio driver.
   - F000-F00B: ??? looking for a zero in $3e01-3e06?
   - F00C-F017: ??? looking for a zero in $3e07-3e08?
   - F018-F01E: ???
   - F01F-F031: ???
   - F032-F039: A multiples-of-32 ($20) table?
   - F03A-F058: ?? Parameters in X, Y, and $F1 (an MPR number!), stores
     MPR base in $E4-E5, loads pointer from X bytes into bank to $E0-E1,
     loads word (another pointer?) from ($E0), Y to $E4-E5.
   - F059-F077: Same as $F03A, except uses $E2-E3 instead of $E4-E5.
   - F078-F157: ??? feels like some sort of indexed data structure
     reset, but also messes with the PSG LFO registers ??
   - F158-F162: ???
   - F163-F194: ??? Loads waveform data to one PSG channel ??
   - F195-F1A1: ??? Set PIT interval based on indexed data ??
   - F1A2-F1F6: ??? Table of PIT interval values for $f195 ??
   - F1F7-F20C: ??? Generate a TMA + RTS in $eb-$ed and call it ??
   - F20D-F223: ??? Generate a TAM + RTS in $eb-$ed and call it ??
   - F224-F236: ???
   - F237-F2CF: ??? semi-parallel code structure to $f078 ??
   - F2D0-F2DD: ???
   - F2DE-F30E: ???
   - F30F-F341: ???
   - F342-F355: ???
   - F356-F36F: ??? some sort of state reset ??
   - F370-F38D: ??? PIT configuration reset ??
   - F38E-F3B2: ??? Timer IRQ handler.
   - F3B3-F3E1: ???
   - F3E2-F3F5: ???
   - F3F6-F408: ???
   - F409-F431: ???
   - F432-F441: ??? data table used by $f409 and $f5cf ??
   - F442-F460: ???
   - F461-F469: ???
   - F46A-F48F: ???
   - F490-F539: ??? 16-bit data table used by $f46a ?? possibly a note
     frequency table (step ahead 12 entries, value roughly halves) ??
   - F53A-F557: ???
   - F558-F5CE: ???
   - F5CF-F60F: ???
   - F610-F648: ???
   - F649-F67B: ??? Set BGM track per value in $3e00 ??
   - F67C-F6A5: ???
     - Takes a parameter in X, sets bank id in $3e0d or $3e0e, returns
       value in A?
     - F67C-F684: Point $E0.W to the start of the audio data bank.
     - F685-F68F: Set $E6.W to the pointer four bytes into the audio
       data bank.
     - F690-F695: Swap X into Y to use it as an index, read a byte from
       that far past $E6, store it on the stack.  If the byte is
       nonzero, branch to $f69e.
     - F696-F69D: Load the next byte, store it into $e30d as a bank ID,
       then jump to $f6a4.
     - F69E-F6A3: Load the next byte and store it into $e30e as a bank
       ID.
     - F6A4-F6A5: Pull A back from the stack and return.
   - F6A6-F6FD: ???
   - F6FE-F713: ???
   - F714-F739: ???
   - F73A-F74E: ???
   - F74F-F77C: ???
   - F77D-F7CB: ???
   - F7CC-F819: ??? may set audio channel amplitude (poss. volume envelope?) ??
   - F81A-F85A: ???
   - F85B-F8A1: ???
   - F8A2-F8E8: ???
   - F8E9-F91A: ???
   - F91B-F931: ???
   - F932-F989: ??? may set LFO config, audio channel frequency and amplitudes ??
   - F98A-F9AE: ???
   - F9AF-F9C9: ???
   - F9CA-F9E0: Some sort of functional dispatch on A?  Valid codes
     appear to be $8x and $Fx.  Some state (index?) in X, moved to Y.
   - F9E1-FA00: Jump table for codes $80-$8F.
   - FA01-FA20: Jump table for codes $F0-$FF.
   - FA21-FA21: Handler for codes $F3-$FA, a direct return.
   - FA22-FA2C: ??? Handler for code $80.
   - FA2D-FA32: ??? Handler for code $8D.
   - FA33-FA3D: ??? Handler for code $8F.
   - FA3E-FA48: ??? Handler for code $8C.
   - FA49-FA63: ??? Handler for code $8E.
   - FA64-FA93: ??? Handler for codes $F0-$F2.
   - FA94-FABD: ??? Handler for code $FD.
   - FABE-FAD0: ??? Handler for code $FE.
   - FAD1-FAD6: ??? Handler for code $FC.
   - FAD7-FAD7: Handler for code $FB, a direct return.
   - FAD8-FAEC: ??? Handler for code $FF.
   - FAED-FAF2: ??? Handler for code $81.
   - FAF3-FAF8: ??? Handler for code $82.
   - FAF9-FAFE: ??? Handler for code $83.
   - FAFF-FB04: ??? Handler for code $84.
   - FB05-FB0A: ??? Handler for code $85.
   - FB0B-FB10: ??? Handler for code $86.
   - FB11-FB16: ??? Handler for code $87.
   - FB17-FB1C: ??? Handler for code $88.
   - FB1D-FB22: ??? Handler for code $89.
   - FB23-FB28: ??? Handler for code $8A.
   - FB29-FB2E: ??? Handler for code $8B.
   - FB2F-FB58: ???
 - FB59-FFF5: Appears to be entirely junk with only internal
   references, probably leftover buffer contents from the development
   tools used when making the game, possibly a chunk of the BIOS for a
   tethered debugging environment for the CD system.
   - FB59-FB5A: ??? unreferenced FF 1C ???
   - FB5B-FB6F: ??? Accesses hardware at $1C02/$1C03 (unknown hardware)
   - FB70-FB70: ??? unreferenced CSL instruction ???
   - FB71-FB92: ??? Accesses hardware at $1C00/$1C02/$1C03 (unknown hardware)
   - FB93-FBB3: ??? Accesses hardware at $1C01/$1C02/$1C03 (unknown hardware)
   - FBB4-FBC1: Maps bank $F7 (savegame RAM?) to $8000-$9fff, transfers
     three bytes from $FBCC-FBCE to $1807 (unlock sequence?) at low
     speed.
   - FBC2-FBCB: Loads from $1803 (?), maps bank stored in $2E to
     $8000-$9fff, all at low speed. ???
   - FBCC-FBCE: Save RAM unlock data?
   - FBCF-FBF8: ??? CD system ADPCM logic ???
   - FBF9-FC0F: ??? CD system ADPCM logic ???
   - FC10-FC1F: ???
   - FC20-FC2A: ??? More CD system access ???
   - FC2B-FFDF: Padding (all $FF bytes).
   - FFE0-FFEA: Save A and MPR7 on stack, map bank $FC to $e000-ffff,
     jump to $F364 ?!?
   - FFEC-FFEF: Pop MPR7 and A from stack, return from interrupt ?!?
   - FFF0-FFF5: Padding (all $FF bytes).
 - FFF6-FFFF: Interrupt and Reset vectors.  IRQ2, IRQ1, and NMI/BRK
   are $5E6C (bank $01), TIRQ is $F38E, and RESET is $E000.

Bank 01

First and most obvious, the bankswitch thunks. More initialization logic, graphical effects, assorted utility functions.

 - 4000-41FD: Bankswitch trampolines.
 - 41FE-4203: ??? trampoline, but JMP rather than JSR?
 - 4204-422B: Bankswitch trampolines.
 - 422C-423C: ??? Odd trampoline with extras?
 - 423D-424E: ??? Odd trampoline with extras?
 - 424F-4258: Bankswitch trampoline.
 - 4259-4268: ??? Odd trampoline with extras?
 - 4269-4448: Bankswitch trampolines.
 - 4449-444F: Map bank $41 to $6000-$7fff, and JMP to $77E6.  Not a
   normal trampoline, does not push the outgoing bank ID.
 - 4450-446D: Bankswitch trampolines.
 - 446E-4477: Stash A to $20 and P to $21, load #$02 as incoming bank
   number (in A), jump to $44D2.
 - 4478-4481: Same as $446E, but incoming bank #$03.
 - 4482-448B: Same as $446E, but incoming bank #$04.
 - 448C-4495: Same as $446E, but incoming bank #$13.
 - 4496-449F: Same as $446E, but incoming bank #$08.
 - 44A0-44A9: Same as $446E, but incoming bank #$12.
 - 44AA-44B3: Same as $446E, but incoming bank #$41.
 - 44B4-44BD: Same as $446E, but incoming bank #$43.
 - 44BE-44C7: Same as $446E, but incoming bank #$45.
 - 44C8-44D1: Same as $446E, but incoming bank #$47.
 - 44D2-44F8: Stash incoming bank number to $2F1F, return address to
   $22-23, MPR3 ($6000-$7fff) to stack, incoming bank number (from
   $2F1F) to MPR3, increment return address, load A and P from $20 and
   $21, and jump to the return address.
 - 44F9-451D: Stash A to $20 and P to $21, return address to $22-23,
   pull next byte from the stack to MPR3 ($6000-$7fff), increment
   return address, load A and P from $20 and $21, and jump to the
   return address.
 - 451E-4551: A series of JSRs to various initialization subroutines.
 - 4552-4565: Erase all non-stack RAM in bank $f8.
 - 4566-456D: Copy $495E-$4A4D to $2200-$22FF (load initialized data
   section).  This seems to be an over-copy, as live code run from ROM
   appears 164 ($A4) bytes into the source area.
 - 456E-4582: ??? set a handful of RAM locations?
 - 4583-45A1: ??? map subsystem initialization, maybe?
   - 4583-4592: Lay in functions at $3C and $38 for loading and
     storing absolute bytes (simulating a non-indexed indirect
     addressing mode).
   - 4593-???
 - 45A2-45A8: Disable interrupts, mask non-timer IRQs.
 - 45A9-45B5: Disable interrupts, set audio driver primary data bank
   and MPR, call $f30f to initialize the audio driver.
 - 45B6-45DA: ??? set a handful of RAM locations?
 - 45DB-4603: ??? set a handful of RAM locations, zero the X and Y
   scroll?
 - 4604-463E: ??? set up variables for the text display routine and
   Sinbad's character sprite?
 - 463F-465E: Load font tileset ($2000 bytes) from bank $08 to VRAM
   $2000 (actual font only runs for $1600 bytes).
 - 465F-4666: ???
 - 4667-46E4: ??? Initial sprite and BG palette loads?
   - 4667-466A: Map bank $05 to $8000-$9fff.
   - 466B-4682: $DA.W = 0x9c00; $DC.W = 0x9e00; $C8.W = 0x0020;
   - 4683-469D: Set up iteration using E984, 0x0000 to 0x00f0 by 0x0010.
   - 469E-46D1: ???  Very linear BG and sprite palette load ??
   - 46D2-46D4: End iteration using E9B2.
   - 46D5-46E3: Zero out BG palettes $1, $2, and $7 (turn them
     entirely black).  These are the map palettes.
   - 46E4-46E4: Return.
 - 46E5-485B: ??? A lot of VRAM loads from banks $0b, $0e, and $11 ??
 - 485C-48C5: ??? VRAM SAT (sprite table) initialization ??
 - 48C6-491E: ??? Set sprite 0 position in "shadow" SATB ??
   - 48C6-48F1: Load $ad, zero-extend to 16 bits, shift left three
     bits (multiply by eight), add #$0040, store to $2300.W (a sprite
     Y coordinate?).
   - 48F2-491E: Load $ac, zero-extend to 16 bits, shift left three
     bits (multiply by eight), add #$0020, store to $2302.W (a sprite
     X coordinate?), and return.
 - 491F-494A: ??? Set initial party sprite layout ??
 - 494B-495D: ???
 - 495E-4A01: ??? A chunk of initialized data for $2200?  Possibly an
   initial/template savegame state ??
 - 4A02-4AB3: Second-stage startup and main game loop.
   - 4A02-4A1B: ??? early startup entry
   - 4A0B-4A10: Turn the display off (disable sprite and BG
     rendering).
   - 4A11-4A1B: Set the window tile BAT high byte to $02 (select
     palette 0?), branch to $4a7d if $25 (?) is non-zero (skip
     new-game intro sequence?)
   - 4A1C-4A7C: ??? contains a stretch that fades in a couple of
     palettes, displays the opening caption, and fades the palettes
     back out.
     - This is the "new game" opening sequence, which is skipped when
       resuming an old game.
   - 4A7D-4A82: Turn the display off (disable sprite and BG
     rendering).
   - 4A83-4A85: Call $4667 to reload the palettes.
   - 4A86-4A88: ??? call $4b09 ???
   - 4A89-4A90: Dispatch on map group to per-environment logic.
   - 4A91-4AA1: Map group 2 (indoor/dungeon) logic.  Set $4e.W(?) to
     #$0001, directly map bank $04 to $6000-$7fff (instead of using
     the normal trampolines), call $04.67db, then jump to $4a7d.
   - 4AA2-4AAE: Map group 1 (outdoor/town) logic.  Set $4e.W(?) to
     #$0001, call $443f->$41.73b7, then jump to $4a7d.
   - 4AAF-4AB3: Map group 0 (world) logic.  Call $440d->$08.7600, then
     jump to $4a7d.
 - 4AB4-4B08: ???
   - 4AB4-4AC0: ??? call $00.e340 or $00.e32d depending on $2c0a ??
   - 4AC1-4B04: ??? Write $2304.W to VRAM $1002, $230c.W to VRAM
     $1006, $2314.W to VRAM $100a, and $231c.W to VRAM $100e.
     - Feels like writing sprite tile IDs to the SAT?
   - 4B05-4B07: ??? Call $4b2e
   - 4B08-4B08: Return.
 - 4B09-4B2D: ??? Calls $4f4b, $4f8e, and $4ab4, ends with copying 32
   ($20) bytes from $2300 to video RAM $1000? (copy in player sprites
   at the end?)
 - 4B2E-4B6A: ???
 - 4B6B-4E1B: ??? Very repetitive logic early on, and again later,
   unrolled loops?  And in the end writing two words in VRAM?
 - 4E1C-4E54: ??? read BG tiles under character?
 - 4E55-4E8A: ??? read BG tiles near character in some direction?
 - 4E8B-4EC4: ??? read BG tiles near character in some direction?
 - 4EC5-4EFC: ??? read BG tiles near character in some direction?
 - 4EFD-4F36: ??? read BG tiles near character in some direction?
 - 4F37-4F4A: ??? reads a word from video RAM?
 - 4F4B-4F8D: ??? configure party members based on game state ??
   - 4F4B-4F50: Zero out the party member IDs.
   - 4F51-4F58: If $2220 is #$ff, return.
   - 4F59-4F5C: Set party member 1 to #$01 (Ali Baba).
   - 4F5D-4F63: If $2240 is #$ff, branch to $4f81.
   - 4F64-4F67: Set party member 2 to #$02 (Scheherazade).
   - 4F68-4F6E: If $2260 is #$ff, branch to $4f74.
   - 4F6F-4F73: Set party member 3 to #$03 (Cherubim) and return.
   - 4F74-4F7B: If $2280 is #$ff, return.
   - 4F7C-4F80: Set party member 3 to #$04 (Goku) and return.
   - 4F81-4F88: If $2260 is #$ff, return.
   - 4F89-4F8D: Set party member 2 to #$03 (Cherubim) and return.
 - 4F8E-4FE8: Set up party character 1-3 sprite IDs.
   - 4F8E-4FA5: Set party member 1-3 sprites ($93.W - $97.W) to #$00f0.
   - 4FA6-4FAA: If $a2 is zero, return.
   - 4FAB-4FB2: Set party member 1 sprite ($93.W) to #$02a0 (Ali
     Baba).
   - 4FB3-4FB7: If $a3 is zero, return.
   - 4FB8-4FCD: If $a3 is two (2), set party member 2 sprite ($95.W)
     to #$02b0 (Scheherazade), otherwise set it to #$02c0 (Cherubim).
   - 4FCE-4FD2: If $a4 is zero, return.
   - 4FD3-4FE8: If $a4 is three (3), set party member 3 sprite ($97.W)
     to #$02c0 (Cherubim) and return, otherwise set it to #$0290
     (Goku) and return.
 - 4FE9-5004: Sets loop parameters for 0-7 by 1, jumps to $501F.
   Palette fade out.
 - 5005-501E: Sets loop parameters for 7-0 by -1, falls through to
   $501F.  Palette fade in.
 - 501F-5095: ??? contains a loop from $5085-$5091, and an iteration
   construct from $5057-$5073 that calls E09B to set BG palette data.
 - 5096-50C8: ??? YX.W = *$CA.W++;
 - 50C9-5138: ???
 - 5139-514F: ???
 - 5150-5187: ??? Looks to be doing palette updates, but also uses the
   E984/E9B2 iteration construct?  Is zeroing a BG palette given in A,
   making every color black.
 - 5188-51E1: ??? Configure audio driver based on incoming map group
   and ?? (sub-area?) ?? BGM select ??  BGM select.
 - 51E2-5261: Load tileset and set BAT high byte for map set specified
   in $9F.
   - 51E2-51E9: Dispatch on $9F (zero, $01, or other) to one of three
     VRAM loads and values for $A6.
   - 51EA-5211: Set up for indoor/dungeon maps.  Load tileset from
     bank $0B to VRAM $3000, set $A6 = #$23.
   - 5212-5239: Set up for outdoor/town maps.  Load tileset from bank
     $0A to VRAM $3000, set $A6 = #$13.
   - 523A-5261: Set up for world maps.  Load tileset from bank $09 to
     VRAM $3000, set $A6 = #$73.
 - 5262-52BA: ??? some sort of sprite coordinate computation ??
   - 5262-528D: Load $77 (??), add $ac (??), zero-extend, shift left
     three bits (multiply by eight), add #$0020, and store in $73.W
     (??).
   - 528E-52BA: Load $78 (??), and $ad (??), zero-extend, shift left
     three bits (multiply by eight), add #$0040, store in $75.W (??),
     and return.
 - 52BB-537A: ??? find sprite in area ??
   - 52BB-52BE: Map bank #$05 to $8000-$9fff.
   - 52BF-52C2: Set $aa (person in area?) to #$01.
   - 52C3-52D7: Add 1 to $a8.W (??), stoting the result in $c8.W.
   - 52D8-52E7: Read the byte addressed by $a8.W (??), jumping to 5370
     if it is zero.
   - 52E8-52EE: Push A (loop counter) and $c8.W to the stack.
   - 52EF-52FD: If the byte addressed by $c8.W is not equal to $75
     (??), jump to 5352.
   - 52FE-530A: Increment $c8.W.
   - 530B-5319: If the byte addressed by $c8.W is not equal to $76
     (??), jump to 5352.
   - 531A-5326: Increment $c8.W.
   - 5327-5335: If the byte addressed by $c8.W is not equal to $73
     (??), jump to 5352.
   - 5336-5342: Increment $c8.W.
   - 5343-5351: If the byte addressed by $c8.W is equal to $74 (??),
     jump to 5375.
   - 5352-536F: Pop $c8.W from the stack, increment it by eight,
     increment $aa (person in area?) by one, pop A from the stack,
     decrement it, and jump to 52E8 if it is not zero.
   - 5370-5374: Set $aa (person in area?) to zero, and return.
   - 5375-537A: Pop three bytes off of the stack (data pointer and
     iteration counter), load $aa (person in area?) to A, and return.
 - 537B-548A: ??? lots of map-dependent processing, plus copying into
   $2500-$26ff ??  Seems to be setting up per-area (NPC) sprites ??
   - 537B-5380: If $9f (map group id) is 2 (caves/dungeons), jump to
     53B6.
   - 5381-539B: Using $00.e984, start a loop from $1010 to $1100 by
     $0004 (non-party SATB entry VRAM addresses?).
   - 539C-53B2: Copy $00.W to $d8.W... then back (??), load YX with
     #$0001, and call 5DFE to write it (YX) to VRAM (at the address in
     $00.W).
   - 53B3-53B5: Call $00.e9b2 to finish the loop started at 5381.
   - 53B6-53B9: Map bank #$05 to $8000-$9fff.
   - 53BA-53C1: If $9f (map group id) is 0 (world), jump to 53F7.  If
     it is 1 (town/oasis), jump to 53DD.
   - 53C2-53C9: Set $00.W to #$9361 ($05.9361?).
   - 53CA-53DA: Load $2fc8 (cave/dungeon id?), multiply it by two, and
     add the result to $00.W.
   - 53DB-53DC: Jump to 53FF.
   - 53DD-53E4: Set $00.W to #$9341 ($05.9341?).
   - 53E5-53F4: Load $a0 (municipality id?), multiply it by two, and
     add the result to $00.W.
   - 53F5-53F6: Jump to 53FF.
   - 53F7-53FE: Set $00.W to #$937D ($05.937d?).
   - 53FF-5427: Set $2f20.W to the pointer(?) addressed by $00.W.
   - 5428-542F: Set $a8.W (??) to #$2500.
   - 5430-544C: Copy #$200 bytes from the address in $2f20.W to $2500.
   - 544D-5469: Dispatch on $9f (map group id).  If it is $00 (world
     map), call 548B.  If it is $01 (castle/city/town/oasis maps),
     call 54AC.  If it is $02 (cave/dungeon), call $01.4395->$04.7f07.
     - In at least one case (548B, below), this appears to be
       disabling certain NPCs/sprites based on plot criteria.
   - 546A-548A: Load $a8.W into YX, increment YX by one, read byte
     from address pointed to by $a8.W into A, and return.
 - 548B-54AB: ??? under certain circumstances (game is basically won,
   or Goku is /not/ in the party?), move a particular sprite ??
   - Is this Hasan's boat on the world map?  Appears when Goku joins
     the party, disappears when the game is basically won?
   - 548B-548F: If $2c10 (??) is zero, jump to 549A.
   - 5490-5499: Set $2f31.W (??) to #$0001.
   - 549A-54A0: If $2280 (Goku's current HP) is not #$ff (not in
     party), jump to 54AB.
     - That is, if Goku is in the party, jump.
   - 54A1-54AA: Set $2f31.W (??) to #$0001.
   - 54AB-54AB: Return.
 - 54AC-56FC: ??? set various variables based on ?? ($a0) and party
   composition ??
   - Contextually, this is post-load manipulation of town-like area
     sprites based on particular area and various plot criteria.
   - 54AC-54EB: Dispatch on $a0 (town-like area id).
     - $00: jump to 54EC. (Baghdad)
     - $01: jump to 5528. (Basra)
     - $02: not checked. (Mecca)
     - $03: not checked. (Cairo)
     - $04: jump to 5548. (Buhara)
     - $05: not checked. (Byzantine port?)
     - $06: not checked. (Uganjo?)
     - $07: jump to 5558. (Persian town?)
     - $09: jump to 5574. (Bagwaji?)
     - $0a: not checked. (mountain town?)
     - $0b: not checked. (unused)
     - $0c: jump to 5585. (Baghdad Palace)
     - $0d: jump to 5619. (Byzantine Palace)
     - $0e: jump to 568B. (Oasis)
     - $0f: jump to 56CF. (Darius' Outpost)
     - default: return.
   - 54EC-5527: Fixup Baghdad sprite visibility/accessibility.
     - 54EC-54F9: If $a2 (second party member id) is not zero
       (nobody), set $2509.W (NPC sprite 2 ??) to #$0001.
     - 54FA-5508: If $2c10 (game won?) is zero, set $2f11 (NPC sprite
       3 ??) to #$0001.
     - 5509-5517: If $2c16 (Hasan left Baghdad?) is not zero, set
       $2581.W (NPC sprite 17 ??) to #$0001.
     - 5518-5526: If $2c15 (Saved the princess once?) is not zero, set
       $2551.W (NPC sprite 11 ??) to #$0001.
     - 5527-5527: Return.
   - 5528-5547: Fixup Basra sprite visibility/accessibility.
     - 5528-5537: If $a4 (fourth party member id) is not #$04 (Goku),
       set $2521.W (NPC sprite 5 ??) to #$0001.
     - 5538-5546: If $2c10 (game won?) is not zero, set $2521.W (NPC
       sprite 5 ??) to #$0001.
     - 5547-5547: Return.
   - 5548-???: ???
   - 568B-56CE: Fixup Oasis sprite visibility/accessibility.
     - 568B-569A: If $a4 (fourth party member id) is not #$04 (Goku),
       set $2501.W (NPC sprite 1 ??) to #$0001.
     - 569B-56AF: If $2c12 (Gorotsuki(?) paid off?) is zero or $a4
       (fourth party member id) is #$04 (Goku), set $2509.W (NPC
       sprite 2 ??) to #$0001.
     - 56B0-56BE: If $2c16 (Hasan left Baghdad?) is zero, set $2509.W
       (NPC sprite 2 ??) to #$0001.
     - 56BF-56CD: If $2c10 (game won?) is not zero, set $2501.W (NPC
       sprite 1 ??) to #$0001.
     - 56CE-56CE: Return.
   - 56CF-56FC: Fixup Darius' Outpost sprite visibility/accessibility.
     - 56CF-56DE: If $2c1f (??) is zero, set $2501.W (NPC sprite 1 ??)
       to #$0001.
     - 56DE-56EC: If $2c1c (defeated Incubus?) is not zero, set
       $2501.W (NPC sprite 1 ??) to #$0001.
     - 56ED-56FB: If $2c11 (used teribura egg?) is zero, set $2511.W
       (NPC sprite 3 ??) to #$0001.
     - 56FC-56FC: Return.
 - 56FD-571C: ??? load A sprites from YX to VRAM $1010 (SAT, just
   after the party sprites) ??
 - 571D-59D3: ???
   - Feels important, yet oddly open-coded.
   - Reads from bank $05, does some comparisons to fixed values (as
     qualifiers?), checks party facing in a couple of places, ends up
     possibly doing a VRAM load ??
 - 59D4-59FF: ??? calls $00.e4ed to set Sinbad's location, then stacks
   the party on top of him ??
 - 5A00-5A06: ??? Move NPC sprite record A 1px up ??
   - 5A00-5A02: Call 5AFC to load YX with the address of the NPC
     sprite record in A.
   - 5A03-5A06: Load #$01 into A, and jump to 5A0C.
 - 5A07-5A0B: ??? Move NPC sprite record A 16px up ??
   - 5A07-5A09: Call 5AFC to load YX with the address of the NPC
     sprite record in A.
   - 5A0A-5A0B: Load #$10 into A, and fall through to 5A0C.
 - 5A0C-5A2C: ???
   - 5A0C-5A0C: Push A (loop counter) to the stack.
   - 5A0D-5A0F: Call 5B59 to decrement the word addressed by YX.
   - 5A10-5A18: Decrement YX, to reverse the side-effect of 5B1B.
   - 5A19-5A1A: Push YX to the stack.
   - 5A1B-5A1D: Call $00.e5ca to ??
   - 5A1E-5A22: Load $ab (??) into A and call 5DE3 to delay for some
     amount of time.
   - 5A23-5A25: Restore YX and A from the stack.
   - 5A26-5A2B: Decrement A and jump to 5A0C if it is not zero.
   - 5A@C-5A2C: Return.
 - 5A2D-5A33: ??? Move NPC sprite record A 1px up ??
   - 5A2D-5A2F: Call 5AFC to load YX with the address of the NPC
     sprite record in A.
   - 5A30-5A33: Load #$01 into A, and jump to 5A39.
 - 5A34-5A38: ??? Move NPC sprite record A 16px up ??
   - 5A34-5A36: Call 5AFC to load YX with the address of the NPC
     sprite record in A.
   - 5A37-5A38: Load #$10 into A, and fall through to 5A39.
 - 5A39-5A59: ???
   - 5A39-5A39: Push A (loop counter) to the stack.
   - 5A3A-5A3C: Call 5B1B to increment the word addressed by YX.
   - 5A3D-5A45: Decrement YX, to reverse the side-effect of 5B1B.
   - 5A46-5A47: Push YX to the stack.
   - 5A48-5A4A: Call $00.e5ca to ??
   - 5A4B-5A4F: Load $ab (??) into A and call 5DE3 to delay for some
     amount of time.
   - 5A50-5A52: Restore YX and A from the stack.
   - 5A53-5A58: Decrement A and jump to 5A39 if it is not zero.
   - 5A59-5A59: Return.
 - 5A5A-5A72: ??? Move NPC sprite record A 1px left ??
   - 5A5A-5A5C: Call 5AFC to load YX with the address of the NPC
     sprite record in A.
   - 5A5D-5A6E: Add one to YX, twice.
   - 5A6F-5A72: Load #$01 into A, and jump to 5A8A.
 - 5A73-5A89: ??? Move NPC sprite record A 16px left ??
   - 5A73-5A75: Call 5AFC to load YX with the address of the NPC
     sprite record in A.
   - 5A76-5A87: Add one to YX, twice.
   - 5A88-5A89: Load #$10 into A, and fall through to 5A8A.
 - 5A8A-5AAA: ???
   - 5A8A-5A8A: Push A (loop counter) to the stack.
   - 5A8B-5A8D: Call 5B59 to decrement the word addressed by YX.
   - 5A8E-5A96: Decrement YX, to reverse the side-effect of 5B1B.
   - 5A97-5A98: Push YX to the stack.
   - 5A99-5A9B: Call $00.e5ca to ??
   - 5A9C-5AA0: Load $ab (??) into A and call 5DE3 to delay for some
     amount of time.
   - 5AA1-5AA3: Restore YX and A from the stack.
   - 5AA4-5AA9: Decrement A and jump to 5A8A if it is not zero.
   - 5AAA-5AAA: Return.
 - 5AAB-5AC3: ??? Move NPC sprite record A 1px right ??
   - 5AAB-5AAD: Call 5AFC to load YX with the address of the NPC
     sprite record in A.
   - 5AAE-5ABF: Add one to YX, twice.
   - 5AC0-5AC3: Load #$01 into A, and jump to 5ADB.
 - 5AC4-5ADA: ??? Move NPC sprite record A 16px right ??
   - 5AC4-5AC6: Call 5AFC to load YX with the address of the NPC
     sprite record in A.
   - 5AC7-5AD8: Add one to YX, twice.
   - 5AD9-5ADA: Load #$10 into A, and fall through to 5ADB.
 - 5ADB-5AFB: ???
   - 5ADB-5ADB: Push A (loop counter) to the stack.
   - 5ADC-5ADE: Call 5B1B to increment the word addressed by YX.
   - 5ADF-5AE7: Decrement YX, to reverse the side-effect of 5B1B.
   - 5AE8-5AE9: Push YX to the stack.
   - 5AEA-5AEC: Call $00.e5ca to ??
   - 5AED-5AF1: Load $ab (??) into A and call 5DE3 to delay for some
     amount of time.
   - 5AF2-5AF4: Restore YX and A from the stack.
   - 5AF5-5AFA: Decrement A and jump to 5ADB if it is not zero.
   - 5AFB-5AFB: Return.
 - 5AFC-5B1A: ??? returns an address in YX ??
   - Parameter in A.
   - Decrement A, zero-extend it as YX, multiply by eight, and add
     $2501 (??).
   - Possibly an in-RAM sprite table address calculation??
 - 5B1B-5B3E: Increment word pointed to by YX using code template in
   $2900-$2911.
 - 5B3F-5B46: Copy word-increment code template from $5b47-$5b58 to
   $2900-$2911.
 - 5B47-5B58: Template code to increment a word in memory by one.
 - 5B59-5B7C: Decrement word pointed to by YX using code template in
   $2912-$2923.
 - 5B7D-5B84: Copy word-decrement code template from $5b85-$5b96 to
   $2912-$2923.
 - 5B85-5B96: Template code to decrement a word in memory by one.
 - 5B97-5BAA: Open a text window (the primary dialogue window) with
   hardcoded geometry.
   - left: $01, top: $12, width: $1e, height: $0a
 - 5BAB-5BDF: ??? search for position of a given byte in an array ??
   - Takes array base in $00.W, number of elements in $02.W, and byte
     to find in A.
   - Returns with address of byte found in $00.W, number of unchecked
     elements in $02.W, byte found in A, and Z set, or with address
     just past the end of the array in $00.W, zero in $02.W, #$01 in
     A, and Z clear.
   - 5BAB-5BAC: Store A (byte to find) in $20.
   - 5BAD-5BB9: Decrement $02.W (array length).
   - 5BBA-5BC4: Read byte addressed by $00.W.
   - 5BC5-5BC9: If the byte read by 5BBA-5BC4 is equal to that in $20
     (item to find), return.
   - 5BCA-5BD6: Increment $00.W.
   - 5BD7-5BDC: If $02.W is not zero, jump to 5BAD.
   - 5BDD-5BDF: Load #$01 into A, and return.
 - 5BE0-5C52: ??? search character inventories for something ??
 - 5C53-5CBA: ??? Sprite vs. map/BG tile collision detetection ??
   - Parameters: $00.W points to length byte followed by as many tile
     IDs to detect against.  $02.W is where to return if a collision
     is found.
   - Result: A contains count of bytes left in the array of tile IDs
     (unknown if this is significant).
 - 5CBB-5D16: ??? some sort of bulk 16-bit left-rotate operation?
 - 5D17-5D72: ??? some sort of bulk 16-bit right-rotate operation?
 - 5D73-5D7B: Rotate YX left one bit.
 - 5D7C-5D84: Rotate YX right one bit.
 - 5D85-5DC9: ??? dispatches on controller input, calls routines to
   stuff controller input ??
 - 5DCA-5DD8: Wait for the start of VBlank.
 - 5DD9-5DE2: Delay loop, parameterized on A.  Calls 5DE3 per
   iteration.
 - 5DE3-5DEC: Delay loop, parameterized on A.
 - 5DED-5DFD: Read word from VRAM YX to YX.
 - 5DFE-5E12: Write word in YX to VRAM address in $00.W
 - 5E13-5E6B: ??? splice an element out of an array ??
   - Remove item in address at $00.W, moving $02.W subsequent items up
     to take its place, and filling the opened end gap with zero.
   - 5E13-5E21: Load $00.W into YX, add $02.W, and push to stack.
     - This is the address of the last element to move, and to clear
       to zero.
   - 5E22-5E36: Add one to $02.W, storing the result in $06.W.
     - Number of elements to move.  This is always one extra element,
       to avoid the case of zero elements being interpreted as 64k
       elements.
   - 5E37-5E3E: Copy $00.W to $04.W.
     - Destination address.
   - 5E3F-5E53: Add one to $00.W, storing the result in $02.W.
     - Source address.
   - 5E54-5E56: Call $00.e045 to copy $06.W bytes from $02.W to $04.W.
   - 5E57-5E6A: Pop $00.W from the stack and store #$00 to that
     address (computed by 5E13-5E21).
     - Zero-fill the newly opened space.
   - 5E6B-5E6B: Return.
 - 5E6C-5E6C: Immediate RTI (IRQ2, IRQ1, and NMI handler).
 - 5E6D-5F4A: ??? data (see $04.7334) ??
 - 5F4B-5FFF: Padding (all $FF bytes).

Bank 02

Lots of script output in this bank, drawing from sections $18 (24, post-combat messages?), $19 (25, menuing and combat messages?), $1a (26, status-window contents?), $1d (29, spell names), $1e (30, monster names), and $1f (31, item names).

 - 6000-60AE: ??? external entry ??
   - 6000-6012: Zero out a small pile of variables (??).
     - Looks to be two unknown ZPage bytes ($9a and $b2) and one byte
       for each of five party member slots (+$1c).
     - $9a is combat result, $b2 appears to be number of turns a
       monster is frozen?
   - 6013-6018: If $2c10 (game won?) is nonzero, return.
   - 6019-601D: If $99 (??) is zero, return.
   - 601E-6021: If $99 (??) is #$ff, jump to 6048.
   - 6022-6027: Call $01.4464->$12.7c93 to recompute the party level
     by experience points, and 757B to find the address of the
     appropriate random encounter table.
   - 6028-6034: If $3012 (encounter table id?) is zero and $22a4
     (party level) is greater than or equal to 10 ($0a), return.
   - 6035-6037: Call $12.72d7 to obtain a byte from the RNG.
   - 6038-6047: ??? Guard-clause on $b0 (??) and $99 (??).  Either
     returns or falls through to 6048.
   - 6048-604A: Call $04.77a3 to ??
   - 604B-6051: Set $6c (menu cursor tile id) to #$a0 (sword), and
     call 60AF to ?? (run combat toplevel?)
   - 6052-6057: Set VDC control to enable BG and disable sprites.
   - 6058-605A: Call $01.51e2 to load and configure map tileset.
   - 605B-6079: Map bank #$0e to $8000-$9fff and call $00.e023 to copy
     it in its entirety to VRAM $5000-$5fff.
   - 607A-6098: Map bank #$0d to $8000-$9fff and call $00.e023 to copy
     it in its entirety to VRAM $6000-$6fff.
   - 6099-609B: Call $12.732d to ??
   - 609C-60A4: If $9a (combat result?) is #$01, jump to 71AB
     (victory).
   - 60A5-60AB: If $9a (combat result?) is #$02, jump to 717F (total
     party wipe).
   - 60AC-60AE: Jump to 71DB.
 - 60AF-6219: ??? combat toplevel loop ??
   - 60AF-60B6: ??? Change BGM ??
   - 60B7-60CC: If $99 (??) is not #$ff (designated encounter) or $a7
     (designated encounter enemy) is not #$01 (??), ??? change BGM ??
   - 60CD-60D6: Clear $2400-$243f (current enemy data?) to #$00.
   - 60D7-60DF: Call $01.4464->$12.7c93 to recompute the party level
     by experience points (the call at 6022 is skipped for designated
     encounters), call $01.4154->$43.7000 to ?? (equipment setup?),
     and call $01.419a->$43.7713 to ?? (init magic costs/effects?)
   - 60E0-60FE: Map bank #$05 to $8000-$9fff, and copy $9141-$9340 to
     VRAM $1100-$11ff.
   - 60FF-6104: Set VRAM-SATB address to #$1100.
   - 6105-6108: Set $53 (window tileset and palette) to #$02 (text
     font, normal palette).
   - 6109-6117: Call $01.408c->$12.732d to clear the screen, call 74D9
     to bulk load ?? (blank enemy sprites, in position?) to VRAM, call
     7681 to open the party status window, call 76F9 to ?? (open
     another window? combat message window?), and call 721E to set up
     the enemy party.
   - 6118-611A: Set $3b0a (??) to zero.
   - 611B-6126: Call 75CD to ?? (window clear/erase of some sort?),
     call 7711 to ?? (open another window?), call 7817 to ??, and call
     78FA to ?? (open another window?)
   - 6127-6130: Clear $2440-$2455 to zeros.
   - 6131-6133: Set $2ff9 (??) to zero.
   - 6134-6138: If $2200 (Sinbad's current HP) is zero, jump to 614A.
   - 6139-6149: Call 6ACB to ?? (run combat menu?), saving the result
     (returned in A) to $2ff8 (??) and dispatching on it.  If it's
     #$02 (??), jump to 6127; if it's #$03 (??), jump to 6204;
     otherwise fall through to 614A.
   - 614A-6151: If $2ff8 (??) and $2220 (Ali Baba's current HP) are
     both zero, jump to 6127.
   - 6152-6156: If $2220 (Ali Baba's current HP) is zero, jump
     to 6173.
   - 6157-615D: If $2220 (Ali Baba's current HP) is #$ff (not in
     party), jump to 6204.
     - There's no opportunity to enter combat before Ali Baba joins
       the party, does he /leave/ at some point?
   - 615E-6172: Call 6AF3 to ?? (run combat menu?), saving the result
     (returned in A) to $2ff8 (??) and dispatching on it.  If it's
     #$00 (??), jump to 6127; if it's #$02 (??), jump to 614A; if it's
     #$03 (??), jump to 6204; otherwise fall through to 6173.
   - 6173-617D: If $a3 (third party member id) is zero (no third party
     member), jump to 6204; if it is #$03 (Cherubim), jump to 61A2.
   - 617E-6185: If $2ff8 (??) and $2240 (Scheherazade's current HP)
     are both zero, jump to 614A.
   - 6186-618A: If $2240 (Scheherazade's current HP) is zero, jump to
     61C4.
   - 618B-61A1: Call 6B1D to ?? (run combat menu?), saving the result
     (returned in A) to $2ff8 (??) and dispatching on it.  If it's
     #$00 (??), jump to 614A; if it is #$02 (??), jump to 6173; if it
     is #$03 (??), jump to 6204; otherwise jump to 61C4.
   - 61A2-61A9: If $2ff8 (??) and $2260 (Cherubim's current HP) are
     both zero, jump to 614A.
   - 61AA-61AE: If $2260 (Cherubim's current HP) is zero, jump to
     61C4.
   - 61AF-61C3: Call 6B47 to ?? (run combat menu?), saving the result
     (returned in A) to $2ff8 (??) and dispatching on it.  If it's
     #$00, jump to 614A; if it's #$02 (??), jump to 6173; if it's #$03
     (??), jump to 6204.
   - 61C4-61CE: If $a4 (fourth party member id) is zero, jump to 6204;
     if it is #$04 (Goku), jump to 61E8.
   - 61CF-61D6: If $2260 (Cherubim's current HP) is zero, jump
     to 6204.
   - 61D7-61E7: Call 6B47 to ?? (run combat menu?), saving the result
     (returned in A) to $2ff8 (??) and dispatching on it.  If it's
     #$00, jump to 6173; if it's #$02, jump to 61C4; otherwise jump
     to 6204.
   - 61E8-61EF: If $2280 (Goku's current HP) is zero, jump to 6204.
   - 61F0-6203: Call 6B71 to ?? (run combat menu?), saving the result
     (returned in A) to $2ff8 (??) and dispatching on it.  If it's
     #$00, jump to 6173; if it's #$02, jump to 61C4; otherwise jump to
     1. 
   - 6204-6211: Call 75CD to ?? (window clear/erase of some sort?),
     call 621A to ?? (run one round of combat?), call $01.5dd9 to
     delay for ten whatsits, and call 75CD to ?? (window clear/erase
     of some sort?).
   - 6212-6218: If $9a (combat result) is zero (in progress), jump
     to 6127.
   - 6219-6219: Return.
 - 621A-62FB: ??? run one round of combat ??
   - Conditionally displays a couple of combat(?) messages?
   - 621A-621C: Call 76F9 to ?? (open combat message window?)
   - 621D-6224: Set text cursor position.
   - 6225-6230: If $2ff9 (??) is not zero, display section 24, tag 13
     (failed to run away).
   - 6231-623F: Set $221b (??), $223b (??), $225b (??), $227b (??),
     and $229b (??) to zero (??).
     - This appears to be single-round defensive bonuses for each
       character.  Also see 628D-62CD.
   - 6240-6242: Call 62FC to determin turn order for this round.
   - 6243-6245: Set $2ffb (??) to zero.
   - 6246-6254: If $b2 (monster frozen turns counter) is not zero,
     decrement it.  If it is now zero, display section 24, tag 35
     (something about a dissolving monster being freed?).
   - 6255-626E: Load $2ffb into A, double it (convert to word index),
     load that many bytes into $2ffc.W[] (??), and dispatch on the
     result.
     - $00: jump to 62CF.
     - $01: jump to 62D4.
     - $02: jump to 62D9.
     - $03: jump to 62DE.
     - $04: jump to 62E3.
     - default: fall through to 626F.
   - 626F-6270: Load $B2 (monster frozen turns counter) into X, and
     jump to 6283 if it is not zero (monster frozen / still frozen).
   - 6273-6282: Continue dispatching on the value loaded from
     $2ffc.W[].
     - $05: jump to 62E8.
     - $06: jump to 62ED.
     - $07: jump to 62F2.
     - $08: jump to 62F7.
     - default: fall through to 6283.
   - 6283-628C: Increment $2ffb (??).  If it was #$08 before
     incrementing, jump to 6255.
   - 628D-6299: Decrement $2205 (Sinbad's DF) by the value in $221b
     (Sinbad's defensive boost), and set $221b (Sinbad's defensive
     boost) to zero.
   - 629A-62A6: Decrement $2225 (Ali Baba's DF) by the value in $223b
     (Ali Baba's defensive boost), and set $223b (Ali Baba's defensive
     boost) to zero.
   - 62A7-62B3: Decrement $2245 (Scheherazade's DF) by the value in
     $225b (Scheherazade's defensive boost), and set $225b
     (Scheherazade's defensive boost) to zero.
   - 62B4-62C0: Decrement $2265 (Cherubim's DF) by the value in $227b
     (Cherubim's defensive boost), and set $227b (Cherubim's defensive
     boost) to zero.
   - 62C1-62CD: Decrement $2285 (Goku's DF) by the value in $229b
     (Goku's defensive boost), and set $229b (Goku's defensive boost)
     to zero.
   - 62CE-62CE: Return.
   - 62CF-62D3: Call 63A2 to ??, and jump to 6283.
   - 62D4-62D8: Call 63B8 to ??, and jump to 6283.
   - 62D9-62DD: Call 63CF to ??, and jump to 6283.
   - 62DE-62E2: Call 63E6 to ??, and jump to 6283.
   - 62E3-62E7: Call 63FD to ??, and jump to 6283.
   - 62E8-62EC: Call 683C to ??, and jump to 6283.
   - 62ED-62F1: Call 6847 to ??, and jump to 6283.
   - 62F2-62F6: Call 6852 to ??, and jump to 6283.
   - 62F7-62FB: Call 685D to ??, and jump to 6283.
 - 62FC-6362: Determine turn order (in $2ffc.W[]) for one round of
   combat.
   - 62FC-6306: Set $2ffc to #$00 (Sinbad's turn?), set $2ffd to the
     value in $2206 (??).
   - 6307-6311: Set $2ffe to #$01 (Ali Baba's turn?), set $2fff to the
     value in $2226 (??).
   - 6312-631C: Set $3000 to #$02 (Scheherazade's turn?), set $3001 to
     the value in $2246 (??).
   - 631D-6327: Set $3002 to #$03 (Cherubim's turn?), set $3003 to the
     value in $2266 (??).
   - 6328-6332: Set $3004 to #$04 (Goku's turn?), set $3005 to the
     value in $2286 (??).
   - 6333-633D: Set $3006 to #$05 (first monster's turn?), set $3007
     to the value in $2406 (??).
   - 633E-6348: Set $3008 to #$06 (second monster's turn?), set $3009
     to the value in $2416 (??).
   - 6349-6353: Set $300a to #$07 (third monster's turn?), set $300b
     to the value in $2426 (??).
   - 6354-635E: Set $300c to #$08 (fourth monster's turn?), set $300d
     to the value in $2436 (??).
   - 635F-6362: Call 6363 to sort turns by ??, and return.
 - 6363-63A1: Sort $2ffc.W[9] by high bytes (??), descending?
   - 6363-6368: Set $300e (did-something flag) to zero, set X (turn
     record offset?) to zero, set A (loop counter) to #$08.
   - 6369-6369: Push A (loop counter) to the stack.
   - 636A-6371: If $2ffd[X] is >= $2fff[X], jump to 6393.
   - 6372-6376: Set $300e (did-something flag) to #$01.
   - 6377-6392: Swap $2ffc[X].W and $2ffe[X].W.
   - 6393-639B: Increment X (turn record offset?) by two, pull A (loop
     counter) from the stack, decrement A, and jump to 6369 if A is
     not zero.
   - 639C-63A1: If $300e (did-something flag) is not zero, jump to
     6363, otherwise return.
 - 63A2-63B7: ???
   - If $9a (combat result) is non-zero, $2200 (Sinbad's current HP)
     is zero, or $2ff9 (??) is non-zero, return.  Otherwise, clear A
     and call 6414 to ??.
 - 63B8-63CE: ???
   - If $9a (combat result) is non-zero, $2220 (Ali Baba's current HP)
     is zero, or $2ff9 (??) is non-zero, return.  Otherwise, set A to
     #$01 and call 6414 to ??.
 - 63CF-63E5: ???
   - If $9a (combat result) is non-zero, $2240 (Scheherazade's current
     HP) is zero, or $2ff9 (??) is non-zero, return.  Otherwise, set A to
     #$02 and call 6414 to ??.
 - 63E6-63FC: ???
   - If $9a (combat result) is non-zero, $2260 (Cherubim's current HP)
     is zero, or $2ff9 (??) is non-zero return.  Otherwise, set A to
     #$03 and call 6414 to ??.
 - 63FD-6413: ???
   - If $9a (combat result) is non-zero, $2280 (Goku's current HP) is
     zero, or $22f9 (??) is non-zero, return.  Otherwise, set A to
     #$04 and call 6414 to ??.
 - 6414-644E: ??? run one party member's combat turn, party member id
   in A ??
   - 6414-641B: Store A (acting party member id) in $3b17 (??),
     multiply it by four (?) and store it in $3b16 (??).
   - 641C-6421: Call $01.4104->7275 to ?? (compute the address of the
     acting party member record into $3b18.W?), and $01.4118->65A7 to
     ?? (copy it to $3b1c-$3b3b?)
   - 6422-6424: Set $3013 (critical strike tag id?) to zero (no
     critical strike).
   - 6425-643E: Dispatch on $2440[$3b16].
     - $00: return.
     - $01: jump to 643F.
     - $02: jump to 6443.
     - $03: jump to 6447.
     - $04: jump to 644B.
     - default: return.
   - 643F-6442: Call 644F to ?? (attack?), and return.
   - 6443-6446: Call $01.41e0->$45.72eb to ?? (cast magic?), and
     return.
   - 6447-644A: Call $01.41ea->$45.7865 to ?? (use an item?), and
     return.
   - 644B-644E: Call 64F3 to ?? (defend?), and return.
 - 644F-64F2: Player character attack handler. ??
   - 644F-6458: Load targetted monster record id from $2442[$3b16],
     decrement it by one (remove 1-based index bias?), and store in
     $3b06 (??).
   - 6459-645E: Call $01.410e->7299 to ?? (compute the address of the
     targetted monster record into $3b02.W?) and $01.4122->65C5 to ??
     (copy it to $3b3c-$3b4b?)
   - 645F-6467: If $3b3d.W (copied enemy HP??) is zero, return.
   - 6468-647D: Display attacking character's name (section 25, tag 27
     plus the character id in $3b17), followed by section 25, tag 11
     (person's attack begins?).
   - 647E-649E: Dispatch on relation (???) between $3b42 (monster ??)
     and $3b22 (character ??), to any of 649F, 64A8, 64B1, or 64BA.
   - 649F-64A7: Call $01.4078->?? to get a byte from the RNG, mask it
     down to the low two bits, and jump to 64E3 (miss) if it is zero,
     and 64BA otherwise.
   - 64A8-64AF: Call $01.4078->?? to get a byte from the RNG, mask it
     down to the low three bits, and jump to 64E3 (miss) if it is
     zero, and 64BA otherwise.
   - 64B1-64B9: Call $01.4078->?? to get a byte from the RNG, mask it
     down to the low four bits, and jump to 64E3 (miss) if it is zero,
     and 64BA otherwise.
   - 64BA-64C5: Call $01.4078->?? to get a byte from the RNG, mask it
     down to the low four bits, and set $3013 (critical strike type
     tag) to 27 (heart-meeting single strike?).
   - 64C6-64CD: ??? Play sound effect ??
   - 64CE-64D2: Set A to #$06 (??), and call $01.4172->$43.754e to ??
   - 64D3-64DB: Load $3b20 (??) into A, load $3b41 (??) into X, and
     call 6A0A to ??
   - 64DC-64E2: Call $01.412c->65E3 to ??, call $01.4136->65F4 to ??,
     and return.
   - 64E3-64EA: ??? Play sound effect ??
   - 64EB-64F2: Display section 25, tag 23 (attack misses/fails), and
     return.
 - 64F3-65A6: Player character defense handler.  Multiplies defense by
   three, to a limit of 255, and stores the difference so that it can
   be removed at the end of the combat round.
   - 64F3-6508: Display defending character's name (section 25, tag 27
     plus the character id in $3b17), followed by section 26, tag 8
     (defends their body).
   - 6509-652D: Read the byte at offset #$05 of the character record
     addressed by $3b18.W (defending character), and store to $2ff6
     (original defense strength?).
   - 652E-6537: Double the value read by 6509-652D, store the result
     to $2ff7 (defense strength increase?).  Add $2ff6 (for a total of
     multiplying by three, leaving the result in A), and jump to 656D
     if the result exceeds 255 (carry is set).
   - 6538-6544: Store the result from 652E-6537 back to offset #$05 of
     the character record addressed by $3b18.W (defending character).
   - 6545-656C: Store the value from $2ff7 (amount by which defense is
     increased?) into the byte at offset #$1b of the character record
     addressed by $3b18.W (defending character), and return.
   - 656D-657B: Store #$ff (255) to offset #$05 of the character
     record addressed by $3b18.W (defending character).
   - 657C-65A6: Store #$ff (255) minus the value stored in $2ff6 (the
     original value that was at offset #$05) to offset #$1b of the
     character record addressed by $3b18.W (defending character), and
     return.
 - 65A7-65C4: ??? external entry ??
   - Copies 32 bytes from address stored in $3b18.W to $3b1c-$3b3b.
     - This turns out to be a party character record.
 - 65C5-65E2: ??? external entry ??
   - Copies 16 bytes from address stored in $3b02.W to $3b3c-$3b4b.
     - This turns out to be a monster record.
 - 65E3-65F3: ??? external entry ??
   - Loads $3b1a.W into YX and calls $43.79f6 to ??, then displays a
     message about points of damage ??
 - 65F4-66D5: ??? external entry ??
   - 6604-???: ???
   - 6660-???: ?? displays "monster defeated" message ??
     - Also contains a bit (66AA-66C3) that looks like it could be
       checking for all monster HP being zero?
   - 66C5-???: ???
 - 66D6-66EB: Recompute party level and display "level up" message if
   it changes.
   - 66D6-66D9: Push $22a4 (party level) to the stack.
   - 66DA-66DC: Call $01.4464->$12.7c93 to recompute the party level
     from experience points.
   - 66DD-66E3: Pop the saved party level from the stack and compare
     it to the current value of $22a4 (party level).  If they are the
     same, return.
   - 66E4-66EB: Display "level increased" message, and return.
 - 66EC-674B: Add experience value of defeated monsters to party
   experience, displaying appropriate message.
   - 66EC-670A: Sum $240a, $241a, $242a, and $243a (enemy experience)
     into $240a (enemy 0 experience), capping the value at #$fa (250)
     if it ever exceeds 255.
   - 670B-6711: Display "caravan" message fragment.
     - Section 25, tag 0.
   - 6712-6718: Load $240a (enemy 0 experience) into X, clear Y, and
     call $01.41cc->$43.79f6 to ??
     - Contextually, this is "display 16-bit number in YX".
   - 6719-671F: Display "experience points gained" message fragment.
     - Section 25, tag 12.
   - 6720-6737: Using $20 (??) as a temporary variable, return if
     $22a1 (party experience) is greater than or equal to #$ea60
     (60000).
   - 6738-674B: Add $240a (enemy 0 experience) to $22a0.W (party
     experience), and return.
 - 674C-67E1: ?? displays "caravan obtained <nnn>G" ??
   - 674C-6784: Sum $2408.W, $2418.W, $2428.W, and $2438.W (enemy
     gold) into $2408.W (enemy 0 gold).
   - 6785-678B: Display "caravan" message fragment.
     - Section 25, tag 0.
   - 678C-???: ???
   - 67A4-67AE: Call $00.e4fc to display tile #$80 ("G"), then
     increment $40 (horizontal cursor position), and set $53 (window
     tile high byte) to #$02 (the normal default, clearing the palette
     to default, from yellow).
   - 67AF-67B5: Display "acquired" message.
     - Section 25, tag 19.
   - 67B6-???: ???
   - 67CB-???: ???
   - 67CE-???: ???
 - 67E2-683B: Post-combat item drop/reward handler.
   - 67E2-67E8: Call $01.5be0 to find an empty inventory slot.  If
     there aren't any, return.
   - 67E9-67F2: Copy $00.W to $300F.W (empty inventory slot pointer,
     local to this routine.).
   - 67F3-680A: Copy the first non-zero value in $240b, $241b, $242b,
     or $243b into $3011 (dropped item id, local to this routine), or
     return if they are all zero.
   - 680B-6812: Call $01.4078->?? to get a byte from the RNG.  If the
     low four bits are not zero, return.
   - 6813-6824: Store the value in $3011 (dropped item id, local to
     this routine) to the address in $300f.W (empty inventory slot
     pointer, local to this routine).
   - 6825-683B: ?? displays "caravan obtained <item>" ??
 - 683C-6846: ???
   - If $9a (combat result) is non-zero, return.  Otherwise load A
     with #$00, call 6868 to ??, and return.
 - 6847-6851: ???
   - If $9a (combat result) is non-zero, return.  Otherwise load A
     with #$01, call 6868 to ??, and return.
 - 6852-685C: ???
   - If $9a (combat result) is non-zero, return.  Otherwise load A
     with #$02, call 6868 to ??, and return.
 - 685D-6867: ???
   - If $9a (combat result) is non-zero, return.  Otherwise load A
     with #$03, call 6868 to ??, and return.
 - 6868-691E: ???
   - 687D-???: ???
   - 68A0-???: ??? calls $01.41f4->$47.7aca to... have an enemy cast
     magic?
   - 68A4-???: ?? displays "<monster> ..." ?? gets a critical hit,
     maybe?
   - 68EF-???: ???
   - 68F9-???: ???
   - 68FB-???: ???
   - 6905-???: ???
   - 6907-???: ???
   - 6911-???: ???
   - 6913-???: ???
 - 691F-6991: ??? external entry ??
   - ?? displays "<character> sustained <nn> points of damage" ??
 - 6992-69A1: ?? displays... something about a critical hit ??
 - 69A2-6A09: ?? displays "<character>が やられた" ?? (やる + あれる +
   た, past-tense passiveated やる?)
   - 69E1-???: ???
   - 69E7-???: ???
   - 69F1-???: ???
   - 69FB-???: ???
   - 6A05-???: ???
 - 6A0A-6A70: ?? displays from section 24, tag stored in $3013 ??
   (values are $1b or $1c, so 27 or 28, messages about particular
   kinds of critical strike??)
   - 6A3D-???: ???
   - 6A4B-???: ???
   - 6A60-???: ???
   - 6A6B-???: ???
 - 6A71-6ACA: ???
   - 6A7B-???: ?? some sort of VRAM initialization ??
   - 6ACA-6ACA: Return.
 - 6ACB-6AF2: ???
 - 6AF3-6B1C: ???
 - 6B1D-6B46: ???
 - 6B47-6B70: ???
 - 6B71-6B9A: ???
 - 6B9B-6CD3: ?? reads controller ??
   - 6BB5-???: ?? reads controller ??
   - 6BC6-???: ???
   - 6BE1-???: ???
   - 6BEB-???: ???
   - 6BF4-???: ???
   - 6BFA-???: ???
   - 6C00-???: ???
   - 6C06-???: ???
   - 6C0C-???: ???
   - 6C12-???: ???
   - 6C14-???: ???
   - 6C19-???: ???
   - 6C23-???: ???
   - 6C2C-???: ???
   - 6C41-???: ???
   - 6C4A-???: ???
   - 6C5F-???: ???
   - 6C68-???: ???
   - 6C80-???: ???
   - 6C89-???: ???
   - 6CA1-???: ???
   - 6CB8-???: ???
   - 6CC5-???: ???
   - 6CC8-???: ???
   - 6CD1-???: ???
 - 6CD4-6D2B: ???
   - 6CE4-???: ???
   - 6CEB-???: ???
   - 6CF7-???: ???
   - 6D0B-???: ???
   - 6D27-???: ???
   - 6D29-???: ???
 - 6D2C-6D4D: ???
   - 6D3F-???: ???
 - 6D4E-6EA0: ?? displays "magic has been sealed" message ??
   - 6D77-???: ???
   - 6D88-???: ?? reads controller, displays "magic cannot be used"
     message ??
   - 6DB6-???: ???
   - 6DB8-???: ???
   - 6DC8-???: ???
   - 6DDB-???: ???
   - 6E52-???: ???
   - 6E6F-???: ???
   - 6E79-???: ???
   - 6E88-???: ???
   - 6E92-???: ???
 - 6EA1-6F65: ???
   - 6EB2-???: ???
   - 6EE0-???: ?? reads controller, displays "not carrying items"
     message ??
   - 6EE2-???: ???
   - 6EF2-???: ???
   - 6F05-???: ???
   - 6F34-???: ???
   - 6F3E-???: ???
   - 6F4D-???: ???
   - 6F57-???: ???
 - 6F66-6F89: ???
   - 6F79-???: ???
   - 6F81-???: ???
 - 6F8A-6F94: ???
 - 6F95-6FEB: ???
   - 6FA7-???: ???
   - 6FB5-???: ???
   - 6FC3-???: ???
   - 6FD0-???: ???
   - 6FD6-???: ?? reads controller ??
 - 6FEC-7025: ???
   - 6FF2-???: ?? reads controller ??
   - 7017-???: ???
 - 7026-7162: ???
   - 7033-???: ???
   - 704E-???: ???
   - 7058-???: ?? reads controller ??
   - 7061-???: ???
   - 7067-???: ???
   - 706D-???: ???
   - 7073-???: ???
   - 7079-???: ???
   - 707F-???: ???
   - 7081-???: ???
   - 7089-???: ???
   - 7090-???: ???
   - 70AB-???: ???
   - 70B5-???: ???
   - 70BC-???: ???
   - 70C6-???: ???
   - 70CD-???: ???
   - 70E8-???: ???
   - 70F2-???: ???
   - 7115-???: ???
   - 711F-???: ???
   - 712A-???: ???
   - 7131-???: ???
   - 714F-???: ???
   - 715D-???: ???
 - 7163-716D: ???
   - Clear $3b0c-$3c03 to zero ??
 - 716E-717E: ?? reads controller ??
   - 7175-???: ?? reads controller ??
   - 717E-717E: Return.
 - 717F-71AA: ???
   - Opens a window with inline-configured geometry, displays a
     message (section 25, tag 10) ??
   - Calls $01.4269->$47.7337 to handle a total party wipe ??
 - 71AB-71DA: ???
   - 71B7-???: ?? opens a window with inline-configured geometry,
     displays a message (section 25, tag 15), post-combat victory ??
 - 71DB-71FC: ???
   - Opens a window with inline-configured geometry, displays a
     message (section 25, tag 6), something about the caravan (party)
     having dispersed (ran away) ??
 - 71FD-7201: ??? timed delay ??
 - 7202-721D: ???
   - Sets SATB address to $1000, enables sprite+BG rendering, sets map
     BGM ??
 - 721E-7274: Determine (and announce/display) enemy party.
   - 721E-7220: Call 757B to determine the appropriate random
     encounter table (the call at 6025 is skipped on designated
     encounters).
   - 7221-722A: If $99 (??) is #$ff (designated encounter), load $b3
     (??) into A and jump to 7255.
   - 722B-7239: Dispatch on $22a4 (party level).
     - < 5: jump to 7253.
     - < 10: jump to 724C.
     - < 20: jump to 7241.
     - default: fall through to 723A.
   - 723A-7240: Call $01.4078->?? to get a byte from the RNG, AND with
     #$03 to produce a result in the range 0-3, and jump to 7255.
   - 7241-724B: Call $01.4078->?? to get a byte from the RNG, AND with
     #$03 to produce a result in the range 0-3, and jump to 7241 if it
     is 3, or 7255 otherwise.
   - 724C-7252: Call $01.4078->?? to get a byte from the RNG, AND with
     #$01 to produce a result in the range 0-1, and jump to 7255.
   - 7253-7254: Load #$00 into A.
   - 7255-725B: Store A into $3b09 (??), increment A (now a loop
     counter?), and store #$00 into $3b06 (??).
   - 725C-725C: Push A (loop counter) to the stack.
   - 725D-725F: Call $01.410e->7299 to ??
   - 7260-7263: Map bank #$05 to $8000-$9fff.
   - 7264-7266: Call 72BC to ?? (populate a single enemy structure
     from the designated id or the encouter table?)
   - 7267-7269: Call $01.41d6->$43.7a09 to ??
     - Turns out, this displays the "enemy slowly ??s forward"
       message and animates the enemy graphic onto the display.
   - 726A-726C: Increment $3b06 (??) by one.
   - 726D-7273: Pull A (loop counter) from the stack, decrement it,
     and jump to 725C if it is not zero.
   - 7274-7274: Return.
 - 7275-???: ??? external entry ??
   - $3b18.W = #$2200 + ($3b17 << 5);
   - Compute character data base address in $3b18.W from id in $3b17 ??
 - 7299-???: ??? external entry ??
   - $3b02.W = #$2400 + ($3b06 << 4);
   - Compute monster data base address in $3b02.W from id in $3b06 ??
 - 72BC-7319: ???
   - 72BC-72C1: If $99 (??) is not #$ff, jump to 72CC.
   - 72C2-72CB: Set $cc.W (??) to #$20a7 (??) and jump to 72E8.
   - 72CC-72CE: Call $01.4078->$12.72d7 to ??
     - Contextually, this returns a value in A.
     - Possibly an RNG call?
   - 72CF-72D4: Mask A down to the low four bits.  If the result is
     greater than or equal to 10 ($a), jump to 72BC.
   - 72D5-72E7: Sum the value in A (now 0-9) and the value in $3b00.W
     (random encounter table pointer?)  into $cc.W (??).
   - 72E8-72F6: Load the byte addressed by $cc.W into A, decrement it,
     and call 734B to ??
     - Enemy data structure lookup into $3b07.W by id?
   - 72F7-7315: Copy #$0c (12) bytes from the address stored in
     $3b07.W to the address stored in $3b02.W.
   - 7316-7319: Call 731A to ??, and return.
 - 731A-734A: ???
   - Copying word-sized variables about within four monster data
     records??  Stash HP values from $24x1.W to $24xD.W??
 - 734B-7389: ???
   - Some sort of address calculation into $3b07.W, based on A on
     entry?
   - Multiply A by 12 ($0c) and add #$8c00?
   - Contextually, monster data address of some sort?
 - 738A-745B: ??? external entry ?? configures enemy sprite ids and
   palette ??
   - 738A-738D: Map bank #$05 to $8000-$9fff.
   - 738E-7390: Call 7491 to ?? (set $3b04.W based on current enemy?)
   - 7391-7393: Call $01.40f0->745C to set $2c42.W to the address of
     the first SATB entry to use for the current enemy.
   - 7394-7395: Set A (loop counter) to #$04.
   - 7396-7396: Push A (loop counter) to the stack.
   - 7397-73CF: Start loop using $00.e984, from the value in $2c42.W
     plus two (enemy's first SATB entry tile id slot?) to $2c42.W plus
     seventeen (semi-overshoot?) by four per iteration (always the
     tile id slot, and stops after four tiles?).
   - 73D0-73DD: Set VDC write address to loop index (SATB entry tile
     id slot), and select VDC memory write register.
   - 73DE-73ED: Read byte addressed by $3b04.W (??) and write it to
     VDC data low.
   - 73EE-73FE: Increment $3b04.W.
   - 73FF-7411: Read byte addressed by $3b04.W (??), stash a copy in
     X, mask down to the low three bits, and write to VDC data high.
     - This completes writing the sprite tile id.
   - 7412-741B: Copy X back to A, shift right by four bits, OR in #$00
     (SPBG priority of zero), and write to VDC data low (set sprite
     palette index).
   - 741C-742C: Copy X back to A again, map bit 3 as X-flip (also bit
     3), bit 2 (already part of the tile id) as Y-flip (bit 7), OR in
     #$00 (sprite horizontal and vertical size multipliers at zero),
     and write to VDP data high (various sprite attribute bits).
   - 743E-7440: Finish loop (body from 73D0-743D) using $00.e9b2.
   - 7441-7453: Increment $2c42.W by #$40 (next row(s) of sprites?).
   - 7454-745A: Pull A (loop counter) from the stack, decrement it,
     and jump to 7396 if it is not zero.
   - 745B-745B: Return.
 - 745C-2490: ??? external entry ??
   - Calculation based on $3b09 (number of enemies minus one?) and
     $3b06 (monster slot id?), producing a value in $2c42.W (SATB
     entry address, maybe?) ??
   - Yes, SATB entry.  Each enemy takes up four(?) sprites, and the
     table is arranged in vertical pairs from left to right, so that
     the enemies as a group can be centered on the screen, no matter
     if there are an even or an odd number of enemies.
 - 7491-74D8: ???
   - Some sort of address calculation into $3b04.W, based on the byte
     (monster id?)  pointed to by $3b02.W (monster data pointer?)
     (decrement by 1, multiply by #$20, add #$8000)??
 - 74D9-74EE: ?? three iterations of "map a bank to $a000-$bfff, call
   a function" ??
   - 74D9-74DF: Map bank $0f to $a000-$bfff and call 755F to copy it
     to VRAM $3xxx.
   - 74E0-74E6: Map bank $10 to $a000-$bfff and call 7543 to copy it
     to VRAM $4xxx.
   - 74E7-74ED: Map bank $11 to $a000-$bfff and call 7527 to copy it
     to VRAM $5xxx.
   - 74EE-74EE: Return.
 - 74EF-750A: ??? dead code ?? copy $a000-$bfff to VRAM $7xxx ??
 - 750B-7526: ??? dead code ?? copy $a000-$bfff to VRAM $6xxx ??
 - 7527-7542: ?? copy $a000-$bfff to VRAM $5xxx ??
 - 7543-755E: ?? copy $a000-$bfff to VRAM $4xxx ??
 - 755F-757A: ?? copy $a000-$bfff to VRAM $3xxx ??
 - 757B-75CC: ?? maps bank $05 to $8000-$9fff, checks map group, does
   lookup based on party leader position ??
   - Possibly random-encounter table lookup?
   - 757B-757E: Map bank #$05 to $8000-$9fff.
   - 757F-7584: If $9f (map group id) is #$02 (cave/dungeon), jump to
     759D.
   - 7585-758D: Load $82 (party leader X position), shift right five
     bits (so, taking the top three bits), and store to $00.
   - 758E-7596: Load $83 (party leader Y position), mask to just the
     top three bits, shift right two bits (making it bits 3-5), and
     add the value stored in $00 (which covers bits 0-2).
   - 7597-759C: Use the value just computed (quantized map coordinate)
     as an index to load A from a table at $05.90f8, then jump to
     75A2.
   - 759D-75A1: Use $a1 (??) as an index to load A from a table at
     $05.9138.
   - 75A2-75B0: Store A into $3012 (encounter table id?), then
     multiply it by 10 ($a) and store the result in $00.W.
   - 75B1-75CC: Add #$9080 to $00.W, storing the result in $3b00.W,
     and return.
 - 75CD-7626: ?? some sort of nested-loop window clear operation ??
 - 7627-7680: ?? some sort of nested-loop window clear operation ??
 - 7681-76F8: ?? some sort of open-window and nested-loop fill operation ??
   - one of the vertical-window-border tiles ??
   - This is the top-of-screen status window, and the vertical bars
     between the character sections.
 - 76F9-7710: ?? open a window with particular inline geometry ??
 - 7711-7728: ?? open a window with particular inline geometry ??
 - 7729-7816: ???
   - Window-clear to colored background (not usual blank space)?
   - Displays several script entries
     - Section 25, tag 35: "attack"
     - Section 25, tag 36: "run"
     - Section 25, tag 38: "magic"
     - Section 25, tag 39: "item"
   - 77D5-???: ?? displays several script entries ??
     - Section 25, tag 35: "attack"
     - Section 25, tag 37: "defend"
     - Section 25, tag 38: "magic"
     - Section 25, tag 39: "item"
 - 7817-782E: ???
 - 782F-7898: ???
   - 7849-???: ???
   - 784F-???: ???
   - 7855-???: ???
   - 785B-???: ???
   - 7860-???: ???
   - 7866-???: ???
   - 786C-???: ???
   - 7871-???: ???
   - 7877-???: ???
   - 787D-???: ???
   - 7882-???: ???
   - 7888-???: ???
   - 788E-???: ???
   - 7893-???: ???
 - 7899-78F9: ?? window fill, /consecutive tile IDs/, prob. character face images ??
 - 78FA-7911: ?? open a window with particular inline geometry ??
 - 7912-???: ?? window-clear to colored background (not usual blank space)?
   - 7990-???: ?? displays Sinbad's name ??
   - 799E-???: ?? displays Ali Baba's name ??
   - 79B1-???: ?? displays Scheherazade's name ??
   - 79C4-???: ?? displays Cherubim's name ??
   - 79D7-???: ?? displays Goku's name ??
   - 79EA-???: ???
 - 79F0-7A07: ?? open a window with particular inline geometry ??
 - 7A08-7A4D: ???
   - 7A19-???: ???
   - 7A2E-???: ?? display a monster name ??
   - 7A3D-???: ???
   - 7A48-???: ???
 - 7A4E-7ABC: ?? displays Sindibad's, Ali Baba's, and Scheherazade's names ??
   - 7A90-???: ?? displays Cherubim's name ??
   - 7A97-???: ?? displays Cherubim's name ??
   - 7AB0-???: ?? displays Goku's name ??
   - 7AB7-???: ???
 - 7ABD-7B34: ???
   - 7AD7-???: ?? displays spell names, left column ??
   - 7AEE-???: ???
   - 7AFE-???: ???
   - 7B08-???: ?? displays spell names, right column ??
   - 7B1F-???: ???
   - 7B2F-???: ???
 - 7B35-7BAC: ???
   - 7B4F-???: ?? displays item names, left column ??
   - 7B66-???: ???
   - 7B76-???: ???
   - 7B80-???: ?? displays item names, right column ??
   - 7B97-???: ???
   - 7BA7-???: ???
 - 7BAD-7CEA: ??? external entry ??
   - 7BB4-???: ???
   - 7BBB-???: ?? writing to VRAM $1100-$1107 (SATB) ??
   - 7C3A-???: ???
   - 7C3D-???: ?? reading and writing VRAM $1100 and $1104 (SATB) ??
   - 7C80-???: ???
   - 7C82-???: ?? reading and writing VRAM $1100 and $1104 (SATB) ??
   - 7CC5-???: ???
   - 7CCC-???: ?? writing VRAM $1102 and $1106 (SATB) ??
 - 7CEB-7FFF: Padding (all $FF bytes).

Bank 03

A lot of pointers to data blocks of various sorts, a lot of code pointers. Also appears to be the primary touchpoint for setting window geometry. At the same time, it doesn't seem to be used for the main game script (see $01.5b97) or for combat window geometry?

 - 6000-6003: ??? Set A to 2 and jump to 600A.  Weapon store entry point?
 - 6004-6007: ??? Set A to 3 and jump to 600A.  Armor store entry point?
 - 6008-6009: ??? Set A to 4 and fall through to 600A.  Item store entry point?
 - 600A-601B: ??? Store A in $2f6c, zero $2fad, call 601C to run the
   actual merchant interaction, call 75C5 to ??, set A to 3 and call
   $01.5dd9 to delay for a bit.
 - 601C-6046: ??? primary merchant interaction
   - 601C-6021: Call 76B0 to open the message window and display the
     indexed message corresponding to the shopkeeper type in $2f6c.
   - 6022-6026: Call 76CB to display indexed message #$4d, the second
     line of shopkeeper dialogue.
   - 6027-6029: Call 75E1 to display a window showing the party's
     available gold.
   - 602A-602E: Call 7574 to run indexed menu #$02.
   - 602F-6031: If the menu action was cancelled (via the II-button),
     return.
   - 6032-603A: Look up the selected menu item (0-1) in an identity
     transform table (6045-6046) and store the result in $2fa3.
   - 603B-603D: Call 7900 to ??
     - Contextually, this displays and runs the sale goods list... or
       possibly the party-member selection if you're trying to sell
       items?
   - 603E-6044: Call 76B0 to open the message window and display
     indexed message #$05 (cancelled from the goods list), then jump
     to 6027.
   - 6045-6046: Identity transform table for some reason.
     - A mapping table from selected menu entry to behavior for $7900,
       there is another one of these at 684A-684F for the primary
       non-combat menu.
 - 6047-6051: ???
 - 6052-6058: ??? data ??
   - Values for $2fa2 (see 790F) ??
 - 6059-605F: ??? data ??
   - Indexed message indices (see 7915).
   - These are messages used when selecting a party member whose
     inventory is to be shown, hence why index 0 is $ff: that's for
     buying items, which doesn't call for party member selection.
   - FF 0B 20 27 34 34 3B
 - 6060-606D: ??? code pointers ?? (see 7973-797E)
   - These appear to be by command index?
 - 606E-6074: ??? data ??
 - 6075-6082: ??? code pointers ??
 - 6083-6089: ??? data ??
 - 608A-6097: ??? code pointers ??
 - 6098-60A5: ??? code pointers ??
 - 60A6-60AC: ??? data ??
 - 60AD-60BA: ??? code pointers ??
 - 60BB-60C8: ??? code pointers ??
 - 60C9-60CF: ??? data ??
 - 60D0-60D6: ??? data ??
 - 60D7-60E4: ??? code pointers ??
 - 60E5-60E8: Item IDs for the lowest-IDd headgear, armor, shield, and
   weapon, in descending order (see $03.6ca8).
 - 60E9-60F0: Pointers to the per-party-member equipment slot tables
   immediately below, in the same order as the table at 60E5.
 - 60F1-60FA: Pointers to the equipped weapon slots for each party
   member character.
 - 60FB-6104: Pointers to the equipped shield slots for each party
   member character.
 - 6105-610E: Pointers to the equipped armor slots for each party
   member character.
 - 610F-6118: Pointers to the equipped headgear slots for each party
   member character.
 - 6119-6172: Pointers to window geometry records.
   - Not all of the windows are represented here, notably the primary
     dialogue window is set up at $01.5b97, and the combat windows are
     set up somewhere yet to be determined.
 - 6173-6230: Window geometry records.
   - Window geometry is a six-byte structure, though many of the
     records are only four bytes long implying that the last two bytes
     are either the same as the first two bytes of the following
     structure or are overridden by some later process.
   - The bytes are left-edge, top-edge, width, height, cursor
     horizontal position, and cursor vertical position, in that order.
 - 6231-6250: Pointers to fixed-content ("indexed") menus in the
   6251-62F0 region.
 - 6251-62F0: Fixed-content ("indexed") menu records.
   - Looks to be an FF-terminated list of some sort followed by three
     more bytes?
   - Script section-and-tag pairs, then element count, then ??? and
     ???
   - These are fixed-content menus.  Yes/no, sell/buy, and the like.
 - 62F1-630E: Pointers to arrays of window positions at which to
   display menu entries in the 630F-638C region ??
 - 630F-638C: ??? Data records of some sort (see 62F1) ??
   - Menu entry positions for rendering (not for cursor positioning).
 - 638D-63AA: Text cursor coordinate pairs ??
 - 63AB-645E: Menu window choice and selection cursor geometry table.
   - Five bytes per entry.
   - Window ID, vertical offset between entries, horizontal offset
     between entries, number of entries vertically, number of entries
     horizontally?
   - These offsets control the menu cursor positioning only, not the
     text cursor used to render the menu in the first place.
 - 645F-6464: Pointers to menu entry coordinate pairs in the 6465-648A
   region (see 7C8F) ??
 - 6465-648A: Arrays of menu entry coordinate pairs (see 645F and
   7C8F) ??
 - 648B-64C6: Pointers to FF-terminated shopkeeper inventory lists in
   the 64C7-6565 region ??  Feels ordered by shopkeeper type, then
   town.
 - 64C7-6645: FF-terminated shopkeeper inventory item id lists ??
 - 6566-65D5: ??? data ?? 16-bit item sale prices?
 - 65D6-6645: ??? data ?? 16-bit item resale prices?
 - 6646-664F: Pointers to character inventories in RAM.
   - Five inventories total, so one for each possible party member.
 - 6650-6659: Pointers to character ??? (spell table?) in RAM ?? (five
   total)
 - 665A-6663: Pointers to character ??? (weapon slot / equipment
   table) in RAM ?? (five total)
 - 6664-669B: ??? data ??
   - Looks to be one byte for each item, either a $00 or a $01.
   - Contextually (only one reference, from the routine at 708C, which
     itself is only referenced from the "sell an item" entry of the
     table at 6060), flags indicating than an item cannot be sold?
 - 669C-66A6: ??? data ??
   - Looks to be one byte for each of the first 11 items, a $00 if
     they aren't particularly important to the plot, a $01 if they are
     plot-relevant.  Or perhaps some other semantic applies?
   - Contextually (only one reference, from the routine at 6B82, which
     itself is only referenced from the "drop an item" entry of the
     table at 6060), flags indicating that an item cannot be dropped?
 - 66A7-66AA: Pointers to ??? in the 66AB-66CA region ??
 - 66AB-66CA: ??? Data records of some sort (see 66A7) ??
 - 66CB-66D4: ???
 - 66D5-66DA: Pointers to ??? (three, one per map group)
   - Array of X-coordinates, terminated by $ff?
 - 66DB-66E0: Pointers to ??? (three, one per map group)
   - Array of Y-coordinates, paired to those indicated by $66d5?
 - 66E1-66E6: Pointers to ??? (three, one per map group)
 - 66E7-66EC: Pointers to ??? (three, one per map group)
 - 66ED-67F4: ??? Data records of some sort (see 66D5, 66DB, 66E1) ??
 - 67F5-684F: ??? Sets up for a possible non-local exit, falls into a
   loop with an in-line function return, also sets up a reference to
   6850 as two 8-bit immediate values ?? external entry ??
   - 67F5-67FA: Store the stack pointer in $2f69, for possible
     non-local exit later.
   - 67FB-6809: ???
     - Displays the left-mid gold/level/exp/next status window ??
   - 680A-680C: Call 7343 to show the bottom-of-screen party status
     window.
   - 680D-6811: Call 7574 to run indexed menu #$04, the non-combat
     command menu.
   - 6812-681C: If the menu action was cancelled (via the II-button),
     call 75C5 to ??, call $01.5dd9 to delay for a bit, and return.
   - 681D-6824: ???
     - Clears the mid-side and bottom windows ??
   - 6825-682D: Map selected menu item to a command ID (?) via the
     table at 684A.
   - 682E-6841: If the selected command is $07 (search), set $2f9a.W
     to $6850, otherwise set it to $7900.
   - 6842-6844: Call 7A5B to ??
     - Runs the next step for the selected command?
   - 6845-6847: Call 75C5 to ??
     - Clears the character-select window?
   - 6848-6849: Jump to 680A.
   - 684A-684F: ??? Data ??  Byte-pairs that sum to nine ??  Menu-item
     to command ID remapping table ??
 - 6850-6877: ???, falls through into 6878, sets a reference to 68DF
   as two 8-bit immediate values ??
   - Starts off with indexed message #$30, making this the search
     command handler.
 - 6878-68A7: ???
 - 68A8-68C0: ??? tail-calls one of four other functions based on the
   top four bits of $81, or returns of all are clear ??
   - Reads BG tiles in direction Sinbad is facing?
 - 68C1-68DE: ??? contains a loop ??
 - 68DF-69D3: ??? some sort of interpreter / special event handler ???
   - 68DF-690A: Load $f2.W, $f4.W, $f7.W, and $f9 from several tables
     earlier in this bank based on map_group_id.
   - 690B-690B: Clear Y as loop index.
   - 690C-6915: Load byte $f2[Y], if it is not $ff then branch to
     $6916.
   - 6912-6915: Call $6878 and return.
   - 6916-6924: If the byte loaded from $f2[Y] is not equal to that in
     $2f6d (??) or the byte at $f4[Y] is not equal to that in $2f6e
     (??), increment Y and jump to $690c.
   - 6925-???
 - 69D4-6A0C: Update Sinbad's position based on his facing and copy
   the result to $2f6d/$2f6e ??
 - 6A0D-6A12: Pointers to ??? in the 6A13-6A26 region ??  map-group
   based (see $03.685f) ??
 - 6A13-6A26: ??? Data records of some sort (see 6A0D) ??
 - 6A27-6A31: ???
 - 6A32-6A38: ???
 - 6A39-6A82: ??? displays character status window (during equip
   command processing) ??
 - 6A83-6AC2: ???
 - 6AC3-6AE8: Calculate experience required to next level.
 - 6AE9-6B4A: Table of (16-bit) experience required per level.
 - 6B4B-6B81: ???
 - 6B82-6B90: ???
   - 6B82-6B89: If $2fa5 (selected item id) minus one (loaded into X)
     is greater than or equal to twelve (#$0c), jump to 6B8E.
   - 6B8A-6B8D: Load $669c[X] into A and return.
     - This will be either $00 or $01, by examination of $669c.
     - Looks to be a table indicating items important to the plot?
   - 6B8E-6B90: Load #$00 into A and return.
 - 6B91-6BB9: ???
 - 6BBA-6BC6: ???
 - 6BC7-6BEA: ??? feels like adding an item (stored in $2fa5) to the
   inventory of a character with index in $2fa6... except that there
   are five possible character indices?
   - 6BC7-6BD6: Set $f2.W to $6646.W[$2fa6], clear Y.
   - 6BD6-6BDF: Loop, looking for a zero in $f2[Y], for Y < 8.  Branch
     to 6BE3 with Y the index of the zero found.
   - 6BE0-6BE2: No zero found, return with A = 1.
   - 6BE3-6BEA: Store the value at $2fa5 in place of the zero and
     return with A = 0.
 - 6BEB-6C20: ???
 - 6C21-6C51: ??? render character spell table to script references
   for printing / menuing ??
   - 6C21-6C31: Set $f4.W to $6650.W[$2fa6], clear Y and X.
   - 6C32-6C36: Loop head.  Write $1d to $2f75[X].
   - 6C37-6C3E: If $f4[Y] is zero or $ff, branch to 6C49.
   - 6C42-6C48: Write A (the value of $f4[Y]) to $2f76[X]. Increment X
     by two, and Y by one.  If Y is less than 8, branch to 6C32 for
     the next loop iteration.
   - 6C49-6C51: Write $ff to $2f75[X], Y to $2f70, and return.
 - 6C52-6C9B: ???
   - References ($f4),Y ??
 - 6C9C-6CE5: ??? Try to equip item in $2fa5 to character in $2fa6 ??
   - Starts off with a range check on item IDs?  Boundary values are
     $31, $29, $21, and $19, from the table at $60e5.
   - Items $19 (25) through $20 (32) are weapons.
   - Items $21 (33) through $28 (40) are shields.
   - Items $29 (41) through $30 (48) are armor.
   - Items $31 (49) through $38 (56) are headgear (?)
   - 6C9C-6C9E: Call $70a4 (??)
   - 6C9F-6CA3: Prep Y to be a word index for the selected ($2fa6)
     character.
   - 6CA4-6CB2: Check selected ($2fa5) item ID against item type
     bounds in $60e5-$60e8, setting X to the index of the item type
     found, or returning if X becomes 4 (a non-equipment item).
   - 6CB3-6CC8: Set $f4.W to the X'th equipment slot table (see
     $03.60e9), then $f2.W to the selected character's equipment slot
     address (index Y already computed above at $6c9f).
   - 6CC9-6CD1: If the value (equipment slot) pointed to by $f2.W is
     non-zero, call $704c.
   - 6CD2-6CD6: Store the selected ($2fa5) item in the equipment slot
     pointed to by $f2.W.
   - 6CD7-???
 - 6CE6-6D41: ???
 - 6D42-6D54: ???
 - 6D55-6D7A: ???
 - 6D7B-6D87: ??? falls through to 6D88 ??
 - 6D88-6DA2: ??? calls a few functions, restores S from $2f69, pops
   eight bytes, and returns (to where?) ??
 - 6DA3-6DD2: ???
 - 6DD3-6DDC: ??? Data read by 6DA3 ??
 - 6DDD-6E18: ???
 - 6E19-6E1B: ???
 - 6E1C-6E1D: ??? fall through to 6E1E ??
 - 6E1E-6E4D: ???
 - 6E4E-6E4F: ??? data used by 6E1E ??
 - 6E50-6E71: ??? does a non-local exit using $2f69 ??
 - 6E72-6EB2: ??? ends up loading bank $0e to VRAM $5000-$5fff ??
 - 6EB3-6EE7: ??? sets up item-specific code behavior ??
   - This is invoked via the same menu-behavior table (at $03.60ad)
     that refers to 60B1 ("try_equip_item"), in the position for the
     "use" command.
   - 6EB3-6EBD: ??? bookkeeping ??
   - 6EBE-6EC7: If $2fa5 (selected item id) is not #$03 (Coffee), call
     6DA3 to ??
   - 6EC8-6EDC: Load $2fa5 (selected item id) to A, decrement it,
     double it, transfer it to X, and call the function pointer it
     indexes in the table at 6EE8.
 - 6EE8-6F17: ??? Item-specific behavior handler addresses, for 24 item IDs (1-24) ??
 - 6F18-6F43: ??? handler for something to do with item 03 (coffee) ??
   - Branches or falls through to 6F44.
 - 6F44-6F7B: ??? maps bank $45 and reads a table there ??
 - 6F7C-6F88: Load selected item ID ($2fa5) less one (because item IDs
   are 1-indexed), times five (because reasons?) to X.
 - 6F89-6F99: ??? does a non-local exit using $2f69 ??
 - 6F9A-6FD1: ??? maps bank $45 and reads a table there ??
 - 6FD2-6FD7: ??? Set $2c25 to one ??
 - 6FD8-6FDD: ??? Set $2f68 to one ??
 - 6FDE-6FE3: ???
 - 6FE4-6FF2: ??? does a non-local exit using $2f69 ??
 - 6FF3-6FF8: ???
 - 6FF9-6FFE: ???
 - 6FFF-6FFF: An immediate return.
 - 7000-7016: ???
 - 7017-7022: ??? falls through to 7023 ??
 - 7023-704B: ???
   - Parameters in A and Y ??
   - Creates a code fragment in RAM and jumps to it to exit ??
   - Looks to be dynamically computing an SMB[0-7] or RMB[0-7]
     instruction to execute?
 - 704C-706E: ??? Scan a given character inventory for a given item
   id, building up a bitmap of matches ??
   - Possibly something to do with the item ID substitution for
     equipment and the equipped-item display for inventory windows?
 - 706F-706F: An immediate return.
 - 7070-70A3: ??? tangled control flow, multiple entry points ??
   - 7070-7081: 16-bit compare of $2f60.W to $2f62.W, jumping to 7086
     if ?? is greater than or equal to ??, falling through to 7082
     otherwise.
     - Entry point.
     - Contextually, a go/no-go decision on purchasing an
       item.
   - 7082-7085: Load #$ff to A and jump to 7088.
   - 7086-7087: Load #$00 to A.
   - 7088-708B: Store A to $2fa7 (menu action result) and return.
   - 708C-???: ???
     - Entry point.
   - 7097-???: ???
     - Entry point
 - 70A4-70A8: ??? Set $2fa7 to zero ??
 - 70A9-7133: ???
   - Control flow here is tangled, possibly best described in terms of
     subfunctions within a single component.
   - Contextually, this is checking for /spell/ validity.  Thus, that
     the spell is valid outside of combat, that the caster has
     sufficient magic power, and that it is contextually appropriate.
     - One of the spells is only appropriate when near (facing?) a
       door.
     - One (healing) is always appropriate.
     - Most of the spells are not appropriate outside of combat.
   - 70A9-70AB: Call $43.7713 to ??
   - 70AC-70BC: Dispatch on $2fa5 (selected item/spell id).
     - If it's 10 ("ヒマーム", return), jump to 70C7.
     - If it's 1 ("エリクス", heal), fall through to 70BD.
     - If it's 2 ("ヨーナ", open), jump to 70C2.
     - For all other cases, including 0 (??), jump to 70CC.
   - 70BD-70C1: Call 70D2 to ??, and jump to 70CE.
     - This is the case for エリクス, the healing spell, so presumably
       just an MP check.
   - 70C2-70C6: Call 70FD to ??, and jump to 70CE.
     - This is the case for ヨーナ, the door-opening spell, so an MP
       check and a check for facing a door?
   - 70C7-70CB: Call 70E6 to ??, and jump to 70CE.
     - Thisis the case for ヒマーム, the return-to-last-inn spell, so
       an MP check and ??
   - 70CC-70CD: Load #$ff into A.
   - 70CE-70D1: Store A into $2fa7 (menu action result) and return.
   - 70D2-70E2: ???
     - Healing spell, just an MP check?
   - 70E3-70E5: ??? common exit fragment for 70D2, 70E6, and 70FD, load
     1 into A and return ??
   - 70E6-70FC: ??? map-dependent behavior, jumps to 7126 for
     non-world maps, otherwise does inline logic ??
     - Return-to-town/inn spell, some sort of validation logic, plus
       MP check?
   - 70FD-7125: ??? map-dependent behavior, exits to 7126, 7129, or
     712C depending on circumstances, on map1 (cities/towns/oases)
     does a BG collision check ($01.5c53) with tile ID vector $6a22.
     - Door-opening spell, so looking for doors?  Also has to do an MP
       check.
 - 7134-7138: Load X from $2fa6 (selected party member ID) and jump to
   713C to multiply it by #$20.
 - 7139-713B: Load X from $2f98 (???) and fall through to $713C to
   multiply it by #$20.
 - 713C-7148: Multiply X by #$20 and load to Y ??
 - 7149-7151: ??? conditional call of 76B0 ??
 - 7152-7185: ??? external entry ??
 - 7186-71A5: ???
 - 71A6-71DC: ??? Build shopkeeper inventory selection menu items ??
   - Starts with some index calculation, $a0 << 1, plus ($2f6c - 2) *
     #$14, indexing $648b[].W to set $f2.W.
   - Builds a word array at $2f75 alternating #$1f and data from $f2,
     which is #$ff-terminated.  Shopkeeper item list?
 - 71DD-720B: ??? Build party member selection menu items ??
   - Builds a word array at $2f75 alternating #$19 and values in the
     #$1b-$1f range, #$ff-terminated.  Party member name list?
 - 720C-7245: ??? external entry ??
   - Builds a word array at $2f75 alternating #$1f and values from a
     selected party member's inventory, then calls 7000 (to build up a
     bitmap of which items are equipped?).
 - 7246-7297: ??? external entry ??
 - 7298-72B4: ???
   - Calls 7600 to open text window #$00.
   - Falls through to 72B5.
 - 72B5-72BE: ??? external entry ??
 - 72BF-72FA: ???
 - 72FB-7317: ???
 - 7318-732D: ??? does something with party character facing, forces
   controller input ??
 - 732E-7342: ??? calls 75DA, then does a pallete fade-out ??
 - 7343-73CC: ??? displays bottom party status window ??
 - 73CD-73F1: ??? displays character name and status for 7343 ??
 - 73F2-744A: ??? displays character status for 73CD ??
 - 744B-745F: ??? displays script section 26, item 4 ("HP") in some
   color ??
 - 7460-7474: ??? displays script section 26, item 5 ("MP") in some
   color ??
 - 7475-7489: ??? displays script section 26, item 7 ("MAX") in some
   color ??
 - 748A-74A2: ???
 - 74A3-74AA: ??? data ??
 - 74AB-74D2: ??? text coordinate pairs ??
 - 74D3-74D5: Clear A and jump to 74D8.
   - Select a party member, with various special handling for
     character $03 (Cherubim).
 - 74D6-74D7: Set A to #$01 and fall through to 74D8.
   - Select a party member, without special handling for character $03
     (Cherubim), used purely for the "use an item" command at one
     particular point in the process.
 - 74D8-753F: Display and run party-member selection menu
   - This routine has special hooks for the event that character id
     $03 (Cherubim) is selected, both for general item use (Cherubim
     cannot hold or use items) and for setting equipment (since the
     equip command is the defined mechanism for showing per-character
     stats).
   - 74D8-74DA: Store A to $2fb0 (for-item-purpose flag?).
   - 74DB-74DD: Call 71DD to ??
     - Populate menu with a list of party members?
   - 74DE-74EE: Set $2f6f to $2fa2 plus #$01 (??) and $2f6d to $2f70
     minus #$02 (??).
   - 74EF-74FF: Add $2fa2 times three to $2f6d.
   - 7500-7508: Load $2f6d (??) plus #$01 into A and call 76F1 to open
     the menu window, configure the interaction parameters, and render
     the menu contents.
   - 7509-750C: Clear A (as the initially-selected menu item) and call
     77AE to run the menu interaction.
   - 750D-750F: If the Z flag is clear (menu cancelled?), return.
   - 7510-751D: Load the script tag for the selected menu item (a
     character name in section $25), subtract #$1b (27, for Sinbad),
     and store in $2fa6 (selected party member).
   - 751E-7521: If the selected party member is not #$03 (Cherubim),
     jump to 753F.
   - 7522-752B: If the current command id is #$02 (equip items), call
     6A32 to ??
   - 752C-7534: If the value in A (the current command ID or the value
     left by calling 6A32) is #$05 (cast magic, if it's the command
     ID), or $2fb0 is nonzero (indicating non-item character
     selection, see 74D6), jump to 753F.
     - Preliminary investigation suggests that the return value from
       6A32 may be a horizontal text cursor position, possibly meaning
       a menu cursor position.  The question is, can it ever be #$05?
       Is it always #$05?
   - 7535-7539: Call 76B0 to open a window displaying indexed message
     #$0e (something about Cherubim not being able to hold items).
   - 753A-753E: Set $2fa7 (??) to #$ff.
   - 753F-753F: Return.
 - 7540-7573: ??? Item sale/resale price lookup for in-menu display ??
 - 7574-757B: ??? external entry ??  Parameter in A ??
 - 757C-75A4: ??? prepares a designated (in A) menu for display ??
 - 75A5-75A8: ??? external entry ?? jumps to 75AB ??
 - 75A9-75AA: ??? falls through to 75AB ??
 - 75AB-75C4: ??? parameters in A (set by 75A5 / 75A9) and YX ??
   - Contextually, displays YX as a 16-bit decimal value.
 - 75C5-75D9: ??? external entry ??
 - 75DA-75E0: Turn background rendering on, sprite rendering off.
 - 75E1-75F5: Opens a window and displays the party's current gold.
   - 75E1-75E5: Call 7600 to open window 2, the gold status window.
   - 75E6-75E8: Zero $2fa4. ??
   - 75E9-75EB: Call 75F6 to ??
   - 75EC-75F4: Set the horizontal cursor position to #$15 and call
     76CB to display indexed message #$4b (the "G" prefix for gold).
   - 75F5-75F5: Return.
 - 75F6-75FF: Load $22a3.W (party gold) into YX and call 75A5 to
   display it.
 - 7600-7657: ??? Opens a new text window ?? external entry ??
   - 7600-760B: Save A on the stack.  If A is between $08 and $24
     (inclusive), save a copy to $2fae.
   - 760C-7617: Set $53 (window text tile high byte) to $02, if $2fad
     is zero, call 7658 to ??
   - 7618-7625: Restore and re-save A to the stack.  Double it and use
     it to index the pointer array at 6119, saving the resulting
     pointer to $f7.W.
   - 7626-763D: Copy out window border top-left corner coordinates and
     width and height from the structure pointed to by $f7, and store
     the next offset in the structure (four) to $2f6d.
   - 763E-764A: Restore A from the stack.  If it is zero, call EF0A to
     animate displaying the text window, otherwise call ED1F to
     display the text window without animation.
   - 764B-7656: Reload the structure offset (four) from $2f6d, and
     store the next two values in the structure to the text cursor
     horizontal and vertical position.
   - 7657-7657: Return.
 - 7658-769A: Take a backup of the SAT (VRAM $1000-$10ff) at VRAM
   $1100-$11ff (with a word of overrun?).
   - 7658-7660: Select VDC MAWR (write address), wait until VBlank is
     detected (we're about to do some DMA, which is triggered at the
     start of VBlank, so we're waiting until we have most of a frame
     to do the setup).
   - 7661-7662: Clear X and Y indices.
   - 7663-7677: Set VDC register index, data low, and data high from
     $769b[Y++].
   - 7678-767B: If fewer than five VDC registers have been set, branch
     to 7663.
   - 767C-7680: Increment X.  If the result is one, branch to 768B.
   - 7681-7684: If fewer than seven VDC registers have been set,
     branch to 7663.
   - 7685-768A: Set $2fad to 1 and return.
   - 768B-7693: Select VDC MAWR (write address), wait until VBlank is
     detected (the VBlank detection was cleared at 7658-7660, so this
     is the following VBlank, meaning that the configured DMA has been
     triggered).
   - 7694-7698: Increment X.  If the result is two, branch to 768B to
     wait for the following VBlank onset, meaning that the configured
     DMA has definitely completed.
   - 7699-769A: Branch to 7663 to deal with the final two VDC register
     writes.
 - 769B-76AF: VDC register/data values used by 7658.
   - DCR=$0001 (increment source, increment destination, no SATB
     transfer repeat, no IRQ for VRAM-VRAM transfer, IRQ for VRAM-SATB
     transfer).  Note that VDC IRQs are blocked at the CPU level.
   - SOUR=$1000 (isn't this the SAT base address?).
   - DESR=$1100 (???).
   - LENR=$0100 (257 (!) words), triggers DMA for next VBlank period.
   - DCR=$0003 (enable IRQ for VRAM-VRAM transfer).  Either the
     documentation here is wrong, or the programmers misunderstood how
     the DMA mechanism in the VDC works.
   - LENR=$0000 (1 word), triggers DMA for next VBlank period.
   - DCR=$0011 (disable IRQ for VRAM-VRAM transfer, enable VRAM-SATB
     transfer auto-repeat).
 - 76B0-76CA: Displays a given message (index in A) in a newly-opened
   suitable window.
   - 76B0-76CA: Open window #$00 (shopkeeper dialogue, message speed,
     menu-result), #$01 (password-entry message), or #$2a (???),
     depending on the input parameter.
     - #$4f <= A < #$52: #$2a
       - Message $4f is "どれを けしますか?" (section 26, tag 22)
       - Message $50 is "よろしいですか?" (section 26, tag 23)
       - Message $51 is "どうしますか?" (section 26, tag 28)
     - A < #$02: #$01
       - Message $00 is asking for a password.
       - Message $01 is saying that the password is invalid.
     - default: #$00
   - Fall through to 76CB.
 - 76CB-76E1: Displays a given message (index in A) in the current
   window.
   - 76CB-76D6: If the input parameter is #$4a or #$4b, set the text
     palette to 9 (tile highbyte #$92).
   - 76D7-76DC: Call 76E2 to look up the message to display and 405A
     to display it.
   - 76DD-76E1: Set the text palette to 0 (tile highbyte #$02) and
     return.
 - 76E2-76F0: Source a script section and tag from the array at
   $45.7000 (mapped at $9000).
   - A apparently should be <= #$62 (98) on entry.
   - 76E2-76E3: Shift A left once and transfer to X.
   - 76E4-76E7: Map bank $45 to $8000-$9fff.
   - 76E8-76F0: Load $9000[X].W to YX and return.
 - 76F1-773C: Open menu window and configure cursor behavior.
   - Parameter in A, used to index 63AB.
   - Menu #$21 (?) is handled specially, the window doesn't get opened and
     the text palette doesn't get set.
 - 773D-7787: Render menu window contents.
   - Also sets the initial cursor position, from 638D.
 - 7788-77A9: ??? display equipment type character before a menu text
   entry ??
 - 77AA-77AD: ??? equipment type character/tile codes ??
 - 77AE-78FF: Non-combat menu interaction driver.
   - 77AE-77B4: ??? variable initialization ??
   - 77B5-77BB: Loop calling E10A to read the controllers until no
     buttons are pressed.
   - 77BC-77C1: Set $2c44.W to zero.
   - 77C2-77D2: Increment $2c44.W by one.
   - 77D3-77DC: If $2c45 AND #$08 is zero, call $12.75a3 ?? (blink cursor?)
   - 77DD-77E6: If $2c45 AND #$08 is non-zero, call $12.75a9 ?? (blink cursor?)
   - 77E7-7815: Call E10A to read the controllers, and then dispatch
     on the input status.
     - If UP is pressed, jump to 781B.
     - If DOWN is pressed, jump to 7837.
     - If LEFT is pressed, jump to 785A.
     - If RIGHT is pressed, jump to 7894.
     - If I is pressed, jump to 78D3.
     - If II is pressed, jump to 78E9.
     - If SELECT is pressed, jump to 78FA.
     - Otherwise, jump to 77C2.
   - 7816-781A: Call $12.75f2, then jump to 77BC. ??
   - 781B-7826: Subtract the number of items per row of the menu from
     the current item position.  If it is less than zero, branch to
     77C2, otherwise store the result back as the new current
     position.
     - This is the entry point for the UP-button handler.
   - 7827-7829: Call $12.75a9. ??
   - 782A-7831: Decrement the text cursor vertical position by the
     vertical distance between menu rows.
   - 7832-7836: Call $12.75a3, then jump to 7816. ??
   - 7837-???
     - This is the entry point for the DOWN-button handler.
   - 785A-???
     - This is the entry point for the LEFT-button handler.
   - 7894-???
     - This is the entry point for the RIGHT-button handler.
   - 78D3-78E8: Send a command to the audio driver (??), call $12.75a3
     (??), loop calling E10A to read the controllers until no buttons
     are pressed, load #$00 to A, and jump to 78F6.
     - This is the I-button "accept menu action" handler.
   - 78E9-78F5: Send a command to the audio driver (??), call $12.75a9
     (??), then load #$01 to A. ??
     - This is the II-button "cancel menu action" handler.
   - 78F6-78F9: Store A in $2fa7 and return.
   - 78FA-78FF: Call $45.7298, then jump to 77C2. ??
     - This is the SELECT-button "describe item/spell" handler.
 - 7900-7A40: Common handler for (most) non-combat commands, including
   buying and selling.
   - Contextually, this runs a party-member selection (in all but one
     case), thence an item-selection (from the party-member inventory
     in most cases, from a /shopkeeper inventory/ in the one case),
     thence related follow-on.  It's a fairly templated, but also
     fairly nested, menuing system, including back-step transitions at
     basically every point.  It also manages to be the primary context
     for quite a bit of otherwise-unknown code.
   - 7900-7906: Double $2fa3 (command id) and store it in $2f9c
     (command word index).
   - 7907-7956: Step 1: party-member selection.
     - 7907-7909: Zero $2fa1 (??).
     - 790A-790E: If $2fa3 (command id) is zero (buy from shopkeeper),
       jump to 7957.
       - This skips the first party-member selection.
     - 790F-7914: $2fa2 = $6052[$2fa3]; (??)
       - This value is either $00 (sell an item) or $02 (everything
         else).  The value $ff is also in the table, but at index
         zero, thus precluded by 790A-790E.
       - Affects the party-member selection window, somehow?  The $00
         case puts the menu on the right side of the screen, the $02
         case on the left.
         - This, of course, may be purely correlation, rather than
           causation.
     - 7915-791A: Call 76B0 to open a window and display an indexed
       message drawn from the table at 6059 indexed by $2fa3 (command
       id).
       - In all cases, this is some variant on "who is doing this?"
     - 791B-791D: Call 74D3 to select a party member.
     - 791E-7924: Dispatch on $2fa7 (menu action result).  If it's
       zero (accepted), jump to 7937.  If it's negative (Cherubim
       case), jump to 7929.  Otherwise (canceled) fall through
       to 7925.
     - 7925-7928: Call 7A41 to ??, and return.
       - Contextually, this is probably some sort of display cleanup.
     - 7929-792F: If $2fa3 (command id) is not $02 (equip), jump
       to 7907.
       - Selecting Cherubim for equip has a special case in character
         selection, so needs special cleanup?
     - 7930-7936: Load #$22 to A, call 7A54 to ??, and jump to 7907.
       - Does 7A54 clear the character status window?
     - 7937-7941: If $2fa3 (command id) is neither #$04 (use item) nor
       #$05 (use magic), jump to 7951.
     - 7942-7944: Call 7134 to ??
       - This loads the selected party member ID times #$20 (so, the
         "is a member of the party" flag) to Y.
     - 7945-7949: If $2200[Y] is not zero, jump to 7951.
       - $2200 is the start of the party data area, which includes
         both equipment and spell inventories for all characters.
     - 794A-7950: Load #$5f to A, call 7B6C to ??, and jump to 7907.
       - This is section 26, tag 43: "きを うしなっている".
       - This is the "selected person is unconscious" case.
     - 7951-7956: Copy $2fa6 (selected party member id) to $2f98 (??).
   - 7957-7969: Step 2: Item/spell selection.
     - 7957-7959: Call 7A5E to ??
       - Contextually, this is an inventory (party member or shopkeeper,
         item or spell) selection menu.
     - 795A-7960: Dispatch on $2fa7 (menu action result).  If it's
       negative (inventory is empty?), jump to 7907.  If it's zero
       (accepted), jump to 796A.  Otherwise (cancelled) fall through
       to 7961.
     - 7961-7963: Call 7A41 to ??.
       - From context, this is probably some sort of display cleanup.
     - 7964-7969: If $2fa3 (command id) is not zero (buy from
       shopkeeper), jump to 7907.  Otherwise, return.
   - 796A-799F: Step 3: Item/spell selection validity testing.
     - 796A-796F: Copy $2c46 (selected menu item) to $2f97 (??).
     - 7970-797E: Set $2f9a.W to ($6060[$2f9c]).W (??).
       - This is looking up a function pointer in the table at $6060,
         indexed by command id.
     - 797F-7981: Call 7A5B to ??
       - 7A5B turns out to be a JMP ($2F9A), making this entire sequence
         from 7970 an indexed function call drawn from the table at
         $6060, indexed by the current command id.
     - 7982-7983: If the Z flag is set (??), jump to 79A0.
       - This appears to be the /only/ use of a "result" from a function
         in the table at $6060, though it doesn't rule out possible
         side-effects.
       - And it turns out that a number of these functions also set
         $2fa7 (menu action result).
     - 7984-7992: Set $2f9a.W to ($6075[$2f9c]).W (??).
       - This is looking up a function pointer in the table at $6075,
         indexed by command id.
     - 7993-799A: Load $606e[$2fa3] into A.  Jump to 79A0 if it is
       negative.
       - That is, if the command is $03, "give"...  Which it can't be,
         because the corresponding entry in $6060[] is 70A4, which
         clears A and $2fa7, which in turn sets the Z flag tested
         at 7982.
       - Otherwise, this appears to be an indexed message ID,
         contextually saying that the selection was invalid and
         leading back to the inventory selection menu.
     - 799B-799F: Call 7A5B to ??, then jump to 7957.
       - As mentioned earlier, this is an indirect function call through
         $2f9a.W.
   - 79A0-???: Step 4: ???
     - 79A0-79AE: Set $2f9a.W to ($608a[$2f9c]).W (??)
       - Usual pattern for setting up an indexed call.
     - 79AF-79B6: Load $6083[$2fa3] into A.  Jump to 79BA if it is
       negative.
     - 79B7-79B9: Call 7A5B to ??
   - 79BA-79C4: If $2fa3 (command id) is not $04 or $05, jump to 79D6.
   - 79C5-79C9: If $2f9d (??) is non-zero, jump to 7A14.
   - 79CA-79D5: Copy $2fa6 (selected party member) to $2f98 and $2c46
     (selected menu item) to $2f97 (??).
   - 79D6-79E4: Set $2f9a.W to ($6098[$2f9c]).W (??)
     - Usual pattern for setting up an indexed call.
   - 79E5-79EC: Load $60a6[$2fa3] into A.  Jump to 7A14 if it is
     negative.
   - 79ED-79EF: Store A into $2fa2 (??)
   - 79F0-79F2: Call 7A5B to ??
   - 79F3-79FD: If $2fa3 is $01 (sell an item), load #$16 into A (??)
     and jump to 7A04.
   - 79FE-7A03: If $2fa3 is not $06 (drop an item), jump to 7A07.
   - 7A02-7A03: Load #$21 into A (??)
   - 7A04-7A06: Call 7A5B to ??
   - 7A07-7A13: Dispatch on $2fa7 (??).  If it's negative, jump to
     79A0.  If it's non-zero, call 7A41 to ?? and jump to 7907.
     Otherwise, fall through to 7A14.
   - 7A14-7A22: Set $2f9a.W to ($60ad[$2f9c]).W (??)
     - Usual pattern for setting up an indexed call.
   - 7A23-7A25: Call 7A5B to ??
   - 7A26-7A30: If $2fa7 is non-zero, call 7A41 to ?? and jump to
     79A0.
   - 7A31-7A3A: If $2fa3 (command id) is $02 (equip), jump to 7957.
   - 7A3B-7A40: Call 7A41 to ?? and jump to 7907.
 - 7A41-7A53: ??? external entry ??
   - Close/erase last window opened, preserving text cursor position?
 - 7A54-7A5A: ???
   - Close/erase window with ID in A, with some behavior controlled by
     global variables?
 - 7A5B-7A5D: ??? Indirect jump through $2f9a ??
 - 7A5E-7B03: ???
 - 7B04-7B16: ???
 - 7B17-7B6B: ??? external entry ??
 - 7B6C-7B93: ???
   - Parameter in A.  Indexed message, maybe?
   - 7B6C-7B71: Push A to the stack, call 7600 to open indexed window
     #$00.
   - 7B72-7B7B: Pop and re-push A from the stack.  If it is neither
     #$3A nor #$58, jump to 7B84.
     - $3a: section 25, tag 89: "つかえません".
     - $58: section 26, tag 9: "すてられません".
   - 7B7C-7B83: Load $2fa5 (selected item id) to A, call 7C1E to
     display the selected item or spell name, and jump to 7B8A.
   - 7B84-7B89: Load $2fa6 (selected party member id) to A and call
     7C37 to display the character name.
   - 7B8A-7B8E: Call 76CB to display indexed message #$2A.
     - This turns out to be section 25, tag 83: "は ".
   - 7B8F-7B93: Pop A from the stack, call 7B94 to ??, and return.
 - 7B94-7B96: ??? falls through to 7B97 ??
   - Call 76CB to display indexed message in A, and fall through to
     7B97.
 - 7B97-7B9C: ??? displays indexed message #$18 ??
   - Call 76CB to display indexed message #$18 and return.
     - This turns out to be section 25, tag 60: WFI.
 - 7B9D-7BA1: ??? jumps to 7B97 ??
 - 7BA2-7BDC: ???
 - 7BDD-7BED: ??? falls through to 7BEE ??
 - 7BEE-7BF3: ??? falls through to 7BF4 ??
 - 7BF4-7C09: ???
 - 7C0A-7C19: ???
 - 7C1A-7C1D: ??? code pointers ??
 - 7C1E-7C36: Display item-or-spell name in A.
   - 7C1E-7C25: Move parameter in A to X.  If $2fa3 (command id) is
     #$05 (cast magic) jump to 7C2C.
   - 7C26-7C2B: Load #$1f (script section 31, items) into Y, call 405A
     (a trampoline) to display the item name, and return.
   - 7C2C-7C30: Load #$1d (script section 29, spells) into Y and call
     405A (a trampoline) to display the spell name.
   - 7C31-7C36: Call 76CB to display indexed message #$37, and return.
     - This turns out to be section 25, tag 90: "の まほう".
 - 7C37-7C40: Display character name in A.
   - Add #$1b (27) to the parameter in A, move it to X, load #$19
     (script section 25) to Y, call 405A (a trampoline) to display the
     character name, and return.
 - 7C41-7C4D: ??? $22a2.W = $2f60.W ?? set party gold ??
 - 7C4E-7C56: ??? $22a2.W = #$ffff ?? set party gold ??
 - 7C57-7C63: ??? $2f60.W = $22a2.W ?? copy party gold ??
 - 7C64-7C8E: ??? doing something to each party member ??
   - Setting HP and MP to maximum.
 - 7C8F-7CD7: ??? Parameter in X ?? Doing something involving the text
   cursor per each menu entry ??
 - 7CD8-7CE9: ??? does a palette fade-in ??
 - 7CEA-7CF4: Delay loop of some sort.
 - 7CF5-7CFB: ??? Send a command to the audio driver ??
 - 7CFC-7D23: ??? Load geometry for window ID in A to $2fa9-$2fac ??
 - 7D24-7D8D: ???
   - Contextually, this is an erase-area for a rectangle specified in
     $2fa9-$2fac.
   - 7D24-7D27: If $ae (??) is non-zero, jump to 7D58.
   - 7D28-7D4B: ??? co-ordinate transforms?
   - 7D4C-7D4E: Call $12.70B8 to ??
     - Contextually, re-draw the map in a specified area.
   - 7D4F-7D56: If $2fad (??) is nonzero, call 7E36 to ??
   - 7D57-7D57: Return.
   - 7D58-7D6C: ??? loop setup, including pushing a terminal value to
     the stack ??
   - 7D6D-7D79: Call E4FC (write text window tile) to write tile #$00,
     incrementing $40 (text cursor horizontal) each time, until it
     equals the value on the top of the stack.
   - 7D7A-7D85: Copy $2fa9 (?? window geometry) to $40 (text cursor
     horizontal), increment $41 (text cursor vertical), decrement
     $2fb1 (number of rows to erase?) and jump to 7D6D if it ($2fb1)
     is not zero.
   - 7D86-7D86: Discard the top stack value (horizontal cursor limit).
   - 7D87-7D8C: If $ae (??) is non-negative (??), call 7D8E to ??
   - 7D8D-7D8D: Return.
 - 7D8E-7E0A: ???
 - 7E0B-7E0F: ??? jumps to 7E25 ??
 - 7E10-7E14: ??? jumps to 7E25 ??
 - 7E15-7E1D: ??? jumps to 7E25 ??
 - 7E1E-7E24: ??? falls through to 7E25 ??
 - 7E25-7E35: ??? some sort of bounded classifier of A, returns X in
   the range of 0-2 ??
   - A >= #$16: 0.
   - A < #$09: 2.
   - #$09 <= A < #$16: 1.
 - 7E36-7E5F: ??? some sort of iteration over menu item entries ??
 - 7E60-7ED2: ??? searching for something in the "backup" SAT copy ??
 - 7ED3-7F37: ??? writing a couple of words to (the "backup"?) SAT ??
 - 7F38-7FFF: Padding (all $FF bytes).

Bank 04

Largely unexplored. Contains the cave/dungeon interaction logic, and the password entry logic.

 - 6000-61C1: ??? external entry ??
   - 6000-6005: Call $01.5dca to wait for VBlank, and call $41.7179 to
     draw the password entry screen.
   - 6006-6014: Memset $2b00[#$52] to #$44.
   - 6015-6018: Call $01.429b->?? to display indexed message #$00
     (please enter password).
   - 6019-603C: ??? initialize a number of variables ??
   - 603D-603F: Call 60E1 to display the password cursor.
   - 6040-6046: Call $00.e10a to read the controllers, and jump back
     to 6040 if $10 (controller 0 input) is not zero (that is, wait
     until reading controller zero shows no buttons pressed).
   - 6047-6053: ??? check input ??
     - Call $00.e10a to read the controllers.  If $10 (controller 0
       input) is not zero, call 627A to load twice the index of the
       lowest set bit into X, then jump indirect indexed through
       $6372.
   - 6054-6058: Set $2f38 (??) to one.
   - 6059-6062: Call 623B to ??, set X to #$02 and call 7386 to ??,
     then jump to 6047.
   - 6063-6076: ??? handle RUN pressed during password entry ??
     - 6063-6069: Call $00.e10a to read the controllers until no
       button is pressed on controller zero.
     - 606A-606E: Call 62D3 to check for the debug password and jump
       to 6076 if the debug password was entered.
     - 606F-6075: Call 6283 to ?? and jump to 6059 if $24 (??) is not
       zero.
     - 6076-6076: Return.
   - 6077-607C: Handle DOWN pressed during password entry.
     - Increment $2f35 (cursor Y) and jump to 608F.
   - 607D-6082: Handle LEFT pressed during password entry.
     - Decrement $2f34 (cursor X) and jump to 608F.
   - 6083-6088: Handle UP pressed during password entry.
     - Decrement $2f35 (cursor Y) and jump to 608F.
   - 6089-608E: Handle RIGHT pressed during password entry.
     - Increment $2f34 (cursor X) and jump to 608F.
       - This could have been fall through to 608F, but wasn't.
   - 608F-60A7: Common handling for password entry cursor motion.
     - 608F-6095: Call 60A8 to bounds-check and possibly adjust the
       cursor coordinates, then jump to 60A5 if $24 (??) is not zero.
       - $24 is used here as a flag to make sure that a given cursor
         motion is valid.
     - 6096-60A4: Call 60E1 to update the password entry cursor, then
       copy $2f34-$2f35 (cursor coordinates) to $2f32-$2f33 (saved
       cursor coordinates).
     - 60A5-60A7: Jump to 6059.
   - 60A8-60E0: ??? password entry cursor motion bounds check ??
     - 60A8-60B2: If $2f34 (cursor X coordinate) is 255 ($ff / -1) or
       12 ($c), branch to 60D0.
     - 60B3-60BD: If $2f35 (cursor Y coordinate) is 255 ($ff / -1) or
       6, branch to 60D0.
     - 60BE-60C2: If $2f35 (cursor Y coordinate) is less than 2 (?),
       branch to 60CD.
     - 60C3-60CC: If $2f34 (cursor X coordinate) is 11 ($b), decrement
       it by one.
       - Column 10 ($a), rows 2-5 are all three-character command
         names, rather than single-character entries, so this prevents
         the cursor from overwriting the middle characters in the
         commands or addressing the right half of the commands.
       - A consequence of this desgin is that pressing RIGHT from one
         of these commands will cause the cursor to be erased and
         re-drawn in the same location, while pressing RIGHT from the
         last character in the first two rows will not.  At worst,
         this would manifest as a single-frame flicker in the cursor,
         and this may be masked by other effects.
     - 60CD-60CF: Set $24 (validity flag?) to zero, and return.
     - 60D0-60E0: Copy $2f32-$2f33 (saved cursor coordinates) to
       $2f34-$2f35 (cursor coordinates), set $24 (validity flag?) to
       1, and return.
   - 60E1-6105: ??? move entry cursor on screen ??
     - 60E1-60F2: Load $2f32.W (saved cursor coordinates) into XY,
       call 6106 to map them to text window coordinates, store the
       result to $40.W (text window cursor coordinates), and call
       $00.e4fc to write tile #$9f (a blank space) to the display.
     - 60F3-6105: Load $2f34.W (cursor coordinates) into XY, call 6106
       to map them to text window coordinates, store the result to
       $40.W (text window cursor coordinates), call $00.e4fc to write
       tile #$9c (right-pointed triangle) to the display, and return.
   - 6106-6110: Convert entry cursor coordinates in XY to text
     window coordinates.
     - 6106-610A: Move the value in X (horizontal coordinate) to A,
       shift it left once (doubling it), add 4, and move the result
       back to X.
     - 610B-6110: Move the value in Y (vertical coordinate) to A,
       shift it left once (doubling it), add 16 ($10), move the result
       back to Y, and return.
   - 6111-6147: ??? handle button I pressed during password entry ??
     - 6111-6115: If $2f38 (??) is zero, jump to 6142.
     - 6116-6118: Read $2f2e (??), to no effect.
       - The read itself has no effect, and calling 61F0 clobbers A
         anyway.
     - 6119-611F: Call 61F0 to read the selected entry from the
       password entry layout into A (and its index into X), and branch
       to 6125 if it is #$33 (katakana ア) or greater.
     - 6120-6124: Jump to the A'th entry in the table at $6382
       (password entry command handlers).
     - 6125-612C: Store the index of the selected password character
       within the layout into $2b00[$2f2e].
     - 612D-612F: Call 61C2 to display the selected character as part
       of the password.
     - 6130-6136: If $2f2e (password edit caret position?) is equal to
       $3f (maximum password length?), jump to 6142.
     - 6137-613E: If $2f2e (password edit caret position?) is equal to
       the value at $2f2f (password length?), increment $2f2f
       (password length?).
     - 613F-6141: Increment $2f2e (password edit caret postion?).
     - 6142-6147: Clear $2f38 (??) to zero and jump to 6059.
   - 6148-6173: ??? handle button II pressed during password entry ??
     - 6148-614C: If $2f2e (password entry caret position?) is zero,
       jump to 6171.
     - 614D-6151: If $2f2e (password entry caret position?) is not the
       same as the value in $2f2f (password length?), jump to 6167.
     - 6167-???: ??? code_6167
     - 616C-???: ??? code_616C
     - 6171-6173: Jump to 6059.
   - 6174-6194: ??? handle KESURU command (deletes character at point,
     shifting later characters left by one space) ??
     - 6174-617B: If $2f2e (password entry caret) is equal to $2f2f
       (password length), jump to 6192.
     - 617C-618B: ???
     - 618C-6191: Decrement $2f2f (password length) and call 6259 to
       ?? (re-display the password?).
     - 6192-6194: Jump to 6059.
   - 6195-61A5: ??? sub_6195
     - 6195-6199: If $2f2e (password entry caret) is zero, jump to
       61A5.
     - 619A-61A4: Set $2f36 (??) to one, call 623B to ??, and
       decrement $2f2e (password entry caret).
     - 61A5-61A5: Return.
   - 61A6-61AB: ??? handle MOTORU command ??
     - Call 6195 to ??, and jump to 6059.
   - 61AC-???: ??? handle SUSUMU command ??
   - 61BF-???: ??? code_61BF
 - 61C2-61EF: ??? does some checking for specific character ids, and
   writes the result to the display ??
   - 61C2-61C9: Store A on the stack, call 612C to calculate the
     coordinates for the character to display and store the result in
     $40-$41 (text cursor coordinates).
   - 61CA-61CE: Set $2f37 (??) to $9f (space).
   - 61CF-61DB: Restore A from the stack.  If it is $9d (asterisk) or
     $9f (space), or it is less than $70 (zero), jump to 61E4.
   - 61DC-61E3: Set $2f37 (??) to $6c (dakuten), and subtract $40 from
     A (biasing the result into the katakana range).
   - 61E4-61EF: Call $00.e4fc to display the character, decremennt $41
     (text cursor vertical position), load $2f37 (??), call $00.e4fc
     to display that character, and return.
 - 61F0-6200: Read password entry layout for currently-addressed
   password character/command.
   - 61F0-61F8: Load $2f34 (password entry cursor X coordinate) into A
     and multiply it by six (6) using $00 as a temporary variable.
   - 61F9-6200: Add the value at $2f35 (password entry cursor Y
     coordinate) to A, read that index within 6329[] (password entry
     layout) into A, and return.
 - 6201-621B: ??? (dead code??)
   - 6201-???: ???
   - 621B-621B: Return.
 - 621C-623A: ??? coordinate calculation ??
   - 621C-622C: Load $2f2e (??) into A, mask it down to the low four
     bits, increase it by one-fourth of its value (rounded down), add
     $2f30 (saved text cursor X coordinate?), and move the result to
     X.
   - 622D-622A: Load $2f2e (??) into A, shift it right by four bits,
     double it, add $2f31 (saved text cursor Y coordinate?), move the
     result to Y, and return.
 - 623B-6256: ??? sub_623B
   - 624E-???: ??? code_624E
   - 6253-???: ??? code_6253
 - 6257-6279: ??? display password-so-far ??
   - 625E-???: ??? code_625E
 - 627A-6282: ??? Count double the number of trailing zero bits in A into X ??
   - 627B-???: ??? code_627B
   - 6282-6282: Return.
 - 6283-62CA: ??? check password validity ??
   - 62A8-62AC: ??? display indexed fragment #$01 (password is in the
     wrong) ??
   - 62AD-???: ??? code_62AD
   - 62B4-???: ??? waits for input, displays indexed fragment #$00
     (please enter password) ??
   - 62C8-???: ??? code_62C8
 - 62CB-62D2: ??? compute XOR checksum of entered password ??
   - 62CC-???: ??? code_62CC
 - 62D3-6328: ??? check for special, cheaty (debug?) password ??
   - 62D4-???: ??? code_62D4
   - 631F-???: ??? code_631F
   - 6322-6328: The cheaty password itself.
 - 6329-???: ??? data, see $41.71a6 ??
   - This turns out to be the layout for the password entry input
     window, mapped in the $8000-$9fff window, so appears starting at
     $8329.  But is also referenced from within the bank at $6329.
 - 6372-6381: ??? jump table, controller input handlers ??
 - 6382-???: ??? jump table ??
 - 638A-6410: ??? set game state from decoded password ??
   - 639C-???: ??? code_639C
   - 63A2-???: ??? code_63A2
   - 63C5-???: ??? code_63C5
   - 63E6-???: ??? code_63E6
   - 63F1-???: ??? code_63F1
   - 6407-???: ??? code_6407
   - 640C-???: ??? code_640C
 - 6411-64B8: ??? external entry ?? encode game state as password ??
   - 641B-???: ??? code_641B
   - 641D-???: ??? code_641D
   - 643D-???: ??? code_643D
   - 6447-???: ??? code_6447
   - 6464-???: ??? code_6464
   - 646D-???: ??? code_646D
   - 6476-???: ??? code_6476
   - 647F-???: ??? code_647F
   - 648B-???: ??? code_648B
   - 649A-???: ??? code_649A
 - 64B9-???: ??? sub_64B9 ??? control flow starts getting a bit
   tangled in here ??
   - 64DC-???: ??? code_64DC
   - 64F0-???: ??? code_64F0
   - 64FB-???: ??? code_64FB
   - 6507-???: ??? code_6507
   - 6527-???: ??? external entry ??
   - 6532-???: ??? code_6532
   - 653D-???: ??? code_653D
   - 6548-???: ??? code_6548
   - 6551-???: ??? code_6551
 - 655F-6603: ??? sub_655F
   - 6571-???: ??? code_6571
   - 6576-???: ??? code_6576
   - 6588-???: ??? code_6588
   - 659E-???: ??? code_659E
   - 65C7-???: ??? code_65C7
   - 65CD-???: ??? code_65CD
   - 65DC-???: ??? code_65DC
   - 65EB-???: ??? code_65EB
   - 65FA-???: ??? code_65FA
 - 6604-6665: ??? sub_6604
   - 6649-???: ??? code_6649
   - 6657-???: ??? code_6657
 - 6666-6676: ??? sub_6666
   - 6669-???: ??? code_6669
 - 6677-66DD: ??? sub_6677
   - 66B5-???: ??? code_66B5
   - 66C3-???: ??? code_66C3
   - 66D5-???: ??? code_66D5
 - 66DE-66EE: ??? sub_66DE
   - 66E1-???: ??? code_66E1
 - 66EF-6717: ??? sub_66EF
   - 66F4-???: ??? code_66F4
   - 6701-???: ??? code_6701
   - 6710-???: ??? code_6710
 - 6718-6745: ??? sub_6718
   - 6720-???: ??? code_6720
   - 6725-???: ??? code_6725
   - 672F-???: ??? code_672F
   - 673E-???: ??? code_673E
 - 6746-6766: ??? sub_6746
   - 6747-???: ??? code_6747
   - 6755-???: ??? code_6755
   - 675E-???: ??? code_675E
 - 6767-6788: ??? sub_6767
   - 676B-???: ??? code_676B
   - 6779-???: ??? code_6779
   - 6782-???: ??? code_6782
 - 6789-679F: ??? sub_6789
   - 678A-???: ??? code_678A
   - 6796-???: ??? code_6796
 - 67A0-67B9: ??? sub_67A0
   - 67A2-???: ??? code_67A2
   - 67B2-???: ??? code_67B2
   - 67B9-67B9: Return.
 - 67BA-??? data, used above; at least three start points (67BA, 67C4,
   67CE) ??
 - 67DB-6A08: ??? external entry (not via trampoline, see $01.4a99),
   toplevel dungeon map logic ??
   - 67DB-67E1: Set $2fda (??) to zero, and store the stack pointer in
     $2fd9 (??).
   - 67E2-67E7: Call $01.5188 to set the area BGM and $01.51e2 to
     select the map and tileset.
   - 67E8-6806: Map bank #$0d to $8000-$9fff, and copy it to VRAM
     $6000-$7fff.
   - 6807-680C: Call 75F9 to ??, and call 75A3 to ??
   - 680D-680F: Call $01.537b to set up NPC sprites for the area.
   - 6810-6812: Call 6CAE to ??
   - 6813-6816: Map bank #$05 to $8000-$9fff.
   - 6817-681F: Call $00.e7a6 to ??, $00.e5ca to ??, and
     $01.4014->$12.7000 to ??
   - 6820-6825: Enable sprite and BG rendering ??
   - 6826-6828: Call 7211 to ??
   - 6829-???: ???
   - 6831-6387: If $a1 (??) is not zero call 6D23 to ??
   - 6838-683A: Call $01.4b09 to ??
   - 683B-683D: Call 7492 to ??
   - 683E-6842: Load $2fd7 (??) to A, and jump to 6854 if it is zero.
   - 6843-???: ??? input stuffing ??
   - 684F-6853: Call 7386 to ??, and jump to 6867.
   - 6854-6856: Call $00.e10a to read the controllers.
   - 6857-685A: If $10 (controller 0 current input) is zero, jump
     to 6867.
   - 685B-685E: If $72 (??) is zero, jump to 6867.
   - 685F-6866: Call $01.4014->$12.7000 to ??, call $00.e5ca to ??,
     and set $72 (??) to zero.
   - 6867-688A: Dispatch on $10 (controller 0 current input).
     - If UP is pressed, jump to 6919.
     - If DOWN is pressed, jump to 693A.
     - If LEFT is pressed, jump to 695B.
     - If RIGHT is pressed, jump to 697C.
     - If I is pressed, jump to 699D.
     - If SELECT is pressed, jump to 69DA.
     - Otherwise, fall through to 688B.
   - 688B-6894: Set $2c0a (??) to #$01, and call $01.5de3 to delay for
     #$05 whatevers.
   - 6895-68A5: Increment $2c00.W (step counter ??).
   - 68A6-68CA: Using $00.ea4b, compare $2c00.W (step counter ??) to
     $51.W (??), jumping to 68D8 if ?? ($2c00.W?) is the smaller.
   - 68CB-68CD: Call $01.4ab4 to ??.
   - 68CE-68D7: Set $2c00.W (step counter ??) to zero.
   - 68D8-68DA: Jump to 683B.
   - 68DB-68DD: Call 749D to ??
   - 68DE-6909: Dispatch on $2be2 (??).
     - $00: Do nothing.
     - $01: Call 7320 to ??
     - $02: Call 732B to ??
     - $03: Call 6C7D to ??
     - $04: Call 6C41 to ??
     - default: Call 7308 to ??
   - 690A-690C: Call $01.40e6->$02.6000 to run (possible?) combat.
   - 690D-6918: If $9a (combat result) is #$02 (party wipe), jump to
     6CE6, otherwise jump to 683B.
   - 6919-6939: Handle UP pressed.
     - 6919-691E: Set $78 (??) to two less than $49 (??).
     - 691F-6924: Call $01.4e55 to ??, and 6A09 to ??
     - 6925-692C: If $2c0a (??) is zero, jump to 69FE.
     - 692D-6930: Set $4a (??) to #$03.
     - 6931-6939: Call $01.401e->$12.7026 to ??, call $00.e17a to ??,
       and jump to 68DB.
   - 693A-695A: Handle DOWN pressed.
     - 693A-???: ??? code_693A
     - 694E-???: ??? code_694E
   - 695B-697B: Handle LEFT pressed.
     - 695B-???: ??? code_695B
     - 696F-???: ??? code_696F
   - 697C-699C: Handle RIGHT pressed.
     - 697C-???: ??? code_697C
     - 6990-???: ??? code_6990
   - 699D-69D9: Handle I pressed.
     - 699D-???: ??? code_699D
     - 69BC-???: ??? code_69BC
     - 69D8-???: ??? code_69D8
   - 69DA-69FD: Handle SELECT pressed.
     - 69DA-???: ??? code_69DA
   - 69FE-6A08: Set $77 (??) to $48 (??), set $78 (??) to $49 (??),
     and jump to 6895.
 - 6A09-6C40: ??? sub_6A09
   - 6A09-6A13: Call $01.5262 to ??, call $01.52bb to check for NPC
     sprite interaction, jump to 7990 if an NPC sprite is found.
   - 6A14-6A43: If any of the tiles in $2c02, $2c04, $2c06, or $2c08
     match those in the tileset at 7921, jump to 6C28.
   - 6A44-6A73: If any of the tiles in $2c02, $2c04, $2c06, or $2c08
     match those in the tileset at 7926, jump to 6C32.
   - 6A74-6AA3: If any of the tiles in $2c02, $2c04, $2c06, or $2c08
     match those in the tileset at 792B, jump to 7A7E.
   - 6AA4-6AD3: If any of the tiles in $2c02, $2c04, $2c06, or $2c08
     match those in the tileset at 7930, jump to 6C1A.
   - 6AD4-6B03: If any of the tiles in $2c02, $2c04, $2c06, or $2c08
     match those in the tileset at 7932, jump to 6C13.
   - 6B04-6B33: If any of the tiles in $2c02, $2c04, $2c06, or $2c08
     match those in the tileset at 7940, jump to 6BFA.
   - 6B34-6B63: If any of the tiles in $2c02, $2c04, $2c06, or $2c08
     match those in the tileset at 7934, jump to 6C05.
   - 6B64-6B93: If any of the tiles in $2c02, $2c04, $2c06, or $2c08
     match those in the tileset at 793E, jump to 6C0C.
   - 6B94-6BC3: If any of the tiles in $2c02, $2c04, $2c06, or $2c08
     match those in the tileset at 7939, jump to 7A8D.
   - 6BC4-6BF3: If any of the tiles in $2c02, $2c04, $2c06, or $2c08
     match those in the tileset at 7942, jump to 6C21.
   - 6BF4-6BF9: Set $2c0a (??) to #$01, and return.
   - 6BFA-6C04: Set $2be9 (??) to #$01, set $2be2 (??) to #$02, and
     jump to 6C3A.
   - 6C05-6C0B: Set $2be2 (??) to #$04, and jump to 6C3A.
   - 6C0C-6C12: Set $2be2 (??) to #$05, and jump to 6C3A.
   - 6C13-6C19: Set $2be2 (??) to #$02, and jump to 6C3A.
   - 6C1A-6C20: Set $2be2 (??) to #$03, and jump to 6C3A.
   - 6C21-6C27: Cleanup the stack from tilset test, set $2c0a (??) to
     #$00, and return.
   - 6C28-6C31: Set $2be2 (??) to #$01, increment $2be0 (??), and jump
     to 6C3A.
   - 6C32-6C39: Set $2be2 (??) to #$01, and decrement $2be0 (??).
   - 6C3A-6C40: Cleanup the stack from tileset test, set $2c0a (??) to
     #$01, and return.
 - 6C41-???: ??? sub_6C41
   - 6C4F-???: ??? code_6C4F
   - 6C50-???: ??? code_6C50
   - 6C5D-???: ??? code_6C5D
   - 6C67-???: ??? code_6C67
 - 6C79-???: ??? code_6C79
 - 6C7D-???: ??? sub_6C7D
 - 6C8D-???: ??? code_6C8D
 - 6C8F-???: ??? code_6C8F
 - 6C91-???: ??? code_6C91
 - 6CAE-???: ??? sub_6CAE
 - 6CC9-???: ??? code_6CC9
 - 6CD8-???: ??? code_6CD8
 - 6CE3-???: ??? code_6CE3
 - 6CE5-???: ??? code_6CE5
 - 6CE6-???: ??? code_6CE6
 - 6CFB-???: ??? code_6CFB
 - 6D0B-???: ??? sub_6D0B
 - 6D23-???: ??? sub_6D23
 - 6D4A-???: ??? code_6D4A
 - 6D65-???: ??? code_6D65
 - 6D6E-???: ??? code_6D6E
 - 6D7F-???: ??? code_6D7F
 - 6D89-???: ??? code_6D89
 - 6D8A-???: ??? sub_6D8A
 - 6D9F-???: ??? code_6D9F
 - 6DB3-???: ??? sub_6DB3
 - 6DDF-???: ??? code_6DDF
 - 6E54-???: ??? sub_6E54
 - 6E95-???: ??? code_6E95
 - 6E9A-???: ??? sub_6E9A
 - 6EDB-???: ??? code_6EDB
 - 6EE0-???: ??? sub_6EE0
 - 6F1A-???: ??? sub_6F1A
 - 6F68-???: ??? sub_6F68
 - 6FB6-???: ??? sub_6FB6
 - 6FDF-???: ??? sub_6FDF
 - 7008-???: ??? sub_7008
 - 7031-???: ??? code_7031
 - 70B4-???: ??? sub_70B4
 - 70DE-???: ??? code_70DE
 - 70EE-???: ??? code_70EE
 - 7129-???: ??? code_7129
 - 7148-???: ??? code_7148
 - 7162-???: ??? code_7162
 - 716D-???: ??? code_716D
 - 717D-???: ??? code_717D
 - 71B3-???: ??? code_71B3
 - 71C8-???: ??? sub_71C8
 - 7211-???: ??? sub_7211
 - 7220-???: ??? sub_7220
 - 722C-???: ??? sub_722C
 - 723B-???: ??? sub_723B
 - 726F-???: ??? code_726F
 - 72AA-???: ??? code_72AA
 - 72AE-???: ??? code_72AE
 - 72C8-???: ??? code_72C8
 - 7308-???: ??? sub_7308
 - 7320-???: ??? sub_7320
 - 7334-???: ??? code_7334
 - 733C-???: ??? code_733C
 - 7340-???: ??? code_7340
 - 7386-???: ??? sub_7386
 - 739E-???: ??? code_739E
 - 73AF-???: ??? code_73AF
 - 73B6-???: ??? code_73B6
 - 73B9-???: ??? external entry ??
 - 73BD-???: ??? code_73BD
 - 73CC-???: ??? code_73CC
 - 7400-???: ??? sub_7400
 - 740C-???: ??? code_740C
 - 7439-???: ??? code_7439
 - 7452-???: ??? code_7452
 - 745B-???: ??? code_745B
 - 7488-???: ??? sub_7488
 - 748A-???: ??? code_748A
 - 7492-???: ??? sub_7492
 - 749D-???: ??? sub_749D
 - 74A5-???: ??? code_74A5
 - 74BA-???: ??? code_74BA
 - 74BB-???: ??? sub_74BB
 - 74C6-???: ??? sub_74C6
 - 74CF-???: ??? code_74CF
 - 74D5-???: ??? code_74D5
 - 74DB-???: ??? code_74DB
 - 74E1-???: ??? sub_74E1
 - 74E9-???: ??? code_74E9
 - 74F1-???: ??? code_74F1
 - 74F9-???: ??? code_74F9
 - 74FF-???: ??? code_74FF
 - 7528-???: ??? sub_7528
 - 7544-???: ??? sub_7544
 - 754C-???: ??? code_754C
 - 754F-???: ??? sub_754F
 - 755B-???: ??? code_755B
 - 755E-???: ??? sub_755E
 - 7563-???: ??? sub_7563
 - 756E-???: ??? sub_756E
 - 7579-???: ??? sub_7579
 - 758E-???: ??? sub_758E
 - 75A3-???: ??? sub_75A3
 - 75B6-???: ??? code_75B6
 - 75C4-???: ??? sub_75C4
 - 75D8-???: ??? code_75D8
 - 75E5-???: ??? code_75E5
 - 75EF-???: ??? code_75EF
 - 75F5-???: ??? code_75F5
 - 75F8-???: ??? code_75F8
 - 75F9-???: ??? sub_75F9
 - 7659-???: ??? code_7659
 - 7662-???: ??? code_7662
 - 7669-???: ??? code_7669
 - 766A-???: ??? sub_766A
 - 76A0-???: ??? sub_76A0
 - 76D6-???: ??? sub_76D6
 - 770C-???: ??? sub_770C
 - 7710-???: ??? code_7710
 - 773C-???: ??? sub_773C
 - 7740-???: ??? code_7740
 - 7769-???: ??? sub_7769
 - 7789-???: ??? sub_7789
 - 7795-???: ??? sub_7795
 - 77A3-???: ??? external entry ?? called during combat logic entry ??
 - 77C2-???: ??? code_77C2
 - 77C3-???: ??? external entry ?? called during combat logic exit ??
 - 77EE-???: ??? code_77EE
 - 77EF-???: ??? sub_77EF
 - 780C-???: ??? sub_780C
 - 7817-???: ??? sub_7817
 - 781D-???: ??? code_781D
 - 7823-???: ??? code_7823
 - 7829-???: ??? code_7829
 - 782F-???: ??? code_782F
 - 7830-???: ??? external entry ??
 - 7842-???: ??? code_7842
 - 789E-???: ??? code_789E
 - 7990-???: ??? sub_7990
 - 79A0-???: ??? code_79A0
 - 79B8-???: ??? code_79B8
 - 79DD-???: ??? code_79DD
 - 79EB-???: ??? code_79EB
 - 79EC-???: ??? code_79EC
 - 7A05-???: ??? sub_7A05
   - 7A05-7A0A: Load $7f40[$a1] into X.
   - 7A0B-7A19: Load $2fc8 (cave/dungeon id?) into A, double it
     (making it a word offset from a word index), transfer it to Y,
     and use it to copy the addressed word from 7F44.W[] to $00.W.
   - 7A1A-7A23: If either of $2fde (??) or $2fdf (??) are not zero,
     jump to 7A31 with that value in A.
   - 7A24-7A25: Load $aa (person in area) into A.
   - 7A26-7A2C: If $ae (??) is not zero, subtract 20 ($14) from A.
   - 7A2D-7A30: Decrement A (since person-in-area is 1-based, but
     array indexing is 0-based), and read the A'th byte of the array
     addressed by $00.W into A.
   - 7A31-7A35: Swap X (loaded by 7A05-7A0A) to Y (making it the
     script section), transfer A (loaded by 7A1A-7A23 or 7A2D-7A30) to
     X (making it the script tag), and call $01.405a->?? to display
     the given section and tag.
 - 7A2D-???: ??? code_7A2D
 - 7A31-???: ??? code_7A31
 - 7A36-???: ??? code_7A36
 - 7A3D-7A65: ??? code_7A3D
   - 7A3D-7A43: Loop calling $00.e10a to read the controllers until no
     input (buttons or D-pad) is pressed.
   - 7A44-7A49: Call 77C3 to ??, and $01.5dca to wait for VBlank.
   - 7A4A-7A4F: ??? direct VDP register set ??
   - 7A50-7A5E: Call $01.4014->$12.7000 to ??, $00.e7a6 to ??,
     $01.5dca to wait for VBlank, $00.e5ca to ?? (NPC sprite
     evaluation?), and 7BF4 to ?? (specific NPC effects?).
   - 7A5F-7A65: Clear $2fde (??) and $2fdf (??) to zero, and return.
 - 7A66-7A7D: ???
   - Possibly unreferenced?
   - Sets window parameters and calls $00.ef0a to open a window?
 - 7A7E-???: ??? code_7A7E
 - 7A8D-???: ??? code_7A8D
 - 7A9C-???: ??? sub_7A9C
 - 7AA6-???: ??? code_7AA6
 - 7AF8-???: ??? sub_7AF8
 - 7B18-???: ??? code_7B18
 - 7B2B-???: ??? code_7B2B
 - 7B41-???: ??? sub_7B41
 - 7B5F-???: ??? code_7B5F
 - 7B80-???: ??? sub_7B80
 - 7B92-???: ??? code_7B92
 - 7BAD-???: ??? sub_7BAD ?? adds Scheherazade to the party ??
 - 7BF4-7CA9: ??? sub_7BF4
   - 7BF4-7BF8: If $2fde (??) is not zero, return.
   - 7BF9-7C1B: Dispatch on $2fc8 (cave/dungeon id?).
     - 01: Jump to 7C5C.
     - 02: Jump to 7C1D.
     - 03: Jump to 7C3D.
     - 06: Jump to 7C58.
     - 07: Jump to 7C27.
     - 08: Jump to 7C31.
     - 0B: Jump to 7C9A.
     - 0C: Jump to 7C21.
     - otherwise: Fall through to 7C1C.
   - 7C1C-7C1C: Return.
   - 7C1D-7C20: Call 7BAD to ??, and return.
   - 7C21-7C26: Load $aa (person in area) into A, call 7E2D to ??, and
     return.
   - 7C27-7C2C: If $aa (person in area) is not $07 (??), return.
   - 7C2D-7C30: Call 6D8A to ??, and return.
   - 7C31-7C36: If $aa (person in area) is not $16 (??), jump to 7CA2.
   - 7C37-7C3C: Set $2be3 (??) to $01, and return.
   - 7C3D-7C4C: If $aa (person in area) is not $15 (??), $2c17 (flag,
     set if talked to northeast sage in Mecca) is zero, or $2be4 (??)
     is not zero, return.
   - 7C4D-7C57: Load $aa (person in area, necessarily $15) into A,
     call 7E1D to ??, set $2be4 (??) to $01, and return.
   - 7C58-7C5B: Call 7AF8 to ??, and return.
   - 7C5C-7C60: If $2c14 (flag, set if Omar has been given coffee) is
     zero, return.
   - 7C61-7C68: Set $3e00 (??) to $19 (??) and call $00.f649 to ??
     (sound effect or music change)
   - 7C69-7C6B: Call 73B9 to ??
   - 7C6C-7C76: Set $25a1.W (sprite something??) to $0001 and call
     $00.e5ca to ?? (NPC sprite evaluation?)
   - 7C77-7C99: Map bank $0e to $8000-$9fff, call $01.5d2a to wait for
     VBlank, call $00.e023 to copy the entirety of bank $0e to VRAM
     $5000-$5fff, and return.
   - 7C9A-7CA1: Set $a7 (designated encounter enemy) to $58 (Clay
     Golem?), call 7B80 to ??, and return.
   - 7CA2-7CA9: Set $a7 (designated encounter enemy) to $02
     ("shinkan"? SGKJ gives two entries, looking them up in KPKG gives
     either /Shinto Priest/ or /new publication/book/, and yields the
     additional possibility /new building/wing/), call 7B80 to ??, and
     return.
 - 7CAA-???: ??? sub_7CAA
 - 7CB9-???: ??? code_7CB9
 - 7CC3-???: ??? code_7CC3
 - 7CDB-???: ??? code_7CDB
 - 7CDD-???: ??? code_7CDD
 - 7CE1-???: ??? code_7CE1
 - 7CEB-???: ??? code_7CEB
 - 7CF5-???: ??? code_7CF5
 - 7CF6-???: ??? sub_7CF6
 - 7D01-???: ??? code_7D01
 - 7D02-???: ??? sub_7D02
 - 7D19-???: ??? sub_7D19
 - 7D26-???: ??? code_7D26
 - 7D75-???: ??? sub_7D75
 - 7D96-???: ??? code_7D96
 - 7D97-???: ??? sub_7D97
 - 7DAD-???: ??? code_7DAD
 - 7DED-???: ??? code_7DED
 - 7DF0-???: ??? code_7DF0
 - 7E0C-???: ??? code_7E0C
 - 7E0F-???: ??? code_7E0F
 - 7E1D-???: ??? sub_7E1D
 - 7E1F-???: ??? code_7E1F
 - 7E2D-???: ??? sub_7E2D
 - 7E30-???: ??? code_7E30
 - 7E47-???: ??? code_7E47
 - 7E4C-???: ??? sub_7E4C
 - 7E79-???: ??? code_7E79
 - 7E7F-???: ??? sub_7E7F
 - 7EAC-???: ??? code_7EAC
 - 7EB2-???: ??? sub_7EB2
 - 7ED2-???: ??? code_7ED2
 - 7EF6-???: ??? sub_7EF6
 - 7F07-7F3F: ??? external entry ?? sprite plot fixup
   - Called with $8000-$9fff mapped to bank 05.
   - 7F1D-???: ??? code_7F1D
   - 7F3F-7F3F: Return.
 - 7F40-7F43: Script section IDs, indexed by $a1 (see 7A05).
 - 7F44-7F5B: Pointers to arrays of script tag IDs (see 7A0B).

Bank 05

Largely unexplored, appears to be entirely data, definitely contains palette data.

 - 8000-8BFF: ?? Monster data (96/$60 records, 32/$20 bytes each, see
   $02.7491) ??
   - These are four sets of four words, all encoded sprite pattern and
     attribute data.  Bits 0-10 (mask $07ff) are pattern id / address,
     bit 10 is also Y-flip (and if it's set, pushes the pattern
     address off the end of VRAM?), bit 11 is X-flip, bits 12-15 are
     palette id.
   - These are four rows of four elements of 16x16 tiles.
     Left-to-right, top-to-bottom.
 - 8C00-907F: ?? Monster data (96/$60 records, 12/$0c bytes each, see
   $02.734b) ??
 - 9080-???: Encounter tables, ten ($0a) byte stride?  Spacewise, up
   to 12 ($0c) encounter tables might fit here.
   - These are rows of ten 1-based index values to the monster data
     table at 8C00-907F, see $02.72e8 and $02.734b.
 - 90F8-9137: ?? World map encounter table IDs (see $02.757b) ??
   - The 256x256 position world map is subdivided into 8x8 zones,
     represented here as eight rows of eight columns, each containing
     a byte of data.
   - Values attested are 0, 2, 3, 5, 6, 7, 8, and 9.
 - 9138-???: Dungeon/cave encounter table IDs (see $02.757b) ??
   - The first four values are 1, 4, $0a, and $0b.  Subsequent values
     fail to fit within the space available for encounter tables at
     9080, suggesting that this region is 9138-913B, and a new region
     starts at 913C running to 9140?
 - 9141-9340: ?? Copied to VRAM $1100 (see $02.60e0) ??
   - Monster sprite data template?
 - 9341-???: Town/palace/oasis NPC/sprite data pointers (see $01.53dd) ??
 - 9361-???: Dungeon/cave NPC/sprite data pointers (see $01.53c2) ??
 - 937D-937E: Pointer to world NPC/sprite data.
 - 937F-93B7: World NPC/sprite data.
   - 937F-937F: Number of sprites (seven).
   - 9380-9387: World sprite $01 (??).
   - 9388-938F: World sprite $02 (??).
   - 9390-9397: World sprite $03 (??).
   - 9398-939F: World sprite $04 (??).
   - 93A0-93A7: World sprite $05 (??).
   - 93A8-93AF: World sprite $06 (??).
   - 93B0-93B7: World sprite $07 (??).
 - 93B8-9458: Baghdad area NPC/sprite data.
 - 9459-9B03: ?? various town and dungeon area NPC/sprite data ??
 - 9B04-???: ??? area NPC/sprite data ?? semantics seem to break down
   a bit here ??
 - 9B52-9BF1: ?? copied to $3A00 (see $04.7830) ??
 - 9C00-9DFF: BG palette data (used for entire game, modulo
   fade-in/fade-out?).
 - 9E00-9FFF: SP palette data (used for entire game?).

Bank 06

Appears to be entirely data. Almost certainly entirely audio driver data.

Bank 07

This bank, aside from the data block, appears to be primarily about dealing with the tennokoe 2 and related save mechanisms (CD system, Backup Booster, Backup Booster II).

 - C000-D7FF: ??? data of some sort?  Almost certainly audio driver
   data.
 - D800-D84E: ???
 - D84F-D87F: ???
 - D880-D8B6: ???
 - D8B7-D908: ??? A string of three bulk copies?
 - D909-D95A: ??? A string of three bulk copies?
 - D95B-D960: ??? Three pointers to twelve-byte... filenames?
 - D961-D96C: "\0\0SIND1.AI  " Save filename 1.
 - D96D-D978: "\0\0SIND2.AI  " Save filename 2.
 - D979-D984: "\0\0SIND3.AI  " Save filename 3.
 - D985-D98A: ??? Three pointers to RAM space ???
 - D98B-D98E: ??? Entry trampoline for $D9BC ??
 - D98F-D99C: ?? $2fec.W = 0xd9b1; $d9de(); ??
 - D99D-D9A0: ??? Unused (dead) entry trampoline for $DA53 ??
 - D9A1-D9A4: ??? Trampoline for $DA88 ??
 - D9A5-D9A8: ??? Trampoline for $DB17 ??
 - D9A9-D9AC: ??? Entry trampoline for $DC7B ??
 - D9AD-D9B0: ??? Entry trampoline for $DCD7 ??
 - D9B1-D9BB: "!BM FORMAT!"
 - D9BC-D9DD: Backup presence check.  Unlocks, saves $8000, stores $aa
   into $8000, reads it back, relocks and returns with $ff if it isn't
   still $aa, tries again with $55, stores the original value from
   $8000 back, relocks and returns with $00.
 - D9DE-D9F6: Backup memory format.  Unlocks, compares eleven ($0b)
   bytes from ($2fec) to those at $da48 (format key check), relocking
   and returning with $02 if the format key is invalid.
 - D9F7-DA1A: Size backup memory.  Set $00.W to $8000, a $20 page
   limit in X (keeping it to a single bank).  For each byte in
   $8000-$9fff, store $aa and read back, store $55 and read back,
   exiting to $DA1B if a readback fails, store $00, and fall through
   to $DA1B after all $2000 bytes have been tested.
 - DA1B-DA3D: Store address of first byte not part of backup memory
   (first address that failed testing or $a000 if all addresses were
   valid) to $8004.W.  If fewer than 256 ($100) bytes (one page)
   passed testing, relock and return with $ff.  Store $8010 to
   $8006.W.  Zero $8010.W.  Copy four-byte formatted-memory signature
   from $DA44 to $8000.  Fall through to $DA3E.
 - DA3E-DA40: Relock and return with $00.
 - DA41-DA43: Relock and return with $02.
 - DA44-DA47: "HUBM" formatted-memory signature.
 - DA48-DA52: "!BM FORMAT!" format key.
 - DA53-DA6E: ???
 - DA6F-DA70: Jump to $DA3E to relock and return with $00.
 - DA71-DA87: ???
 - DA88-DAB9: ???
 - DABA-DABC: Relock and return with $01.
 - DABD-DABF: Relock and return with $02.
 - DAC0-DAD4: ??? Copies $2fee-$2ff1 to $02-$05 ??
 - DAD5-DB0B: ??? Math $2ff0-$2ff2 into $00-$03, C set on error, may set Y = 1 ??
 - DB0C-DB16: ??? Compare $01.W to ($06).W ??
 - DB17-DB31: ???
 - DB32-DB34: Relock and return with $04.
 - DB35-DB37: Relock and return with $00.
 - DB38-DBC0: ???
 - DBC1-DBC2: ???
 - DBC3-DBD3: ???
 - DBD4-DBD6: Relock and return with $00.
 - DBD7-DBD9: Relock and return with $02.
 - DBDA-DBE7: ???
 - DBE8-DC0D: ???
 - DC0E-DC77: ???
 - DC78-DC7A: Relock and return with $04.
 - DC7B-DCAD: ???
 - DCAE-DCB0: Relock and return with $00.
 - DCB1-DCC1: ???
 - DCC2-DCD3: ???
 - DCD4-DCD6: Relock and return with $01.
 - DCD7-DD22: ???
 - DD23-DD25: Relock and return with $01.
 - DD26-DD57: ???
 - DD58-DD68: ??? Increase $06.W by ($06).W ??
 - DD69-DD9B: ???
 - DD9C-DDE7: ???
 - DDE8-DE08: Battery memory unlock.  Pushes Phlags (I flag state), X,
   Y, disables IRQs, pushes, MPR4 ($8000-$9fff).  Maps bank $f7 to
   $8000-$9fff.  Changes to low-speed operation (apparently the backup
   RAM is a much slower part, so the CPU has to run slow while it's
   enabled).  Sends the 3-byte unlock sequence.  Pushes a copy of the
   return address to the stack, and returns to it.  Net stack effect,
   six extra bytes.
 - DE09-DE0B: Tennokoe2(?) unlock sequence.  This is "Hu" and $80, the
   last of which is sufficient to unlock the CD system backup memory,
   but not to unlock the tennokoe2.
 - DE0C-DE0E: ?? Backup memory lock, result code $00 ??
 - DE0F-DE12: ?? Backup memory lock, result code $01 ??
 - DE13-DE16: ?? Backup memory lock, result code $02 ??
 - DE17-DE1A: ?? Backup memory lock, result code $03 ??
 - DE1B-DE1E: ?? Backup memory lock, result code $04 ??
 - DE1F-DE20: ?? Backup memory lock, result code $FF ??
 - DE21-DE36: Backup memory lock.  Result code in Y on entry.  Must
   always be tail-called.  Pops MPR4 ($8000-$9fff).  Reads the CD
   status register (locking the backup memory).  Changes to high-speed
   operation (because there's no longer a need to go slow).  Moves the
   result code to A.  Pops Y.  Saves the result code over the last
   byte of the original return address to $dee8.  Pops X, Phlags, and
   A twice (the original return address to $dee8 and the result code),
   then returns.
 - DE37-DE80: ???
 - DE81-DE93: ???
 - DE94-EFFF: Padding (all $FF bytes).

Bank 08

This bank contains the script font and most of the logic to do with world map interaction, including the toplevel loop and tile animation.

 - 6000-75FF: Script font (including hiragana, katakana, digits, latin
   majuscules, punctuation, box-drawing, ???).
 - 7600-???: ??? external entry ?? world map toplevel handler ??
   - 7600-7605: Call $01.5188 to select the area BGM, and $01.51e2 to
     select the area map.
   - 7606-7609: Map bank #$0d to $8000-$9fff.
   - 760A-7624: Copy $8000-$9fff to VRAM $6000-$6fff.
   - 7625-7630: If $b1 (??) is not zero, set $4e.W to #$0004.
     - Or is this $4e to #$04 and $4f to #$00 ??
   - 7631-7672: ??? more initialization ??
   - 7673-7675: Call $00.e10a to read the controller.
   - 7676-7685: ???
   - 7686-76A9: Dispatch on $10 (first controller current input).
     - If bit 4 (UP) is set, jump to 771D.
     - If bit 6 (DOWN) is set, jump to 7737.
     - If bit 7 (LEFT) is set, jump to 7751.
     - If bit 5 (RIGHT) is set, jump to 776B.
     - If bit 0 (I) is set, jump to 7785.
     - If bit 2 (SELECT) is set, jump to 779A.
     - Otherwise, fall through to 76AA.
   - 76AA-76AE: Set $2c0a (??) to #$01.
   - 76AF-76B3: Call $01.5de3 to delay for #$05 short whiles.
   - 76B4-???: ???
 - 77B8-???: ???
   - 77B8-77C2: Call $01.5262 to ??, call $01.52bb to find an NPC
     sprite (invariably a boat sprite, in this case) in the world,
     jumping to 7856 if one is found.
   - 77C3-77D5: Call $01.5c53 to check for BG tile collision using
     tile vector at 7B36 (??), jumping to 785A if a collision is
     found.
   - 77D6-77E8: Call $01.5c53 to check for BG tile collision using
     tile vector at 7B76 (??), jumping to 7963 if a collision is
     found.
   - 77E9-77FB: Call $01.5c53 to check for BG tile collision using
     tile vector at 7B86 (??), jumping to 79CC if a collision is
     found.
   - 77FC-780E: Call $01.5c53 to check for BG tile collision using
     tile vector at 7B8D (??), jumping to 7A12 if a collision is
     found.
   - 780F-7821: Call $01.5c53 to check for BG tile collision using
     tile vector at 7B8F (??), jumping to 7A36 if a collision is
     found.
   - 7822-7834: Call $01.5c53 to check for BG tile collision using
     tile vector at 7B91 (??), jumping to 7A60 if a collision is
     found.
   - 7835-7847: Call $01.5c53 to check for BG tile collision using
     tile vector at 7BE4 (??), jumping to 7A52 if a collision is
     found.
   - 7848-7855: Set $99 (encounter type??) to $2c4f (??), set $2c47
     (??) to zero, set $2c0a (??) to #$01, and return.
   - 7856-7859: Call $01.442b->$47.765d to ??, and return.
 - 79D2-???: ??? external entry ??
 - 7A12-7A25: ???
   - 7A12-7A16: If $2c26 (??) is zero, jump to 7A25.
   - 7A17-7A1B: If $2c10 (game won?) is not zero, jump to 7A41.
   - 7A1C-7A24: Set $2c0a (??) to #$01, set $2c47 (??) to zero, and
     return.
   - 7A25-7A2A: Set $2c0a (??) to zero, and call $01.4b09 to ??
   - 7A2B-7A2D: Call $5b97 to open the dialogue window.
   - 7A2E-7A25: Display section 11, tag 18 (trying to head across the
     bridge to Basra before talking to the king), and return.
 - 7A36-???: ???
   - 7A36-7A3A: If $2c10 (game won?) is not zero, jump to 7A41.
   - 7A3B-7A40: Set $2c0a (??) to zero, and return.
 - 7A41-7A51: ???
   - 7A41-7A46: Set $2c0a (??) to zero, and call $01.4b09 to ??
   - 7A47-7A49: Call $5b97 to open the dialogue window.
   - 7A4A-7A51: Display section 11, tag 19 (??), and return.
 - 7A52-???: ???
 - 7A69-7AE0: ??? Check for collision between current map position and
   counted-list of coordinate pairs in YX ??
   - This routine appears to have a bug, 7AB2-7AB8 should probably
     jump to 7ACA rather than 7ABD.
   - 7A69-7A6C: Store YX in $02.W.
   - 7A6D-7A86: Load byte addressed by $02.W, postincrementing $02.W.
   - 7A87-7A87: Push A (loop counter) to stack.
   - 7A88-7A92: Read byte addressed by $02.W.
   - 7A93-7A99: Subtract $ac (??) from the value loaded by 7A88-7A92,
     and compare to $48 (??).  If they differ, jump to 7ABD.
   - 7A9A-7AA6: Increment $02.W.
   - 7AA7-7AB1: Read byte addressed by $02.W.
   - 7AB2-7AB8: Subtract $ad (??) from the value loaded by 7AA7-7AB1,
     and compare to $49 (??).  If they differ, jump to 7ABD.
   - 7AB9-7ABC: Pull A from the stack, load A with #$01, and return.
   - 7ABD-7AD6: Increment $02.W, twice.
   - 7AD7-7ADD: Pull A from the stack, decrement it, and jump to 7A87
     if it is not zero.
   - 7ADE-7AE0: Load A with #$00, and return.
 - 7AE1-7BF6: ??? Data region, looks to be coordinate set arrays and
   tileset arrays ??
 - 7BF7-7DC9: Update (world-map-only?) tile animations.
   - 7BF7-7C09: Dispatch based on frame ID.
   - 7C0A-7C79: Frame 3 handler, copy tile data from RAM to VRAM for
     animated tiles, zero the frame counter, return to caller.
   - 7C7A-7CE9: Frame 2 handler, copy tile data from RAM to VRAM for
     animated tiles, increment the frame counter, return to caller.
   - 7CEA-7D59: Frame 1 handler, copy tile data from RAM to VRAM for
     animated tiles, increment the frame counter, return to caller.
   - 7D5A-7DC9: Frame 0 handler, copy tile data from RAM to VRAM for
     animated tiles, increment the frame counter, return to caller.
 - 7DCA-7E96: Build animation frames for world tile animations.
   - 7DCA-7DE9: Copy world map tiles $12-$13 to $2700-$273f, and
     mirrored through to $27ff.
   - 7DEA-7E05: Copy world map tiles $6d-$6e to $2800-$283f, and
     mirrored through to $38ff.
   - 7E06-7E08: Loop head, four iterations.
   - 7E09-7E1B: ???
   - 7E1C-7E2E: ???
   - 7E2F-7E35: Loop tail.
   - 7E36-7E38: Loop head, eight iterations.
   - 7E39-7E4B: ???
   - 7E4C-7E5E: ???
   - 7E5F-7E65: Loop tail.
   - 7E66-7E68: Loop head, twelve iterations.
   - 7E69-7E7B: ???
   - 7E7C-7E8E: ???
   - 7E8F-7E95: Loop tail.
   - 7E96-7E96: Return.
 - 7E97-7FFF: ?? Padding (one leading $FF byte, the rest $00 bytes)??

Bank 09

World map ("map 0") graphics tile data, loads to VRAM $3000-$3fff.

Bank 0a

"Outdoor" (palace, city, town, oasis, and the like) map ("map 1") graphics tile data, loads to VRAM $3000-$3fff.

Bank 0b

"Indoor" (cave, dungeon, and the like) map ("map 2") graphics tile data, loads to VRAM $3000-$3fff.

Bank 0c

Unknown, but loads to VRAM $3000-$3fff (see $12.783d, $41.70d0).

Bank 0d

NPC character sprites, loads to VRAM $6000-$6fff (see $02.607a, $04.67E8, $08.7606, $41.73d5, $45.71d7).

Bank 0e

PC and NPC character sprites, loads to VRAM $5000-$5fff (see $02.605b, $03.6e90, $04.7c77, but also $04.7400).

Very possibly party character (and other?) sprite bitmaps.

Bank 0f

Monster (sprite) graphics. See $02.74d9. Loads to VRAM $3000-$3fff.

Bank 10

Monster (sprite) graphics. See $02.74e0. Loads to VRAM $4000-$4fff.

Bank 11

Monster (sprite) graphics, plus two tiles of overlay sprites used in certain map2 areas (tied-up Scheherazade and a floor patch to remove Cherubim from one map where he appears). See $01.47b5, $02.74e7. Loads to VRAM $5000-$5fff, but also parts are copied elsewhere in VRAM??

Bank 12

This bank seems to be primarily about area map handling.

 - 6000-67FF: Half-depth tile data, loads to VRAM $4000 (see 79D6)?
 - 6800-6FFF: Half-depth tile data, loads to VRAM $4000 (see 79E4)?
 - 7000-7025: ?? set up $2F42-$2F43 based on $48-$49, $2F44-$2F47
   based on constants, call $4046->$70B8 ?? external entry ??
 - 7026-7049: ?? set up $2F42-$2F43 based on $48-$49, $2F44-$2F47
   based on constants, call $4046->$70B8 ?? external entry ??
 - 704A-706E: ?? set up $2F42-$2F43 based on $48-$49, $2F44-$2F47
   based on constants, call $4046->$70B8 ?? external entry ??
 - 706F-7092: ?? set up $2F42-$2F43 based on $48-$49, $2F44-$2F47
   based on constants, call $4046->$70B8 ?? external entry ??
 - 7093-70B7: ?? set up $2F42-$2F43 based on $48-$49, $2F44-$2F47
   based on constants, call $4046->$70B8 ?? external entry ??
 - 70B8-7105: ??? external entry ??
 - 7106-7152: Write $2f44 tiles to VRAM to screen position X,Y with
   high byte from $a6, low byte from $2f4c (if non-zero) or ($2f40),
   incrementing $2f40 by $2f44 either way. external entry ??
 - 7153-176F: ???
 - 7170-7184: Main script display entry, (binary) entry tag in X,
   script table index in Y.  Set search pointer $9b.W to pointer Y
   from start of bank $14, move entry tag to A, fall through to $7185.
 - 7185-71E5: Convert binary in A to packed BCD, fall through to
   $71e6.
 - 71E6-7200: Convert packed BCD in A to font-charset digits in YX,
   store #$FA in $9D, call $01.4064->$12.7201 to find the relevant
   script entry, then $00.EAB6 to display it.
 - 7201-7299: Search for script tag in YX, starting at script location
   $9B.W, returning start of entry in $54.W.  Will infinite-loop if
   tag not found. external entry ??
 - 729A-72D6: ??? external entry ?? Party sprite facing-and-animation
   computation?
   - Parameters: Sprite facing in X, base tile ID in A.
   - Returns: Adjusted tile ID in A, tile attributes in YX.
   - 729A-72B4: Push A on the stack, stash X in $00 and dispatch on
     its high nybble to $72b5, $72bb, $72be, or $72c4.
   - 72B5-72BA: If no high bits of X were set, or if bit 4 ($10) was
     set.  Pull A from the stack, add 4, and branch to $72c8.
   - 72BB-72BD: If bit 6 ($40) of X was set and bit 4 was clear.  Pull
     A from the stack and branch to $72c8.
   - 72BE-72C3: If bit 7 ($80) of X was set and bits 4 and 6 were
     clear.  Pull A from the stack, add 12 ($0c), and branch to $72c8.
   - 72C4-72C7: If bit 5 ($20) of X was set and bits 4, 6, and 7 were
     clear.  Pull A from the stack, add 8, and fall through to $72c8.
   - 72C8-72D0: Push A to the stack.  Load YX with #$0080 (priority
     over BG, palette 0, no other flags), respectively.  If $80 is
     nonzero, branch to $72d3.
   - 72D1-72D2: Pull A from the stack and return.
   - 72D3-72D6: Pull A from the stack, increment it by 2, and return.
 - 72D7-7321: ??? Manipulation of $2f4d.W? external entry ??
   - From context elsewhere, this appears to be an RNG, returning a
     value in A.
 - 7322-732C: ??? Set $2f4d... twice? external entry ??
   - Slightly botched RNG seed initialization?
 - 732D-7386: ??? Some sort of VRAM update using the $e984/$e9b2
   mechanism? external entry ??
   - Clear screen to text tile #$00.
 - 7387-738C: ??? external entry ??
 - 738D-73BA: ??? dead code ??
 - 73BB-7586: ??? Long, repetitive code of some sort.  Much
   shift/rotate.  Open-coded loop, maybe?  Possibly decimal formatting
   routine? (writes to $65-$6a)
 - 7587-759A: ??? Reformat unpacked BCD in $65-$6a as tile ids??
   external entry ??
 - 759B-75A2: ??? external entry ??
 - 75A3-75A8: ??? writes to VRAM?? external entry ??
 - 75A9-75AE: ??? writes to VRAM? external entry ??
 - 75AF-75F1: ??? processes $65-$69 to VRAM?? external entry ??
 - 75F2-7600: Delay loop of some sort? external entry ??
 - 7601-789C external entry ??
   - This is clearly the end-game, epilogue, and credits, followed by
     a reset-to-title.
   - 7601-7607: Display script section 22, tag 2.
   - 7608-???: ???
   - 7681-7687: Load address $7c85 into YX and call $00.e831 to ??
     - Sprite motion control?
   - 7688-7691: Open a dialogue window and display script section 22,
     tag 60.
   - 7691-???: ???
   - 7787-778E: Display script section 20, tag stored in $2fe5.
   - 778F-???: ???
   - 77C1-77C8: Display script section 19, tag stored in $2fe5.
   - 77C8-???: ???
   - 789A-789C: Jump to $00.e000, the power-on reset entry point.
 - 789D-78AA: ??? Fades in a particular palette?
 - 78AB-78B8: ??? Fades out a particular palette?
 - 78B9-78C6: ??? Fades in a particular palette?
 - 78C7-78D4: ??? Fades out a particular palette?
 - 78D5-???
 - 79D6-79E3: ??? Map bank $12 to $8000-$9fff, $00.W = 0x8000, branch
   to 79F0.
 - 79E4-79EF: ??? Map bank $12 to $8000-$9fff, $00.W = 0x8800, fall
   through to 79F0.
 - 79F0-7A39: ??? Load a bunch of half-depth tiles (128 tiles?) from
   $00.W to VRAM $4000 ??
 - 7C2D-7C3C: ??? Copies 7C3D-7C5C as background palette 4 ??
 - 7C3D-7C5C: Background palette data ??
 - 7C5D-7C92: ??? data for $01.e831, see 7681-7687 ??
 - 7C93-7CFF: ??? refers to 7D00 by split immediate pointer ??
   external entry ??
   - Recomputes the party's level from its experience points.
 - 7D00-7D61: ??? data ??
 - 7D62-7FFF: Padding (all $FF bytes).

Bank 13

For the most part, NPC speech interaction logic. Mapping from area and NPC ID to behavior, including straight script section display, done entirely in code. Palace guards and inn and shop keepers have dedicated entry points separate from the usual logic. And there's some sort of tile map for a fixed image display at the end.

Notably, none of the cave/dungeon NPC interaction is here.

 - 6000-6013: ??? external entry ??
 - 6014-607A: ??? dispatch on $a0 (area id?) ??
   - $00: jump to 607B.
   - $01: jump to 6386.
   - $02: jump to 6576.
   - $03: jump to 6757.
   - $04: jump to 68AD.
   - $05: jump to 6A0F.
   - $06: jump to 6AA2.
   - $07: jump to 6C6C.
   - $08: jump to 6D51.
   - $09: jump to 6EC6.
   - $0A: jump to 70D3.
   - $0B: not checked.
   - $0C: jump to 7178.
   - $0D: jump to 76A1.
   - $0E: jump to 7947.
   - default ($0F, but also $0B and anything $10 or higher): jump to
     7A25.
 - 607B-6108: ??? dispatch on $aa (person in area?) for Baghdad ??
   - $01: jump to 610A.
   - $02: jump to 612C.
   - $03: jump to 616E.
   - $04: jump to 6176.
   - $05: jump to 61A5.
   - $06: jump to 61D4.
   - $07: jump to 6203.
   - $08: jump to 6204.
   - $09: jump to 620C.
   - $0A: jump to 620D.
   - $0B: jump to 623C.
   - $0C: jump to 625E.
   - $0D: jump to 6266.
   - $0E: jump to 626E.
   - $0F: jump to 6290.
   - $10: jump to 6291.
   - $11: jump to 630E.
   - $12: jump to 6352.
   - $13: jump to 6356.
   - $14: jump to 6357.
   - default: return.
 - 610A-612B: ??? Baghdad, interaction with mother.
   - 610A-6113: dispatch on $2c11 (saved princess twice flag?) and
     $2c10 (??)
   - 6114-611B: Display section 1, tag 3 (mother, unknown
     circumstances), and return.
   - 611C-6123: Display section 1, tag 2 (mother, after saving the
     princess a second time), and return.
   - 6124-612B: Display section 1, tag 1 (mother, at start of game),
     and return.
 - 612C-616D: ??? display section 1, tag 4 (Ali Baba, as you try to
   leave home), a lot subsequent logic to deal with adding Ali Baba to
   the party ??
 - 616E-6175: Display section 1, tag 70 (something father says), and
   return.
 - 6176-61A4: ??? Baghdad, interaction with woman hiding in trees in
   the northeast.
   - 6176-6184: dispatch on $2c15 (saved princess once flag?), $2c11
     (saved princess twice flag?), and $2c10 (??)
   - 6185-616C: Display section 1, tag 33 (??), and return.
   - 618D-6194: Display section 1, tag 32 (tree-hiding person, after
     saving the princess a second time), and return.
   - 6195-619C: Display section 1, tag 31 (tree-hiding person, after
     saving the princess once), and return.
   - 619D-61A4: Display section 1, tag 30 (tree-hiding person, before
     saving the princess), and return.
 - 61A5-61D3: ??? Baghdad, interaction with man along east wall of
   home.
   - 61A5-61B3: dispatch on $2c15 (saved princess once flag?), $2c11
     (saved princess twice flag?), and $2c10 (??)
   - 61B4-61BB: Display section 1, tag 26 (??), and return.
   - 61BC-61C3: Display section 1, tag 25 (east-wall-of-home man,
     after saving the princess a second time), and return.
   - 61C4-61CB: Display section 1, tag 24 (east-wall-of-home man,
     after saving the princess once), and return.
   - 61CC-61D3: Display section 1, tag 23 (east-wall-of-home man,
     before saving the princess), and return.
 - 61D4-6202: ??? Baghdad, interaction with person on the northwest
   side of the pool south of home.
   - 61D4-61E2: dispatch on $2c15 (saved princess once flag?), $2c11
     (saved princess twice flag?), and $2c10 (??)
   - 61E3-61EA: Display section 1, tag 43 (??), and return.
   - 61EB-61F2: Display section 1, tag 42 (northwest-of-south-pool
     person, after saving the princess a second time), and return.
   - 61F3-61FA: Display section 1, tag 41 (northwest-of-south-pool
     person, after saving the princess once), and return.
   - 61FB-6202: Display section 1, tag 40 (northwest-of-south-pool
     person, before saving the princess), and return.
 - 6203-6203: Return.
   - Odd thing to have an explicit dispatch for?
 - 6204-620B: Display section 1, tag 44 (person on southeast side of
   pool south of home), and return.
 - 620C-620C: Return.
   - Odd thing to have an explicit dispatch for?
 - 620D-623B: ??? Baghdad, interaction with person on the east side of
   the pool east of home.
   - 620D-621B: dispatch on $2c15 (saved princess once flag?), $2c11
     (saved princess twice flag?), and $2c10 (??)
   - 621C-6223: Display section 1, tag 37 (??), and return.
   - 6224-622B: Display section 1, tag 36 (east-of-east-pool person,
     after saving the princess a second time), and return.
   - 622C-6233: Display section 1, tag 35 (east-of-east-pool person,
     after saving the princess once), and return.
   - 6234-623B: Display section 1, tag 34 (east-of-east-pool person,
     before saving the princess), and return.
 - 623C-625D: ??? Baghdad, interaction with Omar.
   - 623C-6243: Dispatch on $2c13 (seen Aladdin enter the bandit cave
     flag?)  and $2c14 (Omar has been caffienated flag?)
   - 6244-624D: Display section 1, tag 52 (Omar, once given coffee,
     before saving the princess), and return.
   - 624E-6255: Display section 1, tag 51 (Omar, after seeing someone
     enter the bandit cave door), and return.
   - 6256-625D: Display section 1, tag 12 (Omar, before visiting
     bandit cave), and return.
 - 625E-6265: Display section 1, tag 39 (person in upper-left of bar),
   and return.
 - 6266-626D: Display section 1, tag 38 (person in lower-left of bar),
   and return.
 - 626E-628F: ??? Baghdad, interaction with person in upper-right of
   bar.
   - 626E-6277: Dispatch on $2c11 (saved princess twice flag?) and
     $2c10 (??)
   - 6278-627F: Display section 1, tag 29 (??), and return.
   - 6280-6287: Display section 1, tag 28 (person in upper-right of
     bar, after saving the princess a second time), and return.
   - 6288-628F: Display section 1, tag 27 (person in upper-right of bar,
     before saving the princess a second time), and return.
 - 6290-6290: Return.
   - Odd thing to have an explicit dispatch for?
 - 6291-???: ??? Baghdad, interaction with Gorotsuki(?) northwest and
   south of Hasan.
   - 6291-6295: If $2c12 (??) is zero, jump to 629E.
   - 6296-629D: Display section 1, tag 71 (Gorotsuki(?), after being
     paid off), and return.
   - 629E-62A4: Display section 1, tag 8 (Gorotsuki(?), before being
     paid off).
   - 62A5-62AC: ??? change BGM / play sound effect ??
   - 62AD-62AF: Call $01.424f->??? to display current party gold.
   - 62B0-62B3: Call $01.422c->??? to run indexed menu $00 (yes/no),
     doing ?? with the return value, and then push the returned value
     to the stack.
   - 62B4-62B6: Call $01.5b97 to reopen the dialogue window.
   - 62B7-62B9: Pull the menu result (from 62B0) from the stack, and
     jump to 6306 if it is non-zero. ??
   - 62BA-62D0: If $22a3.W (party gold) is at least 50, jump to 62D9.
   - 62D1-62D8: Display section 1, tag 10 (Gorotsuki(?), when you try
     to pay him off but don't have enough money), and return.
   - 62D9-62DF: Display section 1, tag 9 (Gorotsuki(?), when paying
     him off).
   - 62E0-62FC: Subtract 50 from $22a2.W (party gold).
   - 62FD-62FF: Call $01.424f->??? to display current party gold.
   - 6300-6305: Set $2c12 (??) to #$01, and return.
   - 6306-630D: Display section 1, tag 11 (Gorotsuki(?), after
     refusing to pay him off), and return.
 - 630E-6351: ??? code_630E
   - 630E-6312: ???
   - 6313-6319: Display section 1, tag 6 (Hasan, after paying off
     Gorotsuki(?)).
   - 631A-???: ???
   - 6324-???: ???
   - 6334-???: ???
   - 634A-6351: Display section 1, tag 5 (Hasan, before paying off
     Gorotsuki(?)), and return.
 - 6352-6355: ??? call 6291 to run Baghdad's Gorotsuki(?) interaction,
   and return.
 - 6356-6356: Return.
   - Odd thing to have an explicit dispatch for?
 - 6357-6385: ??? Baghdad, interaction with the man outside the
   southeast corner of the bar.
   - 6357-6365: Dispatch on $2c15 (saved princess once flag?), $2c11
     (saved princess twice flag?), and $2c10 (??)
   - 6366-636D: Display section 1, tag 22 (??), and return.
   - 636E-6375: Display section 1, tag 21 (man outside bar southeast,
     after saving the princess a second time), and return.
   - 6376-637D: Display section 1, tag 20 (man outside bar southeast,
     after saving the princess once), and return.
   - 637E-6385: Display section 1, tag 19 (man outside bar southeast,
     before saving the princess), and return.
 - 6386-63CE: ??? dispatch on $aa (person in area?) for Basra ??
   - $01: jump to 63CF.
   - $02: jump to 63D7.
   - $03: jump to 63DF.
   - $04: jump to 644C.
   - $05: jump to 651D.
   - $06: not checked.
   - $07: jump to 654E.
   - $08: jump to 6556.
   - $09: jump to 655E.
   - $0A: jump to 6566.
   - $0B: jump to 656E.
   - default: return.
 - 63CF-63D6: Display section 11, tag 16 (Basra, sage in northwest
   building), and return.
 - 63D7-63DE: Display section 11, tag 8 (Basra, woman in mid-north of
   town), and return.
 - 63DF-644B: ??? Basra, interaction with the woman in the northeast
   building.
   - 63DF-63E3: If $2c11 (saved princess twice flag?) is zero, jump
     to 6444.
   - 63E4-63F9: Call $01.5bab to see if ?? (spell 4 is in
     Scheherazade's spell table?), jumping to 6403 if it...  isn't?
   - 63FB-6402: Display section 11, tag 11 (woman in northeast
     building, after saving the princess again, subsequent visits),
     and return.
   - 6403-6409: Display section 11, tag 10 (woman in northeast
     building, after saving the princess again, first visit).
   - 640A-6411: ??? Sound effect/BGM command ??
   - 6412-6418: Display section 11, tag 17 (the princess learns a
     spell).
   - 6419-641E: ??? Wait for music trill to complete, then restore
     area BGM ??
   - 641F-6433: Call $01.5bab to ?? (find an empty spot in
     Scheherazade's spell table?)
   - 6434-6443: Store #$04 to the location found by 641F-6433, and
     return.
   - 6444-644B: Display section 11, tag 9 (woman in northeast
     building, before saving the princess a second time), and return.
 - 644C-651C: ??? Basra, interaction with man in west side building?
   - 6454-???: ??? code_6454
   - 645C-???: ??? code_645C
   - 647F-???: ??? code_647F
   - 6495-???: ??? code_6495
   - 64A4-???: ??? code_64A4
   - 64DB-???: ??? code_64DB
   - 64E5-???: ??? code_64E5
   - 6511-???: ??? code_6511
   - 6515-???: ??? code_6515
 - 651D-654D: ??? Basra, interaction with Hasan.
   - 651D-6521: Set $2c29 (??) to #$01 ??
   - 6522-6526: If $2c22 (Hasan Sea Chart flag) is non-zero, jump
     to 6546.
   - 6527-652D: Call $01.5be0 to see if item #$0a (the Sea Chart) is
     in anyone's inventory, jumping to 653E if it is not ??
   - 652E-6532: Set $2c22 (Hasan Sea Chart flag) to #$01.
   - 6533-6535: Call $01.5e13 to ?? (remove the Sea Chart from
     inventory?)
   - 6536-653D: Display section 11, tag 15 (Hasan, once you have the
     Sea Chart), and return.
   - 653E-6545: Display section 11, tag 14 (Hasan, after Goku joins,
     before having the Sea Chart), and return.
   - 6546-654D: Display section 11, tag 15 (Hasan, once you have the
     Sea Chart), and return.
 - 654E-6555: Display section 11, tag 7 (Basra, woman northwest of
   elephant), and return.
 - 6556-655D: Display section 11, tag 6 (Basra, elephant), and return.
 - 655E-6565: Display section 11, tag 5 (Basra, man west of elephant),
   and return.
 - 6566-656D: Display section 11, tag 3 (Basra, man just west of
   entrance), and return.
 - 656E-6575: Display section 11, tag 4 (Basra, man next to inn), and
   return.
 - 6576-65BE: ??? dispatch on $aa (person in area?) for Mecca ??
   - $01: jump to 65BF.
   - $02: jump to 66A2.
   - $03: jump to 66AA.
   - $04: not checked.
   - $05: jump to 671F.
   - $06: not checked.
   - $07: not checked.
   - $08: jump to 6727.
   - $09: jump to 672F.
   - $0A: jump to 6737.
   - $0B: jump to 673F.
   - $0C: jump to 6747.
   - $0D: jump to 674F.
   - default: return.
 - 65BF-66A1: ??? Mecca, interaction with sage in northwest corner.
   - 65BF-65D5: Call $01.5bab to see if ?? (spell 1 is in Sinbad's
     spell table?), jumping to 65FC if it...  isn't?
   - 65D6-65DC: Jump to 65F4 if $2240 (Scheherazade party status) is
     #$ff (not in party).
   - 65DD-65F3: Call $01.5bab to see if ?? (spell 1 is in
     Scheherazade's spell table?), jumping to 6661 if it...  isn't?
   - 65F4-65FB: Display section 4, tag 3 (Mecca, sage in northwest,
     subsequent visits), and return.
   - 65FC-6602: Display section 4, tag 2 (Mecca, sage in northwest, on
     first visit and first visit after saving the princess again).
   - 6603-660A: ??? change BGM / play sound effect ??
   - 660B-6611: Display section 4, tag 13 (Mecca, immediately
     following tag 2, first visit).
   - 6612-6617: ??? Wait for music trill to complete, then restore
     area BGM ??
   - 6618-662C: Call $01.5bab to find an empty spot in Sinbad's spell
     table.
   - 662D-663B: Store #$01 (エリクス spell) in the empty spot in
     Sinbad's spell table.
   - 663C-6650: Call $01.5bab to find an empty spot in Ali Baba's
     spell table.
   - 6651-6660: Store #$01 (エリクス spell) in the empty spot in Ali
     Baba's spell table, and return.
   - 6661-6667: Display section 4, tag 2 (Mecca, sage in northwest, on
     first visit and first visit after saving the princess again).
   - 6668-666F: ??? change BGM / play sound effect ??
   - 6670-6676: Display section 4, tag 14 (Mecca, immediately
     following tag 2, second visit).
   - 6677-667C: ??? Wait for music trill to complete, then restore
     area BGM ??
   - 667D-6691: Call $01.5bab to find an empty spot in Scheherazade's
     spell table.
   - 6692-66A1: Store #$01 (エリクス spell) in the empty spot in
     Scheherazade's spell table, and return.
 - 66A2-66A9: Display section 4, tag 4 (Mecca, sage in mid-north), and
   return.
 - 66AA-671E: ??? Mecca, interaction with sage in northeast corner.
   - 66AA-66AE: If $2c17 (??) is zero, jump to 66E6.
   - 66AF-66B5: Display section 4, tag 6 (Mecca, sage in northwest,
     subsequent visits).
   - 66B6-66BB: Call $01.405a->$12.7000 to ??, and $00.e5ca to ??
   - 66BC-66C3: ??? change BGM / play sound effect ??
   - 66C4-66E1: Loop twice, calling $01.4190->$43.7670 four times per
     loop, loading A before each call with #$41, #$51, #$61, #$71 in
     order.
   - 66E2-66E5: Call $01.4287->$03.7c64 to ??, and return.
   - 66E6-66EC: Display section 4, tag 5 (Mecca, sage in northwest,
     first visit).
   - 66ED-66F2: Call $01.405a->$12.7000 to ??, and $00.e5ca to ??
   - 66F3-66FA: ??? change BGM / play sound effect ??
   - 66C4-66E1: Loop twice, calling $01.4190->$43.7670 four times per
     loop, loading A before each call with #$F1, #$E1, #$F1, #$E1 in
     order.
   - 6719-671E: Set $2c17 (??) to #$01, and return.
 - 671F-6726: Display section 4, tag 10 (Mecca, woman next to
   inkeeper), and return.
 - 6727-672E: Display section 4, tag 9 (Mecca, woman north of
   entrance), and return.
 - 672F-6736: Display section 4, tag 1 (Mecca, sage on inside edge of
   pond, northeast of entrance), and return.
 - 6737-673E: Display section 4, tag 11 (Mecca, child just north-east
   of the mid south edge of town), and return.
 - 673F-6746: Display section 4, tag 8 (Mecca, man just west of
   entrance), and return.
 - 6747-674E: Display section 4, tag 7 (Mecca, man at middle of south
   edge of town), and return.
 - 674F-6756: Display section 4, tag 12 (Mecca, child in southeast
   corner), and return.
 - 6757-679F: ??? dispatch on $aa (person in area?) for Cairo ??
   - $01: jump to 67A0.
   - $02: jump to 67A8.
   - $03: jump to 67D0.
   - $04: jump to 681D.
   - $05: jump to 6825.
   - $06: not checked.
   - $07: jump to 682D.
   - $08: jump to 6835.
   - $09: not checked.
   - $0A: not checked.
   - $0B: jump to 683D.
   - $0C: not checked.
   - $0D: jump to 6845.
   - $0E: jump to 684D.
   - default: return.
 - 67A0-67A7: Display section 5, tag 6 (Cairo, old man in northern
   structure), and return.
 - 67A8-67CF: ??? Cairo, interaction with Sanzo (sage in northern
   building).
   - 67A8-67AC: If $2c1a (??) is zero, jump to 67C3.
   - 67AD-67B2: If $a4 (fourth party member id) is not #$04 (Goku?), jump
     to 67BB.
   - 67B3-67BA: Display section 5, tag 3 (Cairo, Sanzo, once Goku is
     in the party), and return.
   - 67BB-67C2: Display section 5, tag 2 (Cairo, Sanzo, subsequent
     visits), and return.
   - 67C3-67C9: Display section 5, tag 1 (Cairo, Sanzo, first visit).
   - 67CA-67CF: Set $2c1a (??) to #$01, and return.
 - 67D0-681C: ??? Cairo, interaction with crowned type (did Egypt
   still have a Pharaoh at this point?) in northern structure.
   - 67D0-67D5: If $a3 (third party member id) is not #$02
     (Scheherazade), jump to 6815.
   - 67D6-67DA: If $2c1b (??) is not zero, jump to 680D.
   - 67DB-67E1: Call $01.5be0 to find a free inventory slot, and jump
     to 6805 if there isn't one?
   - 67E2-67E8: Display section 5, tag 10 (crowned type in northern
     structure, when ??).
   - 67E9-67EF: Display section 5, tag 18 (??).
   - 67F0-67FE: Store #$06 ("jar of strength"?) to the inventory slot
     found at 67DB-67E1.
   - 67FF-6804: Set $2c1b (??) to #$01, and return.
   - 6805-680C: Display section 5, tag 16 (??), and return.
   - 680D-6814: Display section 5, tag 17 (crowned type, subsequent
     visits), and return.
   - 6815-681C: Display section 5, tag 9 (crowned type in northern
     structure), and return.
 - 681D-6824: Display section 5, tag 7 (woman just west of path in
   south of town), and return.
 - 6825-682C: Display section 5, tag 14 (man just southwest of weapon
   shop), and return.
 - 682D-6834: Display section 5, tag 12 (man just east of path in
   south of town), and return.
 - 6835-683C: Display section 5, tag 13 (child just east of weapon
   store), and return.
 - 683D-6844: Display section 5, tag 11 (man just west of inkeeper),
   and return.
 - 6845-684C: Display section 5, tag 8 (woman east of item store), and
   return.
 - 684D-68AC: ??? Cairo, interaction with Monos (sage in southeast
   corner).
   - 684D-6863: Call $01.5bab to see if ?? (spell 2 is in Sinbad's
     spell table?), jumping to 686C if it...  isn't?
   - 6864-686B: Display section 5, tag 5 (Monos, subsequent visits),
     and return.
   - 686C-6872: Display section 5, tag 3 (Monos, first visit).
   - 6873-687A: ??? change BGM / play sound effect ??
   - 687B-6881: Display section 5, tag 19 (??).
   - 6882-6887: ??? Wait for music trill to complete, then restore
     area BGM ??
   - 6888-689C: Call $01.5bab to find an empty spot in Sinbad's spell
     table.
   - 689D-68AC: Store #$02 (ヨーナ spell) in the empty spot in
     Sinbad's spell table, and return.
 - 68AD-68F5: ??? dispatch on $aa (person in area?) for Buhara(?) ??
   - $01: jump to 68F6.
   - $02: jump to 695F.
   - $03: jump to 6974.
   - $04: jump to 697C.
   - $05: not checked.
   - $06: not checked.
   - $07: jump to 6991.
   - $08: jump to 69A6.
   - $09: jump to 69BB.
   - $0A: jump to 69D0.
   - $0B: jump to 69E5.
   - $0C: not checked.
   - $0D: jump to 69FA.
   - default: return.
 - 68F6-695E: ??? Buhara(?), interaction with Ahri (man in northwest
   corner).
   - 68F6-68FA: If $2c1c (??) is zero, jump to 6952.
   - 68FB-6901: Call $01.5be0 to see if item #$08 (Ahri's Letter) is
     in anyone's inventory, jumping to 6917 if it is not ??
   - 6902-6906: If $2c11 (saved the princess a second time?) is zero,
     jump to 690F.
   - 6907-690E: Display section 8, tag 4 (??), and return.
   - 690F-6916: Display section 8, tag 3 (Ahri, post-Incubus fight,
     subsequent visits), and return.
   - 6917-691D: Display section 8, tag 2 (Ahri, post-Incubus fight,
     first visit).
   - 691E-6924: Call $01.5be0 to find a free inventory slot, jumping
     to 694A if there isn't one?
   - 6925-6933: Store item #$08 (Ahri's Letter) in the inventory slot
     found by 691E-6924.
   - 6934-693A: Display section 8, tag 20 (??).
   - 693B-6949: ??? play musical trill, wait for it to complete,
     restore area BGM, and return ??
   - 694A-6951: Display section 8, tag 21 (??), and return.
   - 6952-6958: Display section 8, tag 1 (Ahri, pre-Incubus fight).
   - 6959-695E: Set $2c1f (??) to #$01, and return.
 - 695F-6973: ??? Buhara(?), interaction with ??
   - 695F-6963: If $2c1c (??) is zero, jump to 696C.
   - 6964-696B: Display section 8, tag 9 (??), and return.
   - 696C-6973: Display section 8, tag 8 (woman in building in west of
     town, pre-Incubus fight, and woman in southeast,
     post-Incubus-fight, shared with 69FF), and return.
 - 6974-697B: Display section 8, tag 19 (Buhara(?), child in building
   in west of town), and return.
 - 697C-6990: ??? Buhara(?), interaction with woman in trees in north
   of town.
   - 697C-6980: If $2c1c (??) is zero, jump to 6989.
   - 6981-6988: Display section 8, tag 6 (woman in tress in north,
     post-Incubus fight), and return.
   - 6989-6990: Display section 8, tag 5 (woman in trees in north,
     pre-Incubus fight), and return.
 - 6991-69A5: ??? Buhara(?), interaction with man NW of NE building.
   - 6991-6995: If $2c1c (??) is zero, jump to 699E.
   - 6996-699D: Display section 8, tag 13 (man nw of ne building,
     post-Incubus fight), and return.
   - 699E-69A5: Display section 8, tag 12 (??, shared with 69C8), and
     return.
 - 69A6-69BA: ??? Buhara(?), interaction with woman in NE building.
   - 69A6-69AA: If $2c1c (??) is zero, jump to 69B3.
   - 69AB-69B2: Display section 8, tag 11 (post-Incubus fight), and
     return.
   - 69B3-69BA: Display section 8, tag 10 (pre-Incubus fight), and
     return.
 - 69BB-69CF: ??? Buhara(?), interaction with man in NE building.
   - 69BB-69BF: If $2c1c (??) is zero, jump to 69C8.
   - 69C0-69C7: Display section 8, tag 14 (man in NE building,
     post-Incubus fight), and return.
   - 69C8-69CF: Display section 8, tag 12 (??, shared with 699E), and
     return.
 - 69D0-69E4: ??? Buhara(?), interaction with old man in building in
   middle of town.
   - 69D0-69D4: If $2c1c (??) is zero, jump to 69DD.
   - 69D5-69DC: Display section 8, tag 16 (post-Incubus fight), and
     return.
   - 69DD-69E4: Display section 8, tag 15 (pre-Incubus fight), and
     return.
 - 69E5-69F9: ??? Buhara(?), interaction with old man in SW corner.
   - 69E5-69E9: If $2c1c (??) is zero, jump to 69F2.
   - 69EA-69F1: Display section 8, tag 18 (post-Incubus fight), and
     return.
   - 69F2-69F9: Display section 8, tag 17 (pre-Incubus fight), and
     return.
 - 69FA-6A0E: ??? Buhara(?), interaction with woman in building in SE
   of town.
   - 69FA-69FE: If $2c1c (??) is zero, jump to 6A07.
   - 69FF-6A06: Display section 8, tag 8 (post-Incubus fight, shared
     with 696C), and return.
   - 6A07-6A0E: Display section 8, tag 7 (pre-Incubus fight), and
     return.
 - 6A0F-6A49: ??? dispatch on $aa (person in area?) for (port in
   Byzantium?) ??
   - $01: jump to 6A4A.
   - $02: jump to 6A52.
   - $03: jump to 6A5A.
   - $04: not checked.
   - $05: not checked.
   - $06: jump to 6A62.
   - $07: jump to 6A6A.
   - $08: jump to 6A8A.
   - $09: not checked.
   - $0A: jump to 6A92.
   - $0B: not checked.
   - $0C: jump to 6A9A.
   - default: return.
 - 6A4A-6A51: Display section 7, tag 3 (port town in Byzantium?, woman
   in NW), and return.
 - 6A52-6A59: Display section 7, tag 6 (port town in Byzantium?, child
   N of weapon store), and return.
 - 6A5A-6A61: Display section 7, tag 1 (port town in Byzantium?, old
   man NE of armor store), and return.
 - 6A62-6A69: Display section 7, tag 2 (port town in Byzantium?, woman
   E of river), and return.
 - 6A6A-6A89: ??? port town in Byzantium?, interaction with woman NW
   of inn.
   - 6A6A-6A79: If $220a (Sinbad's equipped armor) or $222a (Ali
     Baba's equipped armor) are #$29 (Toga?), jump to 6A7A, otherwise
     jump to 6A82.
   - 6A7A-6A81: Display section 7, tag 5 (??), and return.
   - 6A82-6A89: Display section 7, tag 4 (woman NW of inkeeper), and
     return.
 - 6A8A-6A91: Display section 7, tag 11 (port town in Byzantium?, man
   W of item store), and return.
 - 6A92-6A99: Display section 7, tag 7 (port town in Byzantium?, child
   S of item store), and return.
 - 6A9A-6AA1: Display section 7, tag 10 (port town in Byzantium?, man
   W of inkeeper), and return.
 - 6AA2-6AEA: ??? dispatch on $aa (person in area?) for Uganjo(?) ??
   - $01: jump to 6AEB.
   - $02: jump to 6B7A.
   - $03: jump to 6B82.
   - $04: jump to 6B8A.
   - $05: not checked.
   - $06: jump to 6B92.
   - $07: jump to 6B9A.
   - $08: not checked.
   - $09: jump to 6BA2.
   - $0A: jump to 6BAA.
   - $0B: not checked.
   - $0C: jump to 6BB2.
   - $0D: not checked.
   - $0E: jump to 6BBA.
   - default: return.
 - 6AEB-6B79: ??? Uganjo(?), interaction with sage in NE.
   - 6AEB-6AF1: Display section 12, tag 8 (sage, posing a question).
   - 6AF2-6B09: Call $01.5bab to see if spell #$05 (クイザッツ) is in
     Sinbad's spell table, returning if it is.
   - 6B0A-6B11: ??? sound effect / BGM change ??
   - 6B12-6B14: Call $01.424f->??? to display current party gold.
   - 6B15-6B18: Call $01.422c->??? to run indexed menu $00 (yes/no),
     doing ?? with the return value, and then push the returned value
     to the stack.
   - 6B19-6B1B: Call $01.5b97 to reopen the dialogue window.
   - 6B1C-6B1E: Pop the menu result from 6B15-6B18 off of the stack
     and jump to 6B60 if it is not zero (jump if the answer was "no"
     or the menu was cancelled).
   - 6B1F-6B25: Display section 12, tag 10 (if you say "yes" in
     response to tag 8).
   - 6B26-6B2D: ??? sound effect / BGM change ??
   - 6B2E-6B34: Display section 12, tag 13 (Sinbad becomes Muad'dib).
   - 6B35-6B3A: ??? Wait for music trill to complete, then restore
     area BGM ??
   - 6B3B-6B4F: Call $01.5bab to find an empty slot in Sinbad's spell
     table.
   - 6B50-6B5F: Store #$05 (the クイザッツ spell) in the slot found by
     6B3B-6B4F, and return.
   - 6B60-6B66: Display section 12, tag 9 (if you say "no" or cancel
     in response to tag 8).
   - 6B67-6B6B: Set $2200 (??) to #$01.
   - 6B6C-6B73: ??? sound effect / BGM change ??
   - 6B74-6B79: Load #$06 into A, call $01.4168->$43.748d to ??, and
     return.
 - 6B7A-6B81: Display section 12, tag 4 (Uganjo(?), man in building NW
   of armor store), and return.
 - 6B82-6B89: Display section 12, tag 3 (Uganjo(?), man in building NE
   of armor store), and return.
 - 6B8A-6B91: Display section 12, tag 1 (Uganjo(?), woman SW of armor
   store), and return.
 - 6B92-6B99: Display section 12, tag 6 (Uganjo(?), elephant SE of
   armor store), and return.
 - 6B9A-6BA1: Display section 12, tag 2 (Uganjo(?), woman between
   weapon and armor stores), and return.
 - 6BA2-6BA9: Display section 12, tag 7 (Uganjo(?), elephant on E
   side), and return.
 - 6BAA-6BB1: Display section 12, tag 5 (Uganjo(?), man in SW corner),
   and return.
 - 6BB2-6BB9: Display section 12, tag 12 (Uganjo(?), woman NW of inn),
   and return.
 - 6BBA-6C6B: ??? Uganjo(?), interaction with man in SE corner.
   - 6BBA-6BC0: Display section 12, tag 11 (man in SE corner, offering
     travel to Basra and Bagwaji(?)).
   - 6BC1-???: ???
   - 6BD6-???: ??? code_6BD6
   - 6BEC-???: ??? code_6BEC
   - 6BFB-???: ??? code_6BFB
   - 6C32-???: ??? code_6C32
   - 6C3C-???: ??? code_6C3C
   - 6C68-???: ??? code_6C68
 - 6C6C-6CB4: ??? dispatch on $aa (person in area?) for (Persian?)
   town NNW of Bagwaji(?) ??
   - $01: jump to 6CB5.
   - $02: jump to 6CCA.
   - $03: jump to 6CD2.
   - $04: jump to 6D0C.
   - $05: not checked.
   - $06: not checked.
   - $07: jump to 6D21.
   - $08: jump to 6D29.
   - $09: jump to 6D31.
   - $0A: not checked.
   - $0B: jump to 6D39.
   - $0C: jump to 6D41.
   - $0D: not checked.
   - $0E: jump to 6D49.
   - default: return.
 - 6CB5-6CC9: ??? small mountain village, interaction with man in NW
   enclosure, left.
   - 6CB5-6CB9: If $2c1d (??) is zero, jump to 6CC2.
   - 6CBA-6CC1: Display section 14, tag 2 (after talking to old man of
     the mountain), and return.
   - 6CC2-6CC9: Display section 14, tag 1 (before talking to old man
     of the mountain), and return.
 - 6CCA-6CD1: Display section 14, tag 14 (Cherubim, after leaving the
   party), and return.
 - 6CD2-6D0B: ??? Persian village, interaction with Aladdin.
   - 6CD2-6CDD: If $a3 (third party member) or $a4 (fourth party
     member) are #$03 (Cherubim?), jump to 6CF3.
   - 6CDE-6CE2: If $2c1d (??) is zero, jump to 6CEB.
   - 6CE3-6CEA: Display section 14, tag 13 (Aladdin, after talking to
     old man of the mountain), and return.
   - 6CEB-6CF2: Display section 14, tag 12 (Aladdin, subsequent
     visits), and return.
   - 6CF3-6CF9: Display section 14, tag 11 (Aladdin, initial visit).
   - 6CFA-6CFC: Call $01.4014->$12.7000 to ??
   - 6CFD-6D01: Set $2260 (Cherubim's current HP) to #$ff (not in
     party).
   - 6D02-6D0B: Call $01.4b09 to ??, $01.537b to ??, and $00.e5ca to
     ??, and return.
 - 6D0C-6D20: ??? Persia(?), interaction with man in NW enclosure,
   right.
   - 6D0C-6D10: If $2c1d (??) is zero, jump to 6D19.
   - 6D11-6D18: Display section 14, tag 4 (after talking to old man of
     the mountain), and return.
   - 6D19-6D20: Display section 14, tag 3 (before talking to old man
     of the mountain), and return.
 - 6D21-6D28: Display section 14, tag 5 (Persia(?), man S of armor
   store), and return.
 - 6D29-6D30: Display section 14, tag 7 (Persia(?), man outside NW
   building), and return.
 - 6D31-6D38: Display section 14, tag 9 (Persia(?), woman, mid-town),
   and return.
 - 6D39-6D40: Display section 14, tag 8 (Persia(?), woman just west of
   entrance), and return.
 - 6D41-6D48: Display section 14, tag 6 (Persia(?), man NW of inn),
   and return.
 - 6D49-6D50: Display section 14, tag 10 (Persia(?), child east of
   inn), and return.
 - 6D51-6D99: ??? dispatch on $aa (person in area?) for Parugia(?) ??
   - $01: jump to 6D9A.
   - $02: not checked.
   - $03: jump to 6DF3.
   - $04: jump to 6E08.
   - $05: jump to 6E1D.
   - $06: jump to 6E6F.
   - $07: jump to 6E77.
   - $08: jump to 6E8C.
   - $09: jump to 6EA1.
   - $0A: not checked.
   - $0B: jump to 6EB6.
   - $0C: jump to 6EBE.
   - default: return.
 - 6D9A-6DF2: ??? Parugia(?), interaction with Solon (fish(?) creature
   behind dais).
   - 6D9A-6DA0: Call $01.5be0 to see if item #$0c (Solon's Seal) is in
     anyone's inventory, jumping to 6DAE if it isn't.
   - 6DA1-6DA5: If $2c19 (??) is not zero, jump to 6DEB.
   - 6DA6-6DAD: Display section 17, tag 6 (subsequent visits), and return.
   - 6DAE-6DB6: Call $01.5be0 to find an empty inventory slot, jumping
     to 6DDC if there isn't one.
   - 6DB7-6DC5: Store #$0c (Solon's Seal) in the inventory slot found
     by 6DAE-6DB6.
   - 6DC6-6DCC: Display section 17, tag 5 (first visit).
   - 6DCD-6DDB: ??? play musical trill, wait for it to complete,
     restore area BGM, and return ??
   - 6DDC-6DE2: Display section 17, tag 5 (first visit).
   - 6DE3-6DEA: Display section 27, tag 2 (??), and return.
   - 6DEB-6DF2: Display section 16, tag 20 (??), and return.
 - 6DF3-6E07: ??? Parugia(?), interaction with person W of inn.
   - 6DF3-6DF7: If $2c19 (??) is zero, jump to 6E00.
   - 6DF8-6DFF: Display section 17, tag 8 (??), and return.
   - 6E00-6E07: Display section 17, tag 9 (person W of inn), and
     return.
 - 6E08-6E1C: ??? Parugia(?), interaction with Omar
   - 6E08-6E0C: If $2c19 (??) is zero, jump to 6E15.
   - 6E0D-6E14: Display section 17, tag 4 (??), and return.
   - 6E15-6E1C: Display section 17, tag 3 (Omar, on left side of
     dais), and return.
 - 6E1D-6E6E: ??? Parugia(?), interaction with Aisha (attendant/queen
   in center of dais).
   - 6E1D-6E21: If $2c19 (??) is zero, jump to 6E67.
   - 6E22-6E28: Call $01.5be0 to see if item #$2a (ウミウシのころも)
     is in anyone's inventory, jumping to 6E31 if it isn't.
   - 6E29-6E30: Display section 17, tag 18 (??), and return.
   - 6E31-6E37: Display section 17, tag 2 (??).
   - 6E38-6E40: Call $01.5be0 to find an empty inventory slot, jumping
     to 6E5F if there isn't one.
   - 6E41-6E4F: Store #$2a (ウミウシのころも) in the inventory slot
     found by 6E38-6E40.
   - 6E50-6E5E: ??? play musical trill, wait for it to complete,
     restore area BGM, and return ??
   - 6E5F-6E66: Display section 27, tag 3 (??), and return.
   - 6E67-6E6E: Display section 17, tag 1 (Aisha), and return.
 - 6E6F-6E76: Display section 17, tag 12 (person in front of dais at
   left), and return.
 - 6E77-6E8B: ??? Parugia(?), interaction with person on right side of
   dais.
   - 6E77-6E7B: If $2c19 (??) is zero, jump to 6E84.
   - 6E7C-6E83: Display section 17, tag 8 (??, shared with 6E91 and
     6EA6), and return.
   - 6E84-6E8B: Display section 17, tag 11 (person on right side of
     dais), and return.
 - 6E8C-6EA0: ??? Parugia(?), interaction with person east of item
   store.
   - 6E8C-6E90: If $2c19 (??) is zero, jump to 6E99.
   - 6E91-6E98: Display section 17, tag 8 (??, shared with 6E7C and
     6EA6), and return.
   - 6E99-6EA0: Display section 17, tag 10 (person east of item
     store), and return.
 - 6EA1-6EB5: ??? Parugia(?), interaction with person in front of dais
   at right.
   - 6EA1-6EA5: If $2c19 (??) is zero, jump to 6EAE.
   - 6EA6-6EAD: Display section 17, tag 8 (??, shared with 6E7C and
     6E91), and return.
   - 6EAE-6EB5: Display section 17, tag 7 (person in front of dais at
     right), and return.
 - 6EB6-6EBD: Display section 17, tag 13 (Parugia(?), person in white,
   ENE of item store), and return.
 - 6EBE-6EC5: Display section 17, tag 14 (Parugia(?), person in white,
   SE of item store), and return.
 - 6EC6-6F0E: ??? dispatch on $aa (person in area?) for Bagwaji(?) ??
   - $01: jump to 6F0F.
   - $02: jump to 6F17.
   - $03: jump to 6F2D.
   - $04: jump to 6F31.
   - $05: jump to 6F39.
   - $06: jump to 6F41.
   - $07: not checked.
   - $08: jump to 6F49.
   - $09: not checked.
   - $0A: jump to 6F51.
   - $0B: jump to 6F59.
   - $0C: jump to 701A.
   - default: return.
 - 6F0F-6F16: Display section 13, tag 5 (Bagwaji(?), old man in ring
   of trees in NW), and return.
 - 6F17-6F2C: ??? Bagwaji(?), interaction with sages (both) inside
   building.
   - 6F17-6F1C: If $a4 (fourth party member) is not #$04 (Goku), jump to
     6F25.
   - 6F1D-6F24: Display section 13, tag 8 (after Goku joins), and return.
   - 6F25-6F2C: Display section 13, tag 7 (before Goku joins, shared
     with 70CB), and return.
 - 6F2D-6F30: Call 6F17 to run indoor sage interaction, and return.
 - 6F31-6F38: Display section 13, tag 2 (Bagwaji(?), man in NW between
   ring of trees and building), and return.
 - 6F41-6F48: Display section 13, tag 3 (Bagwaji(?), woman between
   trees and water in N), and return.
 - 6F39-6F40: Display section 13, tag 6 (Bagwaji(?), child at N edge of town), and return.
 - 6F49-6F50: Display section 13, tag 1 (Bagwaji(?), man near item
   store and inn), and return.
 - 6F51-6F58: Display section 13, tag 4 (Bagwaji(?), woman at end of
   line of trees WSW of building S of item store), and return.
 - 6F59-7019: ??? Bagwaji(?), interaction with travel agent.
   - 6F75-???: ??? code_6F75
   - 6F89-???: ??? code_6F89
   - 6F9A-???: ??? code_6F9A
   - 6FA9-???: ??? code_6FA9
   - 6FE0-???: ??? code_6FE0
   - 6FEA-???: ??? code_6FEA
   - 7016-???: ??? code_7016
 - 701A-70D2: ??? Bagwaji(?), interaction with Goku.
   - 701A-7021: If $2c1d (??) is zero, jump to 70CB.
   - 7022-7028: Display section 13, tag 9 (after Cherubim has gone
     AWOL).
   - 7029-???: ??? (audio and video effects, plus a fight against
     Goku)
   - 7094-709D: Call $01.5b97 to open the dialogue window, then
     display section 13, tag 10 (Goku, following the fight).
   - 709E-???: ??? (Goku joins the party)
   - 70CB-70D2: Display section 13, tag 7 (sage before Goku joins,
     shared with 6F25), and return.
 - 70D3-70FF: ??? dispatch on $aa (person in area?) for settlement N
   of desert maze ??
   - $01: jump to 7100.
   - $02: jump to 7121.
   - $03: jump to 7129.
   - $04: jump to 7160.
   - $05: jump to 7168.
   - $06: jump to 7170.
   - default: return.
 - 7100-7120: ??? mountain village, interaction with old man in NW.
   - 7100-710B: If $a3 (third party member) or $a4 (fourth party
     member) are #$03 (Cherubim?), jump to 7119.
   - 710C-7110: Set $2c1d (??) to #$01.
   - 7111-7118: Display section 15, tag 2 (old man, after you leave
     Cherubim with Aladdin), and return.
   - 7119-7120: Display section 15, tag 1 (old man, if you have
     Cherubim in the party), and return.
 - 7121-7128: Display section 15, tag 6 (mountain village, woman in N
   building), and return.
 - 7129-715F: ??? mountain village, interaction with old man in W
   building.
   - 7129-712F: Display section 15, tag 7 (old man in W building).
   - 7130-715F: ??? various A/V effects, heals party to full ??
 - 7160-7167: Display section 15, tag 4 (mountain village, man in
   mid-E building), and return.
 - 7168-716F: Display section 15, tag 5 (mountain village, woman S of
   pond), and return.
 - 7170-7177: Display section 15, tag 3 (mountain village, man in S
   building), and return.
 - 7178-???: ??? code_7178
   - 7178-717E: If $25 (not-during-intro-sequence flag?) is not zero,
     jump to 7274.
   - 717F-71B9: Dispatch on $aa (person in area?) for Baghdad Palace,
     during intro sequence ??
     - $01: jump to 7263.
     - $02: jump to 71BA.
     - $03: jump to 726B.
     - $04: jump to 726B.
     - $05: jump to 726B.
     - $06-$0A: not checked.
     - $0B: jump to 7273.
     - $0C: jump to 7273.
     - default: Display section 0, tag 6 (mid-corridor attendants),
       and return.
 - 71BA-7262: ??? intro, interaction with Scheherazade.
 - 7263-726A: Display section 0, tag 9 (intro, person on throne), and
   return.
 - 726B-7272: Display section 0, tag 8 (intro, vizir and attendants at
   dais), and return.
 - 7273-7273: Return.
 - 7274-72C7: ??? Dispatch on $aa (person in area?) for Baghdad Palace,
   not during intro ??
   - $01: jump to 72C8.
   - $02: jump to 752C.
   - $03: jump to 752D.
   - $04: jump to 7542.
   - $05: jump to 7546.
   - $06: jump to 755B.
   - $07: jump to 75B9.
   - $08: jump to 75CE.
   - $09: jump to 75D6.
   - $0A: jump to 75EB.
   - $0B: jump to 7600.
   - $0C, default: jump to 7608.
 - 72C8-74F0: ??? Baghdad Palace, interaction with the king.
   - 72C8-72D2: If $2c10 (??) is non-zero, jump to $01.41fe->$12.7601
     to run the endgame sequence and credits.
   - 72D3-72D9: Display section 22, tag 1 (king, initial visit).
   - 72DA-72DC: Call $01.4014->$12.7000 to ??
   - 72DD-72E1: Set $2c0a (??) to #$01.
   - 72E2-???: Remove Scheherazade from the party.
   - 734F-7355: Display section 22, tag 50 (subsequent to tag 1).
   - 73E5-73EB: Display section 22, tag 51 (subsequent to tag 50).
 - 74F1-7508: ??? sub_74F1
   - 74F3-???: ??? code_74F3
   - 7505-???: ??? code_7505
 - 7509-751D: ??? data for $01.e831 ??
 - 751E-7526: ??? data for $01.e831 ??
 - 7527-752B: ??? data for $01.e831 ??
 - 752C-752C: Return.
 - 752D-7541: ??? Baghdad Palace, interaction with Vizir left of
   throne.
   - 752D-7531: If $2c10 (??) is zero, jump to 753A.
   - 7532-7539: Display section 22, tag 9 (??), and return.
   - 753A-7541: Display section 22, tag 8 (Vizir), and return.
 - 7542-7545: Call 7546 to run Baghdad Palace attendant at dais
   interaction, and return.
 - 7546-755A: ??? Baghdad Palace, interaction with attendants at dais.
   - 7546-754A: If $2c10 (??) is zero, jump to 7553.
   - 754B-7552: Display section 22, tag 7 (??), and return.
   - 7553-755A: Display section 22, tag 6 (attendants at dais), and
     return.
 - 755B-75B8: ??? Baghdad Palace, interaction with Masrur.
   - 755B-755F: If $2c28 (??) is zero, jump to 258F.
   - 7560-7564: If $2c11 (saved the princess again?) is zero, jump
     to 7587.
   - 7565-7569: If $2c29 (??) is zero, jump to 757F.
   - 756A-756E: If $2c10 (end of game?) is zero, jump to 7577.
   - 756F-7576: Display section 22, tag 18 (??), and return.
   - 7577-757E: Display section 22, tag 17 (after meeting Hasan in
     Basra), and return.
   - 757F-7586: Display section 22, tag 16 (after saving the princess
     again), and return.
   - 7587-758E: Display section 22, tag 15 (after he lets you in), and
     return.
   - 758F-7593: If $2c27 (??) is zero, jump to 75B1.
   - 7594-759A: Display section 22, tag 14 (after speaking with the
     king once).
   - 759B-75A2: ???
   - 75A3-75A7: Set $2c0a (??) to #$01.
   - 75A8-75AA: Call $01.4ab4 to ??
   - 75AB-75B0: Set $2c28 (??) to #$01, and return.
   - 75B1-75B8: Display section 22, tag 19 (before speaking with the
     king), and return.
 - 75B9-75CD: ??? Baghdad Palace, interaction with mid-corridor
   attendant, right side.
   - 75B9-75BD: If $2c10 (end of game?) is zero, jump to 75C6.
   - 75BE-75C5: Display section 22, tag 11 (??), and return.
   - 75C6-75CD: Display section 22, tag 10 (attendant, right side),
     and return.
 - 75CE-75D5: Display section 22, tag 3 (Scheherazade, after talking
   to the king), and return.
 - 75D6-75EA: ??? Baghdad Palace, interaction with attendant in
   Masrur's chambers.
   - 75D6-75DA: If $2c11 (saved the princess twice?) is zero, jump to
     75E3.
   - 75DB-75E2: Display section 22, tag 5 (after saving the princess
     again), and return.
   - 75E3-75EA: Display section 22, tag 4 (after beating Incubus), and
     return.
 - 75EB-75FF: ??? Baghdad Palace, interaction with mid-corridor
   attendant, left side.
   - 75EB-75EF: If $2c11 (saved the princess twice?) is zero, jump to
     75F8.
   - 75F0-75F7: Display section 22, tag 13 (??), and return.
   - 75F8-75FF: Display section 22, tag 12 (attendant, left side), and
     return.
 - 7600-7607: Display section 22, tag 24 (entrance guards, out of
   position), and return.
 - 7608-760B: Call 7600 to run out-of-position entrance guard
   interaction, and return.
 - 760C-7674: ??? external entry ?? Baghdad palace entrance guards ??
   - 760C-7610: If $2c0c (??) is not zero, jump to 7667.
   - 7611-7620: ???
   - 7621-7623: Call $01.5b97 to open the dialogue window.
   - 7624-762A: If $25 (not-during-intro flag?) is zero, jump to 766D.
   - 762B-762F: If $2c15 (saved the princess once?) is zero, jump to
     765F.
   - 7630-7634: If $2c26 (??) is zero, jump to 764D.
   - 7635-7639: If $2c10 (end of game?) is zero, jump to 7645.
   - 763A-7640: Display section 22, tag 23 (??).
   - 7641-7644: Call 7675 to ??, and return.
   - 7645-764C: Display section 22, tag 22 (entrance guards, after
     speaking to the king), and return.
   - 764D-7653: Display section 22, tag 20 (entrance guards, before
     speaking to the king).
   - 7654-765A: Display section 22, tag 21 (Scheherazade tearing the
     guards a new orifice).
   - 765B-765E: Call 7675 to ??, and return.
   - 765F-7666: Display section 22, tag 20 (entrance guards, before
     speaking to the king), and return.
   - 7667-766C: Set $2c0a (??) to #$01, and return.
   - 766D-7674: Display section 0, tag 7 (entrance guards), and
     return.
 - 7675-76A0: ??? sub_7675
   - 7677-???: ??? code_7677
   - 7689-???: ??? code_7689
   - 7698-???: ??? code_7698
 - 76A1-7713: ??? Dispatch on $aa (person in area?) for Byzantine
   palace(?) ??
   - $01: jump to 7714.
   - $02: jump to 7718.
   - $03: jump to 772F.
   - $04: jump to 7730.
   - $05: jump to 7734.
   - $06: jump to 7738.
   - $07: jump to 7788.
   - $08: jump to 7847.
   - $09: jump to 785C.
   - $0A: jump to 7871.
   - $0B: jump to 7886.
   - $0C: jump to 789B.
   - $0D: jump to 78B0.
   - $0E: jump to 78C5.
   - $0F: jump to 78C9.
   - $10: jump to 78D1.
   - default: return.
 - 7714-7717: Call 7718 to ??, and return.
 - 7718-772E: ??? Byzantine palace, interaction with ??
   - 7718-771E: Call $01.5be0 to see if item #$09 (Teribura Egg) is in
     inventory, jumping to 7727 if it ??
   - 771F-7726: Display section 10, tag 13 (), and return.
   - 7727-772E: Display section 10, tag 12 (), and return.
 - 772F-772F: Return.
 - 7730-7733: Call 7718 to ??, and return.
 - 7734-7737: Call 7718 to ??, and return.
 - 7738-7787: ??? Byzantine palace, interaction with Scheherazade.
   - 7738-773C: If $2c11 (saved princess twice flag?) is zero, jump
     to 7780.
   - 773D-7743: Display section 10, tag 18 (post-distraction), and
     return.
   - 7744-7751: ??? play musical trill, wait for it to complete, and
     restore area BGM ??
   - 7752-7766: ??? sprite manipulation ??
   - 7767-7769: Call $01.4464->?? to recompute the party's level.
   - 776A-776C: Call $01.4154->43.7000 to ??
   - 776D-7778: Restore Scheherazade's HP and MP (returning her to the
     party).
   - 7779-777B: Call $01.4f4b to ??
   - 777C-777F: Call $01.4f8e to recompute the party sprite IDs, and
     return.
   - 7780-7787: Display section 10, tag 17 (pre-distraction), and
     return.
 - 7788-???: ??? Byzantine palace, interaction with sailor.
   - 7788-778E: Call $01.5be0 to see if item #$09 (Teribura Egg) is in
     inventory, jumping to 7797 if it ??
   - 778F-7796: Display section 10, tag 16 (postmortem), and return.
   - 7797-779B: If $2c11 (??) is not zero, jump to 778F.
   - 779C-77A4: Call $01.5be0 to find an empty inventory slot, jumping
     to 7832 if none are available.
   - 77A5-77B3: Store item #$09 (Teribura Egg) to the slot found by
     779C-77A4.
   - 77B4-77BA: Display section 10, tag 15 (sailor explains).
   - 77BB-77C2: ??? sfx / BGM ??
   - 77C3-77FE: ???
   - 77FF-7804: ??? wait for music to finish, restore area BGM ??
   - 7805-7831: ??? sprite manipulation, and return ??
   - 7832-7839: Display section 27, tag 1 (), and return.
 - 783A-7846: Delay subroutine, three repeats of $01.5de3 with A set
   to zero, then return.
 - 7847-785B: ??? Byzantine palace, interaction with westmost guard in
   throne room.
   - 7847-784B: If $2c11 (used teribura egg?) is zero, jump to 7854.
   - 784C-7853: Display section 10, tag 2 (post-distraction, shared
     with 7876), and return.
   - 7854-785B: Display section 10, tag 6 (pre-distraction), and
     return.
 - 785C-7870: ??? Byzantine palace, interaction with the king.
   - 785C-7860: If $2c11 (used teribura egg?) is zero, jump to 7869.
   - 7861-7868: Display section 10, tag 10 (post-distraction), and
     return.
   - 7869-7870: Display section 10, tag 9 (pre-distraction), and
     return.
 - 7871-7885: ??? Byzantine palace, interaction with western sage.
   - 7871-7875: If $2c11 (used teribura egg?) is zero, jump to 787E.
   - 7876-787D: Display section 10, tag 2 (post-distraction, shared
     with 784C), and return.
   - 787E-7885: Display section 10, tag 1 (pre-distraction), and
     return.
 - 7886-789A: ??? Byzantine palace, interaction with eastern sage.
   - 7886-788A: If $2c11 (used teribura egg?) is zero, jump to 7893.
   - 788B-7892: Display section 10, tag 11 (post-distraction), and
     return.
   - 7893-789A: Display section 10, tag 3 (pre-distraction), and
     return.
 - 789B-78AF: ??? Byzantine palace, interaction with western
   attendant.
   - 789B-789F: If $2c11 (used teribura egg?) is zero, jump to 78A8.
   - 78A0-78A7: Display section 10, tag 5 (post-distraction, shared
     with 78B5), and return.
   - 78A8-78AF: Display section 10, tag 4 (pre-distraction), and
     return.
 - 78B0-78C4: ??? Byzantine palace, interaction with eastern guard.
   - 78B0-78B4: If $2c11 (used teribura egg?) is zero, jump to 78BD.
   - 78B5-78BC: Display section 10, tag 5 (post-distraction, shared
     with 78A0), and return.
   - 78BD-78C4: Display section 10, tag 7 (pre-distraction), and
     return.
 - 78C5-78C8: Call 78C9 to ??, and return.
 - 78C9-78D0: Display section 10, tag 21 (entrance guards, if someone
   is wearing a toga?), and return.
 - 78D1-78E5: ??? Byzantine palace, interaction with eastern
   attendant.
   - 78D1-78D5: If $2c11 (used teribura egg?) is zero, jump to 78DE.
   - 78D6-78DD: Display section 10, tag 8 (post-distraction), and
     return.
   - 78DE-78E5: Display section 10, tag 19 (pre-distraction), and
     return.
 - 78E6-7946: ??? external entry ?? Byzantine palace entrance guards
   ??
   - 78E6-78ED: ??? calls $01.4b09 ??
   - 78EE-78F2: If $2c0d (??) is not zero, jump to 7903.
   - 78F3-7902: If $220a (Sinbad's equipped armor) or $222a (Ali
     Baba's equipped armor) are #$29 (Toga), jump to 7909.  Otherwise,
     jump to 793C.
   - 7903-7908: Set $2c0a (??) to #$01, and return.
   - 7909-7912: Call $01.5b97 to open the dialogue window, and display
     section 10, tag 21 (byzantine entrance guards, if someone is
     wearing a toga).
   - 7913-7926: ??? loop, eight iterations, poss. moving entrance
     guards ??
   - 7927-7929: Call $01.4ab4 to ??
   - 792A-792E: Set $2c0d (??) to #$01.
   - 792F-7935: If $48 (??) is not #$88 (??), return.
   - 7936-793B: Set $2c0a (??) to #$01, and return.
   - 793C-7946: Call $01.5b97 to open the dialogue window, display
     section 10, tag 20 (byzantine entrance guards, if nobody is
     wearing a toga), and return.
 - 7947-7965: ??? Dispatch on $aa (person in area?) for Oasis ??
   - $01: jump to 7966.
   - $02: jump to 7A0A.
   - $03: jump to 7A15.
   - $04: jump to 7A1D.
   - default: return.
 - 7966-7A09: ??? Oasis, interaction with old man in the northwest.
   - 7966-796C: Call $01.5be0 to see if item #$05 (Enlil's Orb) is in
     anyone's inventory, jumping to 7975 if it isn't.
   - 796D-7974: Display section 3, tag 6 (already have Enlil's Orb),
     and return.
   - 7975-797B: Display section 3, tag 3 (after Goku joins).
   - 797C-7983: ??? sound effect / BGM change ??
   - 7984-7986: Call $01.424f->??? to display current party gold.
   - 7987-798A: Call $01.422c->??? to run indexed menu $00 (yes/no),
     doing ?? with the return value, and then push the returned value
     to the stack.
   - 798B-798D: Call $01.5b97 to reopen the dialogue window.
   - 79A6-???: ??? code_79A6
   - 79B0-???: ??? code_79B0
   - 79FA-???: ??? code_79FA
   - 7A02-???: ??? code_7A02
 - 7A0A-7A14: ??? Oasis, interaction with Hasan.
   - 7A0A-7A10: Display section 3, tag 2 (Hasan).
   - 7A11-7A14: Call $01.4287->$03.7c64 to ?? (heal the party?), and
     return.
 - 7A15-7A1C: Display section 3, tag 7 (Oasis, the camel), and return.
 - 7A1D-7A24: Display section 3, tag 1 (Oasis, man on south side of
   southern pond), and return.
 - 7A25-7A3C: ??? Dispatch on $aa (person in area?) for Darius'
   outpost ??
   - $01: jump to 7A3D.
   - $02: jump to 7A99.
   - $03: jump to 7AD2.
   - default: return.
 - 7A3D-7A98: ??? Outpost, interaction with Incubus.
   - 7A3D-7A43: Display section 9, tag 4 (Incubus, pre-fight).
   - 7A44-7A4D: Set $99 (??) to #$ff, $af (??) to zero, and $a7
     (monster id?) to 51 (Incubus).
   - 7A4E-7A50: Call $01.40e6->$02.6000 to run combat.
   - 7A51-7A52: Set $99 (??) to zero.
   - 7A53-7A59: If $9a (combat result?) is not #$01 (victory), return.
   - 7A5A-7A63: Call $01.5b97 to reopen the dialogue window, and
     display section 9, tag 5 (after defeating Incubus).
   - 7A64-7A89: ??? loop running visual effects, but also switching
     $2c1c (??) between #$00 and #$01 (ending with it on #$01) ??
   - 7A8A-7A98: ??? sound effect / BGM change, wait for completion,
     restore area BGM, and return ??
 - 7A99-7AD1: ??? Outpost, interaction with Darius.
   - 7A99-7A9D: If $2c11 (used teribura egg?) is not zero, jump to
     7AB2.
   - 79AE-7AA4: Call $01.5be0 to see if item #$08 (Ahri's letter) is
     in anyone's inventory jumping to 7ABA if it is.
   - 7AA5-7AA9: If $2c20 (??) is zero, jump to 7ACA.
   - 7AAA-7AB1: Display section 9, tag 10 (after having given the
     letter), and return.
   - 7AB2-7AB9: Display section 9, tag 3 (after saving the princess
     again), and return.
   - 7ABA-7AC0: Display section 9, tag 2 (when you have the letter).
   - 7AC1-7AC3: Call $01.5e13 to ?? (remove Ahri's letter from
     inventory?)
   - 7AC4-7AC9: Set $2c20 (??) to #$01, and return.
   - 7ACA-7AD1: Display section 9, tag 1 (before giving the letter),
     and return.
 - 7AD2-7B31: ??? Outpost, interaction with old man NW of Darius'
   building.
   - 7AD2-7AE8: Call $01.5bab to see if ?? (spell 11, ヤハド, is in
     Scheherazade's spell table?), jumping to 7AF1 if it...  isn't?
   - 7AE9-7AF0: Display section 9, tag 9 (subsequent visits), and
     return.
   - 7AF1-7AF7: Display section 9, tag 7 (initial visit).
   - 7AF8-7AFF: ??? sound effect / BGM change ??
   - 7B00-7B06: Display section 9, tag 8 (follows tag 7).
   - 7B07-7B0C: ??? wait for music to finish, restore area BGM ??
   - 7B0D-7B21: Call $01.5bab to find an empty slot in Scheherazade's
     spell table.
   - 7B22-7B31: Store #$0b (the ヤハド spell) in the slot found by
     7B0D-7B21, and return.
 - 7B32-7B3D: ??? external entry ?? Set $2c0a (??) to zero, call
   $01.4b09 to ??, call $01.4204->??? to run the weapon store, and
   return.
 - 7B3E-7B49: ??? external entry ?? Set $2c0a (??) to zero, call
   $01.4b09 to ??, call $01.420e->??? to run the armor store, and
   return.
 - 7B4A-7B55: ??? external entry ?? Set $2c0a (??) to zero, call
   $01.4b09 to ??, call $01.4218->??? to run the item store, and
   return.
 - 7B56-7B61: ??? external entry ?? Set $2c0a (??) to zero, call
   $01.4b09 to ??, call $01.4222->$47.7000 to ?? (run the inn?), and
   return.
 - 7B62-7BFF: Padding (all $FF bytes).
 - 7C00-7FFF: BG tile indices? (static screen image?)  Interpret with
   a $83 highbyte and tiles from bank $0c (see $41.70cc).

Banks 14-17

Game script text. This is considered by the game logic to run from $8000-$ffff, but each bank is mapped at $8000-$9fff, the next two higher bits being used to select which bank in the $14-$17 region to use (see $00.e7f4, $12.1710).

 - 8000-803F: Pointers to the start of each script section.
 - 8040-FD88: Script data.
 - FD89-FFFF: Padding (all $FF bytes).

Banks 18-1f

Map data.

Bank 40

Map data.

Bank 41

Aside from the first half of the bank containing map data, contains code to set up "outdoor/town" (map1) tile animations. And the map1 toplevel loop. And apparently the savegame password entry window.

 - 6000-6FFF: Map data.
 - 7000-70CB: ??? external entry ??
   - 7009-???: ??? fades in a palette ??
   - 703A-???: ??? clocks RNG, reads controllers, dispatches on
     controller input ??
   - 705C-???: ??? fades out a palette ??
   - 707D-???: ???
   - 707F-???: ???
   - 7081-???: ???
   - 7090-???: ??? writes to VRAM ??
   - 70A8-???: ??? reads controllers ??
   - 70B7-???: ??? fades out a palette ??
   - 70CB-70CB: Return.
 - 70CC-7178: ??? sets palette and tileset (!?) for windows, copies
   bank #$0c to VRAM $3xxx, does some sort of nested loop textwindow
   write pulling data from bank #$13 (address #$9c00?)
   - Largely-static fullscreen image, maybe?
 - 7179-72F8: ??? external entry ?? opens password entry window,
   password entry input window, opens nested loops for populating the
   input window ??
   - 7241-???: ??? calls out to display a character tile ??
   - 7244-???: ??? closes the nested loops for the bulk of the input
     window, uses two more nested loops to display the commands down
     the right side of the input window ??
   - 72E1-???: ??? data (see $41.725b) ??
     - This appears to be "text".
       - " ゛ けする ゛ もとる   すすむ   RUN"
     - This is the three columns by eight rows, producing four rows of
       displayed text, for the right side of the password entry box,
       below the four "ャュョワ" characters.
 - 72F9-7340: ???
   - 730B-???: ??? some sort of 16-bit table lookup in $41.7387 ??
   - 731A-???: ??? reads/writes VRAM ??
   - 7339-???: ???
 - 7341-7370: ??? reads/writes VRAM ??
   - 7370-7370: Return.
 - 7371-737B: ??? dead code ?? rotates X and Y each right by one bit,
   as independent 8-bit quantities (so, no carry transmission between
   the two) ??
 - 737C-7386: ??? rotates X and Y each left by one bit, as independent
   8-bit quantities (so, no carry transmission between the two) ??
 - 7387-73B6: ??? 16-bit data (see 730B) ??
 - 73B7-7586: ??? external entry ?? toplevel entry from main loop ??
   contains primary town-map interaction loop ??
   - 73B7-73CA: ??? variable initialization, including a conditional.
   - 73CB-73D1: Map bank #$07 to $c000-$dfff (!?), call $5188.
   - 73D2-73D4: Call $51e2 to set the tileset, starting bank, and
     palette for the BG map to use.
   - 73D5-73F3: Map bank #$0d to $8000-$9fff, call $e023 to copy the
     entire bank from $8000 to VRAM $6000 (this basically has to be
     tile data of some sort).
   - 73F4-???
   - 7415-???
   - 7422-7427: Enable BG and SPR rendering.
   - 7428-7438: Map bank #$05 to $8000-$9fff, set up and call $5005 to
     fade in the BG tile palette.
   - 7439-???
   - 744A-744C: Call $e10a to read the controller.
   - 744D-74F4: If $10 (buttons pressed) or $72 (???) are zero, branch
     to $7460.
   - 7455-745D: ???
   - 745E-745F: Zero $72 (???).
   - 7460-???: Pad input dispatch.
   - 7466-???: ???
   - 746C-???: ???
   - 7472-???: ???
   - 7478-???: ???
   - 747E-???: ??? dispatch button I only if Ali Baba is in the party
     ??
   - 7488-???: ???
   - 7492-???: ??? uses the stupid $00.ea4b "generic comparison"
     routine ??
   - 74DB-???: ??? conditional return ??
   - 74E8-???: ???
   - 74EB-???: ???
   - 74FF-???: ???
   - 7505-???: ???
   - 7519-???: ???
   - 751F-???: ???
   - 7533-???: ???
   - 7539-???: ???
   - 754D-???: ???
   - 7553-???: ??? saves S to $2fc5, calls $01.4273->$03.67f5 to run
     the non-combat command menu ??
   - 755A-???: ??? non-local entry point (sets S from $2fc5, invoked
     from 785C) ??
   - 7562-???: ???
   - 7575-???: ??? conditional return ??
   - 757C-???: ???
 - 7587-7664: ??? sprite/BG collision tests ?? these all bounce to
   bank $13 if a collision is found ??
   - 75E4-???: ???
   - 75ED-???: ??? sprite/BG collision tests ?? these are all handled
     within bank $41 if a collision is found ??
 - 7665-7678: ??? does something with BGM, loads A with #$02 (??), and
   jumps to 767B ??
 - 7679-767A: ??? loads A with #$03 (??), and falls through to 767B ??
 - 767B-76CB: ??? loops doing something with the SATB, does a palette
   fade-out, and sets the map group to 2 (dungeon) ??
 - 76CD-76D7: ???
 - 76D8-76E4: ??? if $a0 (municipality / area id?) is #$0d, jump to
   $01.4403->$13.78e6 to ??, otherwise jump to $01.43f9->$13.760c to
   ??
 - 76E4-7746: ??? starts by popping the return address (!?), loops
   doing something with the SATB, does something with BGM, does a
   palette fade-out, sets the map group to 0 (world) ??
 - 7747-774C: ???
 - 774D-77E5: ???
   - 7759-???: ??? checks to see if anyone has armor #$2a (??) ??
   - 777D-???: ??? does something with BGM, and loops doing something
     else with the SATB ??
   - 77C9-???: ??? flickers sprites so that they only show every other
     frame... for 2/3 of a second ??
   - 77E3-77E5: Jumps to 7679 (??)
 - 77E6-785E: ??? external entry ??
   - 780F-???: ??? in-memory SATB mangling loop, maybe ??
   - 7834-???: ???
   - 7838-???: ???
   - 783A-???: ???
   - 784B-???: ??? sets BGM for area, jumps to 755A ??
     - this is the non-local exit set up by 7553 ??
 - 785F-78E2: ??? dispatch on a random byte ??
   - 7880-???: ??? dead code ??
   - 788A-???: ??? in-memory SATB mangling, maybe ??
   - 78A3-???: ??? in-memory SATB mangling, maybe ??
   - 78C1-???: ??? in-memory SATB mangling, maybe ??
   - 78DF-???: ???
 - 78E3-7971: ??? VRAM update for tile animation sequence ??
   - 78EB-???: ???
   - 78F2-???: ???
   - 7915-???: ???
   - 7934-???: ???
   - 7953-???: ???
 - 7972-79F0: ??? external entry ?? set up map1 tile animations ??
   - 799B-???: ???
   - 79B6-???: ???
   - 79B8-???: ???
   - 79D3-???: ???
   - 79D5-???: ???
   - 79F0-79F0: Return.
 - 79F1-7A2D: ??? $48.W = 7A0A[$2fc7] - $ac.W, except no carry between
   bytes ??
   - 7A0A-7A2D: ??? data, 16-bit entries, possibly two 8-bit halves ??
 - 7A2E-7A65: ??? $48.W = 7A46[$a0] - $ac.W, except no carry between
   bytes ??
   - 7A46-7A65: ??? data, 16-bit entries, possibly two 8-bit halves ??
 - 7A66-7AE1: ??? multiple sets of BG collision tile ids ??
 - 7AE2-7C0D: ??? external entry ?? crawls some data structure pointed
   to by YX on entry ??
   - 7BAB-???: ??? loop head, storing stuff on-stack ??
   - 7BB2-???: ???
   - 7BD4-???: ???
   - 7BE7-???: ???
   - 7BF1-???: ???
   - 7C00-???: ??? loop tail, pulling stuff from the stack ??
   - 7C0D-7C0D: Return.
 - 7C0E-7CCC: ??? dispatch on parameter in A ??
   - 7C1D-???: ???
   - 7C24-7C24: Return.
   - 7C25-???: ??? reads/writes VRAM ??
   - 7C44-???: ??? reads/writes VRAM ??
   - 7C63-???: ??? reads/writes VRAM ??
   - 7C98-???: ??? reads/writes VRAM ??
 - 7CCD-???: ??? dead code ?? reads/writes VRAM ??
 - 7CFB-???: ??? dead code ?? reads/writes VRAM ??
 - 7D29-7E19: ??? reads/writes VRAM ??
 - 7E1A-7FFF: Padding (all $01 bytes).

Bank 42

Map data.

Bank 43

Aside from the first half of the bank containing map data, appears to contain some sort of initialization (spell MP cost?) logic, VRAM (sprite?) manipulations of some sort, and quite a few uses of the RNG that I don't yet understand.

 - 6000-6FFF: Map data.
 - 7000-70D9: ??? external entry ?? party status/equipment
   initialization ??
 - 70DA-70ED: ??? some sort of scaled value computation ??
   - Looks to be (signed) parameter in A, add $22a4 (party level),
     clamp the low end to six (6), multiply by five using $c8 (??) as
     a temporary, and return result in A.
 - 70EE-70F8: ??? some sort of scaled value computation ??
   - Looks to be (signed) parameter in A, add $22a4 (party level),
     clamp the low end to zero, multiply by 3 using $c8 (??) as a
     temporary, and return result in A.
 - 70FC-7186: ??? biases parameter by party level, then clamps it to
   bounds ??
   - 7106-???: ???
   - 7108-???: ??? read from address in YX ??
   - 7124-???: ???
   - 7144-???: ???
   - 7154-???: ???
   - 7184-???: ???
 - 7187-725F: ??? biases parameter by party level, then clamps it to
   bounds ??
   - 7190-???: ??? read from address in YX ??
   - 71AC-???: ??? read from subseqent address ??
   - 71CE-???: ??? read from subsequent address ??
   - 71F4-???: ???
   - 7218-???: ???
   - 7228-???: ???
 - 7260-7267: ??? add party level plus five to A ??
 - 7268-73B1: ??? external entry ?? Feels like an animation sequence,
   maybe ?? called twice, with A equal to #$01 and #$00 in order, per
   enemy, to animate them onto the screen ??
   - 7268-726B: If A is #$01 (first call for enemy?), jump to 7278.
   - 726C-7277: Set $301c.W (??) to #$ffff (-1), and jump to 7282.
   - 7278-7281: Set $301c.W (??) to #$0001 (1).
   - 7282-7283: Load #$08 into A (loop counter).
   - 7284-7289: Push A (loop counter) to the stack, and call $01.5de3
     to delay for #$80 (128) whatevers.
   - 728A-728C: Call $01.40f0->$02.745c to ??
   - 728D-???: ???
   - 73AA-73B0: Pull A (loop counter) from the stack, decrement it,
     and jump to 7284 if it is not zero.
   - 73B1-73B1: Return.
 - 73B2-73F6: ??? computes a VRAM address ??
   - Increments $2c42.W by four, slowly.
 - 73F7-7418: ??? reads/writes VRAM at addresses computed by 73B2 ??
 - 7419-743A: ??? reads/writes VRAM at addresses computed by 73B2 ??
 - 743B-7463: ??? reads/writes VRAM at addresses computed by 73B2 ??
 - 7464-748C: ??? reads/writes VRAM at addresses computed by 73B2 ??
 - 748D-74AD: ??? external entry ?? loops for number of iterations
   passed in A ??
   - 74AD-74AD: Return.
 - 74AE-74C9: ??? jumps to 74E4 ??
 - 74CA-74E3: ??? falls through to 74E4 ??
 - 74E4-74FD: ??? sets BG X scroll ??
 - 74FE-7519: ??? jumps to 7534 ??
 - 751A-7533: ??? falls through to 7534 ??
 - 7534-754D: ??? sets BG Y scroll ??
 - 754E-756E: ??? external entry ?? loops for a number of iterations
   passed in A ??
   - 756E-756E: Return.
 - 756F-7578: ???
 - 7579-7582: ???
 - 7583-758C: ???
 - 758D-7596: ???
 - 7597-764A: ??? external entry ??
   - 75AA-???: ???
   - 75AF-???: ???
   - 75B9-???: ???
   - 75BE-???: ???
   - 75C6-???: ???
   - 75CB-???: ??? some sort of VRAM read/write loop ??
   - 764A-764A: Return.
 - 764B-766F: ??? external entry ??
   - 7651-???: ??? loop of some sort ??
   - 766F-766F: Return.
 - 7670-76A7: ??? external entry ??
   - 767E-???: ??? loop, selecting an area map ??
   - 76A7-76A7: Return.
 - 76A8-7712: ???
   - 76AD-???: ??? some sort of VRAM read/write loop ??
   - 7712-7712: Return.
 - 7713-7741: ??? external entry ?? Zeros $2a00-$2a3c (??), then is a
   calldown list of short subroutines.
   - Possibly setting up a table of spell MP costs?  Possibly also
     effect magnitudes?
 - 7742-7750: ???
 - 7751-7756: ???
 - 7757-7761: ???
 - 7762-7771: ???
 - 7772-7784: ???
 - 7785-778F: ???
 - 7790-77A3: ???
 - 77A4-77B1: ???
 - 77B2-77B7: ???
 - 77B8-77BD: ???
 - 77BE-77C6: ???
 - 77C7-77CC: ???
 - 77CD-77D9: ??? Returns the greatest of A or $22a4 (party level) in
   A, using $c8 (??) as a temporary.
   - 77D7-???: ???
 - 77DA-77E7: ??? Returns the greatest of A or twice $22a4 (party
   level) in A, using $c8 (??) as a temporary.
   - 77E5-???: ???
 - 77E8-7811: ??? appears to be of a theme with the surrounding
   functions, but more complex internally, actual effect not yet
   worked out ??
   - 77F7-???: ???
   - 7800-???: ???
   - 780F-???: ???
 - 7812-7820: ??? Returns the greatest of A or four times $22a4 (party
   level) in A, using $c8 (??) as a temporary.
   - 781E-???: ???
 - 7821-7835: ??? external entry ??
 - 7836-786A: ??? displays section 25, tag 27, "Sinbad" ??
   - Possibly combat status window update?
 - 786B-78A4: ???
   - 7870-???: ??? displays section 25, tag 28, "Ali Baba" ??
     - Possibly combat status window update?
 - 78A5-7917: ???
   - 78AA-???: ??? displays section 25, tag 29, "Scheherazade" ??
     - Possibly combat status window update?
   - 78E3-???: ??? displays section 25, tag 30, "Cherubim" ??
     - Possibly combat status window update?
 - 7918-798A: ???
   - 791D-???: ??? displays section 25, tag 30, "Cherubim" ??
     - Possibly combat status window update?
   - 7956-???: ??? displays section 25, tag 31, "Goku" ??
     - Possibly combat status window update?
 - 798B-79AF: ??? external entry ?? displays "HP" ??
 - 79B0-79D4: ??? external entry ?? displays "MP" ??
 - 79D5-79F5: ??? external entry ?? sets window palette based on A and
   X, using $c8 (??) as temporary ??
   - 79EC-???: ???
   - 79F1-???: ???
 - 79F6-7A08: ??? external entry ??
 - 7A09-7A7F: ??? external entry ?? animates monster graphic onto
   display, shows "monster appears" text for each monster.
   - 7A09-7A0F: If $2400 (enemy 0 ??) is #$01 (??), jump to 7A1D.
   - 7A10-7A14: Load #$01 into A and call $01.415e->7268 to ??
     (animate the (invisible) monster sprites out of the way?)
   - 7A15-7A17: Call 7DAB to show "monster approaching" message and
     set the sprite tiles for the monster.
   - 7A18-7A1C: Load #$00 into A, call $01.415e->7268 to ?? (animate
     the (now-visible) monster sprites back into position), and
     return.
   - 7A1D-???: ???
   - 7A22-???: ???
   - 7A41-???: ???
   - 7A55-???: ???
   - 7A74-7A7F: ??? BGM change ??, call 7DAB to show "monster
     approaching" message, and return.
 - 7A80-7AAE: ???
   - 7A8E-???: ???
   - 7A9D-???: ???
 - 7AAF-7AC4: ??? unreferenced code ??  Using $c8.W (??) as a
   temporary, computes A times 4 plus $1100 into YX (SATB address
   calculation?) ??
 - 7AC5-7B25: ???
   - 7AD9-???: ???
   - 7AE1-???: ???
   - 7AE9-???: ???
   - 7AF1-???: ???
   - 7AF9-???: ???
   - 7B01-???: ???
   - 7B09-???: ???
   - 7B11-???: ???
 - 7B26-7B43: ???
   - 7B33-???: ???
   - 7B3E-???: ???
 - 7B44-7B61: ???
   - 7B51-???: ???
   - 7B5C-???: ???
 - 7B62-7B87: ???
   - 7B71-???: ??? gets a byte from the RNG ??
   - 7B77-???: ???
   - 7B82-???: ???
 - 7B88-7BAD: ??? gets a byte from the RNG ??
   - 7B97-???: ???
   - 7B9D-???: ???
   - 7BA8-???: ???
 - 7BAE-7BD3: ??? gets a byte from the RNG ??
   - 7BBD-???: ???
   - 7BC3-???: ???
   - 7BCE-???: ???
 - 7BD4-7BF9: ??? gets a byte from the RNG ??
   - 7BE3-???: ???
   - 7BE9-???: ???
   - 7BF4-???: ???
 - 7BFA-7C0F: ???
   - 7C0C-???: ???
 - 7C10-7C60: ??? get a 6-bit random number, optionally not including
   some of a set of values?
   - 7C15-???: ???
   - 7C5B-???: ???
 - 7C61-7C74: ???
 - 7C75-7DAA: ??? reads VRAM ??
   - 7CB2-???: ???
   - 7CB7-???: ???
   - 7CC8-???: ???
   - 7CCD-???: ???
   - 7CDE-???: ???
   - 7CE3-???: ???
   - 7CF4-???: ???
   - 7CF8-???: ??? writes VRAM ??
   - 7D0B-???: ??? writes VRAM ??
   - 7D33-???: ??? writes VRAM ??
   - 7D5B-???: ??? writes VRAM ??
   - 7D83-???: ??? writes VRAM ??
 - 7DAB-7DE3: ??? displays monster name, displays section 25, tag 2,
   which currently escapes me as far as intepretation goes ??
   - Something about slowly something approaching ??
   - This is the opening text for each enemy at the start of combat.
   - 7DAB-7DB7: Position text cursor to 20 + (two times monster index)
     vertical, 2 horizontal.
   - 7DB8-7DBC: ??? set per-character output delay for messaging ??
   - 7DBD-7DC0: Set text font and color to normal (#$02 high byte).
   - 7DC1-7DCF: Read byte addresed by $3b02.W (monster data record
     pointer), storing in $ca (temp??).
   - 7DD0-7DDF: Display section 30 (monster names), tag loaded from
     $ca (temp??), advance the cursor by one space, and display
     section 25, tag 2 (monster approaching message?).
   - 7DE0-7DE3: Call $01.40fa->$02.738a to configure enemy graphics,
     and return.
 - 7DE4-7FFF: Padding (all $01 bytes).

Bank 44

Map data.

Bank 45

Aside from the first half of the bank containing map data, seems to be a lot of combat item/spell effects, some script references (as data), and possibly part of the attract-mode sequence?

 - 6000-6FFF: Map data.
 - 7000-70C5: Script section and tag pairs, merchants, passwords,
   menuing and the like? (see $03.76e2)
 - 70C6-70F2: ??? external entry ??
   - 70CE-???: ???
   - 70DC-???: ???
 - 70F3-7199: ??? picks a random location out of a set of 28, and sets
   various location parameters (map group, municipality?,
   coordinates?) from that.
   - 712A-7199: ??? data, location map groups, municipalities, and
     coordinates ??
 - 719A-71A1: ??? opens the dialogue window, but with an odd color
   palette ??
 - 71A2-71CF: ??? displays section 0, tags 10 through 15 ??
   - 71B2-???: ??? clocks RNG for effect, reads controllers ??
   - 71C5-???: ???
 - 71D0-7206: ??? selects area map, loads bank $0d to VRAM $6xxx ??
 - 7207-7240: ??? palette fade-in ??
   - 721E-???: ??? palette fade-in ??
   - 722F-???: ???
 - 7241-726F: ??? palette fade-in ??
   - 725E-???: ??? palette fade-in ??
   - 726F-726F: Return.
 - 7270-7283: ??? palette fade-in ??
 - 7284-7297: ??? palette fade-out ??
 - 7298-72EA: Display selected item/spell description if current menu
   selection is an item or spell.
   - Takes no parameters outside of the current menuing state, returns
     X=1 if it did nothing and X=0 if it displayed a message.
   - This is the SELECT-button handler for non-combat menus.
   - 7298-729D: Store the text cursor position on the stack.
   - 729E-72AE: If the selected menu item script section is #$1f
     (section 31, item names), load the script tag into A and jump to
     72BD.
   - 72AF-72B6: If the selected menu item script section is not #$1d
     (section 29, spell names), set X to one and jump to 72DD.
   - 72B7-72BC: Load the currently selected menu item script tag into
     A and add 56 ($38).
   - 72BD-72CB: Push the computed script tag (in A) onto the stack,
     call $12.75a3 to ??, call $03.7600 to open window $00, pop the
     script tag off the stack into X, set Y to script section #$1c
     (section 28, item/spell descriptions), and call $12.7170 to
     display it.
   - 72CC-72D2: Loop calling E10A to read the controllers until no
     buttons are pressed.
   - 72D3-72DB: ??? Display indexed message $72e4[$2fa3] ??
   - 72DC-72DC: Clear X.
   - 72DD-72E3: Restore the text cursor position from the stack and
     return.
   - 72E4-72EA: Message indices for 72D3.
 - 72EB-742C: ??? external entry ?? displays "<character>は <spell>の
   magic word intoned", and possibly section 24, tag 1, "not enough
   MP" ??
   - 7370-???: ??? displays section 24, tag 24, "however, magic has
     been sealed" ??
   - 73A6-???: ??? dispatch on something, prob. the spell cast ??
   - 73DD-???: ???
   - 73E2-???: ???
   - 73E7-???: ???
   - 73EC-???: ???
   - 73F1-???: ???
   - 73F6-???: ???
   - 73FB-???: ???
   - 7400-???: ???
   - 7405-???: ???
   - 740A-???: ???
   - 740F-???: ???
   - 7414-???: ???
   - 7419-???: ???
 - 742D-7488: ???
   - 745B-???: ???
   - 7468-???: ??? displays section 24, tag 2, "points of HP
     recovered" ??
 - 7489-7490: ??? displays section 24, tag 5, "however, nothing
   happened" ??
 - 7491-74A4: ???
 - 74A5-74C3: ???
   - 74AE-???: ???
   - 74B8-???: ???
 - 74C4-74E2: ???
   - 74CD-???: ???
   - 74D7-???: ???
 - 74E3-74F5: ???
   - 74EE-???: ??? displays section 34, tag 5, "however, nothing
     happened" ??
 - 74F6-7509: ???
 - 750A-751A: ???
   - 750D-???: ???
 - 751B-7598: ???
   - 7530-???: ???
   - 7535-???: ???
   - 7567-???: ??? displays "<name>は <???> points of <something>
   increased" ??
 - 7599-76E1: ???
   - 75B2-???: ???
   - 75CF-???: ???
   - 768B-???: ???
   - 7696-???: ??? displays "<monster>から <???> points of MP
     <something>
   - 76C7-???: ??? displays section 24, tag 9, "MPを<something>
     <something past-tense-negative>"
   - 76CE-???: ???
 - 76E2-76E9: ??? displays section 24, tag 5, "however, nothing
   happened" ??
 - 76EA-711B: ???
   - 76EA-76F5: Set $3b06 (monster record id?) to #$00, set YX to
     #$2405 (monster 0 ??), and call 771C to ??
   - 76F6-7701: Set $3b06 (monster record id?) to #$01, set YX to
     #$2415 (monster 1 ??), and call 771C to ??
   - 7702-770D: Set $3b06 (monster record id?) to #$02, set YX to
     #$2425 (monster 2 ??), and call 771C to ??
   - 770E-7719: Set $3b06 (monster record id?) to #$03, set YX to
     #$2435 (monster 3 ??), and call 771C to ??
   - 771A-771B: Clear carry, and return.
 - 771C-7794: ???
   - 771C-7721: Store YX to $3039.W (??).
   - 7722-7727: Call $01.410e->$02.7299 to ?? (compute the address of
     the targetted monster record into $3b02.W?), and
     $01.4122->$02.65c5 to ?? (copy 16 bytes from address in $3b02.W
     to $3b3c-#3b4b?)
   - 7728-7730: If $3b3d.W (targetted monster HP??) is zero, return.
   - 7731-7737: Call $01.4078->?? to get a byte from the RNG, mask it
     down to the low two bits, and jump to 7731 if the result is zero.
   - 7738-7740: ???
   - 7741-775D: ??? displays "<monster>は <???> points of <something>
     decreased" ?? (defense power?)
   - 775E-776A: Read the byte addressed by $3039.W (??) into A.
   - 7784-???: ???
 - 7795-7812: ???
   - 77AE-???: ??? displays something about magic being sealed ??
   - 77F3-???: ??? displays something about magic being sealed ??
   - 7803-???: ??? displays something about magic not being bound ??
 - 7813-782C: ??? displays "<command>は" ??
 - 782D-784E: ???
   - 783C-???: ???
 - 784F-7864: ???
   - 785F-???: ???
 - 7865-7927: ??? external entry ?? displays "<character>は <item>を
   used", dispatches on item id, may display section 24, tag 5,
   "however, nothing happened" ??
   - From 7897-78CA is a dispatch on items that can be used this way
     (in combat?).
     - $01 (maria's pearl), $02 (smoke), $03 (coffee), $04 (ice?), $06
       (strength pot), $0c (12, solon's seal), $0d (13, raisins), $0e
       (14, cheer/vigor powder), $11 (17, monster fang), $12 (18, ???
       ball), $14 (20, karma slip), $17 (23, ara's light), $18 (24,
       babo's crest).
   - 78D3-???: ???
   - 78D8-???: ???
   - 78DD-???: ???
   - 78E2-???: ???
   - 78E7-???: ???
   - 78EC-???: ???
   - 78F1-???: ???
   - 78F6-???: ???
   - 78FB-???: ???
   - 7900-???: ???
   - 7905-???: ???
   - 790A-???: ???
   - 790F-???: ???
   - 7914-???: ???
 - 7928-7937: ??? displays section 24, tag 33, "everyone was cheered
   up" (??) ??
 - 7938-7942: ???
 - 7943-794D: ???
 - 794E-796C: ??? displays section 24, tag 34, "monster was frozen" ??
   - 7965-???: ??? displays section 24, tag 20, "however, item was
     <something>" ??
 - 796D-7972: ???
 - 7973-7985: ???
   - 7980-???: ???
 - 7986-7990: ???
 - 7991-799B: ???
 - 799C-79BE: ???
   - 79A9-???: ???
   - 79B3-???: ???
 - 79BF-79E1: ???
   - 79CC-???: ???
   - 79D6-???: ???
 - 79E2-79EC: ???
 - 79ED-79F2: ???
 - 79F3-7B00: ???
   - 79F8-???: ??? dispatches on a byte from the RNG ??
   - 7A0E-???: ???
   - 7A15-???: ???
   - 7A1C-???: ???
   - 7A23-???: ???
   - 7A26-???: ???
   - 7A37-???: ???
   - 7A48-???: ???
   - 7A5D-???: ???
   - 7A72-???: ???
   - 7A7A-???: ???
   - 7A81-???: ???
   - 7A8D-???: ???
   - 7A97-???: ???
   - 7A9F-???: ???
   - 7AA6-???: ??? displays section 24, tag 21, Sinbad doing something
     ("Hなことを") to Scheherazade, her yelling at him, and a sound
     effect of some sort ??
   - 7AD7-???: ???
   - 7AE0-???: ??? displays section 24, tag 22, something happening
     with/to a monster ??
   - 7AEC-???: ???
   - 7AF5-???: ??? displays section 24, tag 23, (??) ???
 - 7B01-7B27: ??? dispatches on a byte from the RNG ??
   - 7B24-???: ???
 - 7B28-7B59: ???
   - 7B56-???: ???
 - 7B5A-7BC0: ???
   - 7BB9-???: ??? displays section 24, tag 5, "however, nothing
     happened" ??
 - 7BC1-7C37: ???
   - 7BD6-???: ???
   - 7BFB-???: ???
   - 7C06-???: ???
   - 7C12-???: ??? displays section 24, tag 2, "point(s) of HP
     recovered" ??
 - 7C38-7CC1: ???
   - 7C4D-???: ???
   - 7C87-???: ???
   - 7C92-???: ???
   - 7C9E-???: ??? displays section 24, tag 15, "point(s) of MP
     recovered" ??
 - 7CC2-7D43: ???
   - 7CD7-???: ???
   - 7D10-???: ???
   - 7D20-???: ??? displays section 24, tag 16, "point(s) of
     <something> increased" (attack strength? defense?) ??
 - 7D44-7DC5: ???
   - 7D59-???: ???
   - 7D92-???: ???
   - 7DA2-???: ??? displays section 24, tag 3, "point(s) of
     <something> increased" (attack strength?  defense?) ??
 - 7DC6-7E44: ???
   - 7DDB-???: ???
   - 7E11-???: ???
   - 7E21-???: ??? displays section 24, tag 17, "point(s) of
     <something> increased" ??
 - 7E45-7E51: ??? falls through to 7E52 ??
 - 7E52-7E92: ???
   - 7E61-???: ???
   - 7E6E-???: ???
   - 7E8B-???: ??? displays section 24, tag 20, "however, the item
     <something>" (has no effect?) ??
 - 7E93-7EB6: ???
 - 7EB7-???: ??? see $03.6f9d ?? 5-byte stride (per $03.6f7c)?
 - 7EB8-???: ??? see $03.6f47 ?? 5-byte stride (per $03.6f7c)?

Bank 46

Map data.

Bank 47

As is typical for the odd-numbered $4x series banks, the first half is map data. We also have some odd bits of character interaction, the inkeeper save-ram interaction, the total-party-wipe logic, some item behavior, and enemy spellcasting during combat.

 - 6000-6FFF: Map data.
 - 7000-701C: ??? external entry ??
   - 7011-???: ???
   - 7014-???: ???
 - 701D-702B: ?? displays indexed fragment #$1e (something to do with
   the father) ??
 - 702C-7063: ?? runs inkeeper interaction ??
   - 705A-???: ???
   - 7060-???: ???
 - 7064-707C: ?? does something with indexed window #$19 ??
 - 707D-714A: ?? inkeeper save-ram interaction menuing ??
   - 7087-???: ???
   - 7098-???: ???
   - 70D5-???: ???
   - 70DA-???: ???
   - 70DD-???: ???
   - 70EA-???: ???
   - 70FD-???: ???
   - 710C-???: ???
   - 7120-???: ???
   - 712D-???: ???
   - 713C-???: ???
   - 7142-714A: Table of indexed message IDs.
     - the identified messages are all known to do with save data, the
       unidentified messages presumably also are known to do with save
       data.
     - This is actually three different tables or so.
 - 714B-715A: ?? move cursor down by X multiples of menu item vertical
   space ??
   - 7151-???: ???
   - 715A-715A: Return.
 - 715B-719E: ???
   - 7164-???: ???
   - 7181-???: ???
   - 7188-???: ???
   - 7199-719E: ?? data, coordinate pairs ??
 - 719F-71D8: ???
   - 71A7-???: ?? displays indexed message #$51 (??), runs indexed
     menu #$0c (something to do with backup RAM issues?)
   - 71BD-???: ???
   - 71C6-???: ???
 - 71D9-71DB: Indirect jump through $2f9a.
 - 71DC-71DC: Return.  (Dead code??)
 - 71DD-71E4: ?? function pointers, see $47.71c6-$71d3 ??
 - 71E5-71F7: ??? backup ram "proceed" option?
   - 71ED-???: ??? falls through to 71F8 ??
 - 71F8-71F8: Return.
   - ?? backup ram "stop / give up" option, but table entry possibly
     not used? (see 71B1-71BC)
 - 71F9-7209: ??? backup ram "return" option?
   - 7201-???: ???
   - 7209-7209: Return.
 - 720A-724B: ??? backup ram "erase" option?
   - 7210-???: ???
   - 722C-???: ???
   - 724B-724B: Return.
 - 724C-7261: ??? calls $07.d9a9 (backup memory function) ??
 - 7262-726F: ??? calls $07.d9ad (backup memory function) ??
 - 7270-72A2: ???
   - 7276-???: ???
   - 729E-???: ???
 - 72A3-72B8: ??? displays save filenames ??
   - 72A7-???: ???
   - 72B8-72B8: Return.
 - 72B9-72F2: ??? ASCII-to-font mapping for save filenames ??
   - 72BA-???: ???
   - 72C6-???: ???
   - 72CF-???: ???
   - 72D7-???: ???
   - 72DF-???: ???
   - 72E5-???: ???
   - 72ED-???: ???
 - 72F3-7336: ?? data, coordinate pairs ??
 - 7337-73C8: ??? external entry ?? handle total party wipe ??
   - 7368-???: ??? displays script section 25, tag 32, total party
     wipe message ??
   - 736E-???: ???
   - 7384-???: ???
   - 7390-???: ??? halves party gold amount
   - 7396-???: ???
   - 73A2-???: ??? dispatches on map group ??
   - 73AE-???: ???
   - 73B1-???: ??? reads controllers ??
   - 73C5-???: ???
 - 73C9-73E6: ??? external entry ??
   - 73D3-???: ???
   - 73DA-???: ???
   - 73E0-???: ???
   - 73E2-???: ???
   - 73E4-???: ??? sets map group ??
 - 73E7-7469: ??? external entry ?? trying to use a "fox leaf/blade"
   ??
   - Looks like it transforms to a random item drawn from a bounded
     list?
   - Displays a squence of fox-leaf-item-name, indexed fragment #$2a
     ("は"), target-item-name, indexed fragment #$2b ("に"), indexed
     fragment #$5e ("かわった", changed/became).
   - 7432-7469: Validity flags for possible item targets ??
 - 746A-748F: ??? external entry ??
   - 747A-???: ???
   - 748C-???: ???
 - 7490-74BF: ?? function pointers, see 747D-7488, one for each of the
   first 24 items (the non-equipment items) ??
 - 74C0-74C9: ???
 - 74CA-74DE: ???
   - 74DC-???: ???
   - 74DE-74DE: Return.
 - 74DF-74ED: ??? dispatches on map group id ??
   - 74EB-???: ???
 - 74EE-74F3: ???
 - 74F4-7508: ??? falls through to 7509, or jumps to 74EE ??
 - 7509-7510: ???
 - 7511-752D: ??? dispatches on map group id, may jump to 755E ??
 - 752E-753E: ??? may jump to 755E ??
 - 753F-754D: ???
 - 754E-755D: ???
 - 755E-7560: ???
 - 7561-7571: ??? calls $01.5c53 to do a sprite-vs.-bg collision check
   ??
   - 756F-7571: ???
 - 7572-7573: ??? data, tile vectors for $01.5c53 ???
 - 7574-7576: ??? data, tile vectors for $01.5c53 ???
 - 7577-757B: ??? data, tile vectors for $01.5c53 ???
 - 757C-???: ??? may branch to 7593 ??
   - 758A-???: ??? may branch to 7593 ??
 - 7593-7595: ??? loads #$ff to A and returns ??
 - 7596-75BD: ??? external entry ?? calls $07.d98b (backup memory
   function), displays indexed fragment #$19 (backup memory not
   initialized, pt. 1?) ??
   - 75BD-75BD: Return.
 - 75BE-75D4: ??? displays indexed fragments #$24 (backup memory not
   initilized, pt. 2) and #$53 (backup initialization complete?) ??
   - 75D4-75D4: Return.
 - 75D5-760D: ??? external entry ?? maybe jumps to reset entry ??
   - 760D-760D: Return.
 - 760E-761B: ??? does a palette fade-in ??
 - 761C-762F: ??? does a palette fade-out ??
 - 7630-765C: ??? external entry ?? displays indexed fragment #$0d
   (merchant when trying to sell plot-critical item)??
   - 763B-???: ???
   - 7647-???: ???
   - 7659-???: ???
 - 765D-778F: ??? external entry ?? handle interaction with boats ??
   - 765D-765F: Set $2c0a (??) to zero.
   - 7660-7693: ??? Dispatch on $aa (person in area) ??
     - $01: jump to 7694.
     - $02: jump to 76B2.
     - $03: jump to 76D7.
     - $04: jump to 7708.
     - $05: jump to 7739.
     - $06: jump to 776A.
     - $07: jump to 777A.
     - default: return.
   - 7694-7699: If $2c20 (gave Darius the letter) is zero, return.
   - 769A-76A1: Zero $99 (designated encounter flag?) and $2c4e.W
     (??).
   - 76A2-76B1: Call 7790 to ??, 780F to ??, 78C7 to ??, 784F to ??,
     7896 to ??, and return.
   - 76B2-76B8: If $2240 (Scheherazade's current HP) is #$ff (not in
     party), jump to 76CC.
   - 76B9-76C7: Call 7790 to ??, 780F to ??, 78CD to ??, 784F to ??,
     and 7896 to ??
   - 76C8-76CB: Set $2c20 (gave Darius the letter) to zero (?!), and
     return.
   - 76CC-76D6: Call $01.5b97 to open the dialogue window, display
     section 9, tag 6 (something Darius says??), and return.
   - 76D7-???: ???
   - 76E2-???: ???
   - 76F5-???: ???
   - 7708-???: ???
   - 7713-???: ???
   - 7726-???: ???
   - 7739-???: ???
   - 7744-???: ???
   - 7757-???: ???
   - 776A-???: ???
   - 777A-???: ???
   - 7780-???: ???
 - 7790-780E: ??? does some party sprite setup ??
 - 780F-784E: ??? does some non-party sprite setup ??
 - 784F-7855: ???
 - 7856-7895: ??? does some non-party sprite setup ??
 - 7896-78C6: ??? does some BGM, party sprite 0 (Sinbad), and tile
   animation changes ??
 - 78C7-78CC: ???
 - 78CD-78D2: ???
 - 78D3-78F6: ???
 - 78F7-791A: ???
 - 791B-793E: ???
 - 793F-7962: ???
 - 7963-7990: ???
 - 7991-79BE: ???
 - 79BF-79CE: ???
 - 79CF-79DE: ???
 - 79DF-79E8: ??? stuffs UP input for a step (or A steps?) ??
 - 79E9-79F2: ??? stuffs DOWN input for a step (or A steps?) ??
 - 79F3-79FC: ??? stuffs LEFT input for a step (or A steps?) ??
 - 79FD-7A06: ??? stuffs RIGHT input for a step (or A steps?) ??
 - 7A07-7A29: ???
   - 7A29-7A29: Return.
 - 7A2A-7AB6: ??? external entry ??
   - 7A30-???: ???
   - 7A8A-???: ??? updates party sprite SATB entries ??
   - 7AB6-7AB6: Return.
 - 7AB7-7AC9: ???
   - 7ABE-???: ???
   - 7AC5-???: ???
 - 7ACA-7C47: ??? external entry ?? enemy spellcasting ??
   - 7B1F-???: ???
   - 7B67-???: ???
   - 7B8E-???: ???
   - 7B99-???: ???
   - 7BA4-???: ???
   - 7BAB-???: ???
   - 7BB0-???: ???
   - 7BCC-???: ???
   - 7BD6-???: ???
   - 7BE0-???: ???
   - 7BE8-???: ???
   - 7C0C-???: ???
   - 7C11-???: ???
   - 7C16-???: ???
   - 7C1B-???: ???
   - 7C20-???: ???
   - 7C25-???: ???
   - 7C2A-???: ???
   - 7C2F-???: ???
   - 7C34-???: ???
 - 7C48-7D2F: ???
   - 7CCE-???: ???
   - 7CEE-???: ??? displays section 24, tag 2, "points of HP
     recovered".
 - 7D30-7D3F: ???
 - 7D40-7D5D: ???
   - 7D49-???: ???
   - 7D53-???: ???
 - 7D5E-7D6E: ???
   - 7D61-???: ???
 - 7D6F-7DDA: ???
   - 7D7E-???: ???
   - 7DB0-???: ??? displays section 24, tag 3, "points of <something>
     increased".
 - 7DDB-7ED8: ???
   - 7DED-???: ???
   - 7DF2-???: ???
   - 7E0C-???: ???
   - 7E86-???: ??? displays character name; section 24, tag 8, "から";
     ???; section 24, tag 7, "points of MP うばった" (??)
   - 7EBE-???: ??? displays section 24, tag 9, something about MP
     and... "うばうこと" ??
   - 7EC5-???: ???
 - 7ED9-7F63: ???
   - 7EEB-???: ??? displays character name; section 24, tag 10, "magic
     is sealed".
   - 7F36-???: ??? displays character name; section 24, tag 12,
     something about magic being sealed ??
   - 7F4D-???: ??? displays character name; section 24, tag 11,
     something about magic ??
 - 7F64-7F78: ???
   - 7F70-???: ???
   - 7F75-???: ???
 - 7F79-7F91: ??? data, 16-bit stride (see 7AF2 and 7AF8). ??
 - 7F92-7FFF: Padding (all $01 bytes).

Banks 48-4f

Map data.