{
  "_notes": [
    "Compiled by Tom Collins, based on flash_l1 (Flash System 6) map.",
    "Flash (Williams, 1978)",
    "https://www.ipdb.org/machine.cgi?id=871",
    "This map is for the original System 4 version of Flash."
  ],
  "_fileformat": 0.8,
  "_metadata": {
    "version": 3,
    "copyright": "Copyright (C) 2025 by Tom Collins <tom@tomlogic.com>",
    "license": "GNU Lesser General Public License v3.0",
    "platform": "williams-system4",
    "roms": [
      "flash_l2"
    ]
  },
  "game_state": {
    "credits": {
      "label": "Credits",
      "start": "0x019A",
      "length": 2,
      "encoding": "bcd"
    },
    "scores": [
      {
        "label": "Player 1",
        "start": "0x00",
        "length": 3,
        "encoding": "bcd"
      },
      {
        "label": "Player 2",
        "start": "0x04",
        "length": 3,
        "encoding": "bcd"
      },
      {
        "label": "Player 3",
        "start": "0x08",
        "length": 3,
        "encoding": "bcd"
      },
      {
        "label": "Player 4",
        "start": "0x0C",
        "length": 3,
        "encoding": "bcd"
      }
    ],
    "current_player": {
      "label": "Player",
      "start": "0x55",
      "encoding": "int",
      "offset": 1
    },
    "player_count": {
      "label": "Player Count",
      "start": "0x56",
      "encoding": "int",
      "offset": 1
    },
    "current_ball": {
      "label": "Ball",
      "start": "0x03",
      "encoding": "bcd"
    },
    "ball_count": {
      "label": "Ball Count",
      "start": "0x01A6",
      "length": 2,
      "encoding": "bcd"
    },
    "max_credits": {
      "label": "Maximum Credits",
      "start": "0x018C",
      "length": 2,
      "encoding": "bcd"
    },
    "free_play": {
      "_notes": "free play enabled when max_credits==0",
      "label": "Free Play",
      "start": "0x018C",
      "length": 2,
      "encoding": "bool",
      "invert": true
    },
    "tilted": {
      "label": "Tilted",
      "start": "0x7A",
      "mask": "0x02",
      "encoding": "bool"
    },
    "game_over": {
      "label": "Game Over",
      "start": "0x7A",
      "mask": "0x01",
      "encoding": "bool"
    }
  },
  "high_scores": [
    {
      "label": "First Place",
      "short_label": "1st",
      "score": {
        "start": "0x0148",
        "encoding": "bcd",
        "length": 6
      }
    }
  ],
  "audits": {
    "Standard Audits": {
      "01": {
        "label": "Coins, left chute",
        "start": "0x0106",
        "length": 6,
        "encoding": "bcd"
      },
      "02": {
        "label": "Coins, center chute",
        "start": "0x010C",
        "length": 6,
        "encoding": "bcd"
      },
      "03": {
        "label": "Coins, right chute",
        "start": "0x0112",
        "length": 6,
        "encoding": "bcd"
      },
      "04": {
        "label": "Total Paid Credits",
        "start": "0x0118",
        "length": 6,
        "encoding": "bcd"
      },
      "05": {
        "label": "Special Credits",
        "start": "0x011E",
        "length": 6,
        "encoding": "bcd"
      },
      "06": {
        "label": "Replay Score Credits",
        "start": "0x0124",
        "length": 6,
        "encoding": "bcd"
      },
      "07": {
        "label": "Match Credits",
        "start": "0x012A",
        "length": 6,
        "encoding": "bcd"
      },
      "08": {
        "label": "Total Credits",
        "start": "0x0130",
        "length": 6,
        "encoding": "bcd"
      },
      "09": {
        "label": "Total Extra Balls",
        "start": "0x0136",
        "length": 6,
        "encoding": "bcd"
      },
      "10": {
        "label": "Total Ball Time",
        "start": "0x013C",
        "length": 6,
        "encoding": "bcd",
        "units": "minutes"
      },
      "11": {
        "label": "Total Balls Played",
        "start": "0x0142",
        "length": 6,
        "encoding": "bcd"
      },
      "12": {
        "label": "Current HSTD",
        "start": "0x0148",
        "encoding": "bcd",
        "length": 6
      },
      "99": {
        "label": "Check Byte",
        "start": "0x0180",
        "length": 2,
        "encoding": "int",
        "special_values": {
          "90": "valid"
        }
      }
    }
  },
  "adjustments": {
    "Standard Adjustments": {
      "13": {
        "label": "Backup HSTD",
        "start": "0x0182",
        "length": 2,
        "encoding": "bcd",
        "scale": 10000
      },
      "14": {
        "label": "Replay 1 Score",
        "start": "0x0184",
        "length": 2,
        "encoding": "bcd",
        "scale": 10000
      },
      "15": {
        "label": "Replay 2 Score",
        "start": "0x0186",
        "length": 2,
        "encoding": "bcd",
        "scale": 10000
      },
      "16": {
        "label": "Replay 3 Score",
        "start": "0x0188",
        "length": 2,
        "encoding": "bcd",
        "scale": 10000
      },
      "17": {
        "label": "Replay 4 Score",
        "start": "0x018A",
        "length": 2,
        "encoding": "bcd",
        "scale": 10000
      },
      "18": {
        "label": "Maximum Credits",
        "start": "0x018C",
        "length": 2,
        "encoding": "bcd",
        "special_values": {
          "0": "Free Play"
        }
      },
      "19": {
        "label": "Pricing Control",
        "start": "0x018E",
        "length": 2,
        "encoding": "bcd",
        "min": 0,
        "max": 7,
        "special_values": {
          "0": "Manual",
          "1": "1/$0.25, 3/$0.50",
          "2": "1/$0.25",
          "3": "1/1DM, 3/2DM, 14/5DM",
          "4": "1/1F, 6/5F",
          "5": "1/1F, 7/5F",
          "6": "1/25 Cent, 4/Guilder",
          "7": "1/50Y, 2/100Y"
        }
      },
      "20": {
        "label": "Left Coin Slot Multiplier",
        "start": "0x0190",
        "length": 2,
        "encoding": "bcd"
      },
      "21": {
        "label": "Center Coin Slot Multiplier",
        "start": "0x0192",
        "length": 2,
        "encoding": "bcd"
      },
      "22": {
        "label": "Right Coin Slot Multiplier",
        "start": "0x0194",
        "length": 2,
        "encoding": "bcd"
      },
      "23": {
        "label": "Coin Units Required for Credit",
        "start": "0x0196",
        "length": 2,
        "encoding": "bcd"
      },
      "24": {
        "label": "Coin Units Bonus Point",
        "start": "0x0198",
        "length": 2,
        "encoding": "bcd"
      },
      "26": {
        "label": "HSTD Credits",
        "start": "0x019C",
        "length": 2,
        "encoding": "bcd"
      },
      "28": {
        "label": "Match",
        "start": "0x01A0",
        "length": 2,
        "encoding": "enum",
        "values": [
          "On",
          "Off"
        ]
      },
      "29": {
        "label": "Special Awards",
        "start": "0x01A2",
        "length": 2,
        "encoding": "enum",
        "values": [
          "Credit",
          "Extra/Bonus Ball",
          "50,000 Points"
        ]
      },
      "30": {
        "label": "Replay Award",
        "start": "0x01A4",
        "length": 2,
        "encoding": "enum",
        "values": [
          "Credit",
          "Extra/Bonus Ball"
        ]
      },
      "31": {
        "label": "Number of Balls",
        "start": "0x01A6",
        "length": 2,
        "encoding": "bcd"
      },
      "32": {
        "label": "Tilt Warnings",
        "start": "0x01A8",
        "length": 2,
        "encoding": "bcd",
        "min": 1,
        "max": 9
      }
    },
    "Game Adjustments": {
      "27A": {
        "label": "Eject Hole Lamps",
        "start": "0x019E",
        "length": 1,
        "encoding": "enum",
        "values": [
          "lamps restored",
          "lamps not restored"
        ]
      },
      "27B": {
        "label": "Play",
        "start": "0x019F",
        "length": 1,
        "encoding": "enum",
        "values": [
          "n/a",
          "5,000 lamp lit initially",
          "5,000 lamp not lit initially",
          "n/a",
          "5,000 lamp not lit initially, no extra ball"
        ]
      },
      "33": {
        "label": "Background Sound",
        "start": "0x01AA",
        "length": 2,
        "encoding": "enum",
        "values": [
          "off",
          "on"
        ]
      },
      "34": {
        "label": "SUPER FLASH Scoring",
        "start": "0x01AC",
        "length": 2,
        "encoding": "enum",
        "values": [
          "awards 50,000 points",
          "awards extra ball"
        ]
      },
      "35": {
        "label": "SUPER FLASH Restore",
        "start": "0x01AE",
        "length": 2,
        "encoding": "enum",
        "values": [
          "restores",
          "does not restore"
        ]
      }
    }
  }
}
