{
 "chunk": "corrections",
 "unit": "game/highMemoryFBB8",
 "notes": {
  "FD70": {
   "unit": "game/highMemoryFBB8",
   "block": [
    "radarDroneShapesRle - 180 bytes, $FD70-$FE23: an RLE-compressed set of eight 24x21 sprite",
    "shapes whose first byte ($01) is the escape marker.  runMissileScreen ($7587, comcen screens",
    "overlay) points A/Y at it with LDA #$70 / LDY #$FD ($7592-$7594) and calls unpackRleTo0200",
    "($67CB) at $7596; the unpacker always writes exactly 512 bytes to $0200-$03FF, so the block",
    "becomes eight shapes on a 64-byte stride (63 sprite bytes plus one spare byte each).",
    "loadDirectionShapeSprite ($3340) copies $0200 + 64*shape into sprite 0 ($8A00) or sprite 5",
    "($8B40); on this screen the caller is cmdDroneMove at $5322, which passes (heading + 4) AND 7 -",
    "the heading turned 180 degrees, because a received command's coordinates are mirrored - to draw",
    "the opponent's drone blip.  Decoded, the eight shapes are a small top-down aircraft glyph in the",
    "middle byte of sprite rows 7-13 (north = $08,$1C,$7F,$08,$08,$08,$1C), in compass order",
    "N, NE, E, SE, S, SW, W, NW.",
    "Correction: the first survey pass labelled this arrowGlyphTable, read the escape/count/value",
    "triples as '2-byte record headers' and stated that 'no static reference to this table exists",
    "anywhere in the disassembly ... it may be unused leftover data'.  That is wrong: the block is",
    "live data, decompressed every time the missile/radar screen is entered.  No reference appears in",
    "XREF.txt only because the address reaches the unpacker as two immediate operands in A/Y, never as",
    "an absolute operand."
   ]
  },
  "FE24": {
   "unit": "game/highMemoryFBB8",
   "block": [
    "droneScreenShapesRle - 367 bytes, $FE24-$FF92: the second RLE stream, escape marker $05.",
    "enterDroneScreen ($7FE6, comcen screens overlay) loads A/Y with LDA #$24 / LDY #$FE",
    "($7FEC-$7FEE) and calls unpackRleTo0200 ($67CB) at $7FF0, which again expands it to exactly 512",
    "bytes at $0200-$03FF = eight shapes on a 64-byte stride.  The drone screen copies one of them",
    "into sprite 5 through loadDirectionShapeSprite ($802A when the screen is reset, $810B at launch,",
    "$829E on every camera step) as the heading indicator; the shapes are the big top-down drone",
    "silhouettes in the same compass order N, NE, E, SE, S, SW, W, NW.",
    "Correction: the survey pass called this aircraftShapeTable, started it three bytes early at",
    "$FE21 (those three bytes are the last run of the $FD70 stream, not a header), described the",
    "$05,$xx run tokens as record headers and judged it 'probably stale data' that 'nothing",
    "references'.  All of that is wrong - see the note at $FD70 for why the reference does not show up",
    "in XREF.txt."
   ]
  },
  "FF90": {
   "unit": "game/highMemoryFBB8",
   "block": [
    "$FF90-$FF92 is not a block of its own.  It is the last token of the compressed stream that starts",
    "at $FE24: escape marker $05, count $0E, value $00 - the 14 zero bytes that pad the eighth shape",
    "out to its 64-byte slot and bring the unpacker's output to exactly 512 bytes.  Decoding the",
    "stream byte by byte confirms it: the run that begins here is consumed at $FF92, and the very next",
    "byte, $FF93, is the first byte of droneViewfinderSprite, the 63-byte uncompressed reticle that",
    "launchDrone copies into sprite 2 at $80EB.  So nothing at the top of this block is spare:",
    "$FD70-$FFD1 is two compressed sprite sets and one raw sprite, back to back, ending exactly at",
    "$FFD1 just below the CPU vectors.",
    "Correction: the survey pass labelled $FF90 unknownShapeTail, gave it 66 bytes and called it 'most",
    "likely unused leftover memory ... stale bytes that resemble the end of the $8800 message block'.",
    "It is neither unused nor related to $8800 - that block's tail ($897F-$89FF) is an unrelated",
    "$00/$FF dither pattern and does not match these bytes."
   ]
  }
 }
}
