{
  "_notes": [
    "Compiled by Tom Collins.",
    "Game uses a 4-bit nvram (256x4), so only uses the low nibble of each byte.",
    "Game stores 61 bytes of data in triplicate at offsets 0, 61 and 122.",
    "If a value in one location doesn't match the other two, it's replaced by the other value.",
    "If a value differs in all three locations, it's replaced with a default value.",
    "Note that offsets 248 through 252 are 4-bit checksums of each of the high scores.",
    "Modified version of 80b-8digit-B-12KB.map.json with game-specific DIP switch entries."
  ],
  "_fileformat": 0.8,
  "_metadata": {
    "version": 1,
    "copyright": [
      "Copyright (C) 2024 by Tom Collins <tom@tomlogic.com>",
      "Copyright (C) 2025 by Tom Collins <tom@scorbit.io>"
    ],
    "license": "GNU Lesser General Public License v3.0",
    "platform": "gottlieb-system80b-10K",
    "roms": [
      "victory",
      "victryfp",
      "victrgfp",
      "victrffp",
      "victr101",
      "victr11",
      "victr12",
      "victr13"
    ],
    "values": {
      "off_on": [
        "off",
        "on"
      ],
      "_notes": [
        "pricing: X@Y credit incentives: X credits given after Y coins"
      ],
      "pricing": [
        "1 credit/coin",
        "2 credits/coin",
        "3 credits/coin",
        "4 credits/coin",
        "5 credits/coin",
        "6 credits/coin",
        "7 credits/coin",
        "8 credits/coin",
        "9 credits/coin",
        "10 credits/coin",
        "1 credit/2 coins",
        "2 credits/2 coins",
        "3 credits/2 coins",
        "4 credits/2 coins",
        "5 credits/2 coins",
        "6 credits/2 coins",
        "7 credits/2 coins",
        "8 credits/2 coins",
        "9 credits/2 coins",
        "10 credits/2 coins",
        "1 credit/3 coins",
        "2 credits/3 coins",
        "1 credit/4 coins",
        "3 credits/4 coins",
        "1 credits/5 coins",
        "incentive: 1@1, 1@2",
        "incentive: 1@2, 1@3, 1@4",
        "incentive: 1@2, 2@4",
        "incentive: 1@1, 1@2, 1@3, 2@4",
        "incentive: 1@1, 2@2, 1@3, 3@4",
        "incentive: 1@1, 2@2, 2@3, 2@4",
        "incentive: 1@3, 1@5"
      ]
    }
  },
  "game_state": {
    "credits": {
      "label": "Credits",
      "start": "0x1839",
      "encoding": "bcd",
      "length": 2
    },
    "scores": [
      {
        "_notes": [
          "Scores hack: need to ignore top bit (comma) and convert 0x4F ('O') to zero.",
          "Bytes are: 0x31 to 0x39, 0x20 (' '), and 0x4F ('O'); top bit set for comma.",
          "By setting nibble=low, we get 0x1 to 0x9, 0x0 and 0xF for those three bytes,",
          "which treats space and 'O' as zero."
        ],
        "label": "Player 1",
        "start": "0x0000",
        "length": 8,
        "nibble": "low",
        "encoding": "bcd"
      },
      {
        "label": "Player 2",
        "start": "0x000C",
        "length": 8,
        "nibble": "low",
        "encoding": "bcd"
      },
      {
        "label": "Player 3",
        "start": "0x0014",
        "length": 8,
        "nibble": "low",
        "encoding": "bcd"
      },
      {
        "label": "Player 4",
        "start": "0x0020",
        "length": 8,
        "nibble": "low",
        "encoding": "bcd"
      }
    ],
    "player_count": {
      "_notes": "set to 0 when game over",
      "label": "Player Count",
      "short_label": "Players",
      "start": "0xC0",
      "encoding": "int"
    },
    "current_player": {
      "_notes": "0-3; bit 7 (0x80) sometimes set",
      "label": "Current Player",
      "short_label": "P#",
      "start": "0xC1",
      "encoding": "int",
      "mask": "0x0F",
      "offset": 1
    },
    "current_ball": {
      "_notes": "stored as 0x31 to 0x35 ('1' to '5')",
      "label": "Ball",
      "start": "0x0A",
      "encoding": "bcd",
      "mask": "0x0F"
    },
    "ball_count": {
      "_notes": "set at startup from DIP switches; always 3 or 5",
      "label": "Balls Per Game",
      "start": "0xDF",
      "encoding": "bcd"
    },
    "extra_balls": {
      "_notes": "either 0 or 1, no stacking",
      "label": "Extra Balls",
      "start": "0xCA",
      "encoding": "int"
    },
    "max_credits": {
      "_notes": "set at startup from DIP switches",
      "label": "Maximum Credits",
      "start": "0xDE",
      "encoding": "bcd"
    },
    "game_over": {
      "_notes": "0x01 when in game, 0x00 when game over",
      "label": "Game Over",
      "encoding": "bool",
      "start": "0x57",
      "invert": true
    },
    "tilted": {
      "_notes": "0xF0 when tilted, 0x00 otherwise",
      "label": "Tilted",
      "encoding": "bool",
      "start": "0x58"
    },
    "free_play": {
      "_notes": "On tomlogic's competition ROMs, '-' for credits indicates Free Play",
      "label": "Free Play",
      "encoding": "bool",
      "invert": true,
      "start": "0x1E",
      "offset": -45
    }
  },
  "high_scores": [
    {
      "label": "High Score #1",
      "short_label": "1st",
      "initials": {
        "start": "0x18B7",
        "encoding": "ch",
        "default": "\u0000\u0000\u0000",
        "length": 6
      },
      "score": {
        "start": "0x18BD",
        "encoding": "bcd",
        "length": 7,
        "scale": 10
      }
    },
    {
      "label": "High Score #2",
      "short_label": "2nd",
      "initials": {
        "start": "0x18C4",
        "encoding": "ch",
        "default": "\u0000\u0000\u0000",
        "length": 6
      },
      "score": {
        "start": "0x18CA",
        "encoding": "bcd",
        "length": 7,
        "scale": 10
      }
    },
    {
      "label": "High Score #3",
      "short_label": "3rd",
      "initials": {
        "start": "0x18D1",
        "encoding": "ch",
        "default": "\u0000\u0000\u0000",
        "length": 6
      },
      "score": {
        "start": "0x18D7",
        "encoding": "bcd",
        "length": 7,
        "scale": 10
      }
    },
    {
      "label": "High Score #4",
      "short_label": "4th",
      "initials": {
        "start": "0x18DE",
        "encoding": "ch",
        "default": "\u0000\u0000\u0000",
        "length": 6
      },
      "score": {
        "start": "0x18E4",
        "encoding": "bcd",
        "length": 7,
        "scale": 10
      }
    },
    {
      "label": "High Score #5",
      "short_label": "5th",
      "initials": {
        "start": "0x18EB",
        "encoding": "ch",
        "default": "\u0000\u0000\u0000",
        "length": 6
      },
      "score": {
        "start": "0x18F1",
        "encoding": "bcd",
        "length": 7,
        "scale": 10
      }
    }
  ],
  "audits": {
    "Bookkeeping": {
      "01": {
        "label": "Left Chute Coins",
        "start": "0x1800",
        "encoding": "bcd",
        "length": 4
      },
      "02": {
        "label": "Right Chute Coins",
        "start": "0x1804",
        "encoding": "bcd",
        "length": 4
      },
      "03": {
        "label": "Center Chute Coins",
        "start": "0x1808",
        "encoding": "bcd",
        "length": 4
      },
      "04": {
        "label": "Total Plays",
        "start": "0x180C",
        "encoding": "bcd",
        "length": 4
      },
      "05": {
        "label": "Total Replays",
        "start": "0x1810",
        "encoding": "bcd",
        "length": 4
      },
      "07": {
        "label": "Extra Balls",
        "start": "0x1814",
        "encoding": "bcd",
        "length": 3
      },
      "08": {
        "label": "Tilts",
        "start": "0x1817",
        "encoding": "bcd",
        "length": 3
      },
      "09": {
        "label": "Specials",
        "start": "0x181A",
        "encoding": "bcd",
        "length": 3
      },
      "10": {
        "label": "Times HGTD Awarded",
        "start": "0x181D",
        "encoding": "bcd",
        "length": 3
      },
      "14": {
        "label": "Highest Game To Date",
        "start": "0x182C",
        "encoding": "bcd",
        "length": 7,
        "scale": 10
      },
      "14a": {
        "label": "HGTD Initials",
        "start": "0x1826",
        "encoding": "ch",
        "null": "truncate",
        "length": 6
      },
      "15": {
        "label": "Game Time",
        "suffix": " seconds",
        "start": "0x1820",
        "encoding": "bcd",
        "length": 6,
        "scale": 10
      }
    }
  },
  "adjustments": {
    "Standard Adjustments": {
      "06": {
        "label": "Replay Percentage",
        "suffix": "%",
        "start": "0x183B",
        "encoding": "bcd",
        "length": 2
      },
      "11": {
        "label": "First High Score",
        "start": "0x1833",
        "encoding": "bcd",
        "length": 2,
        "scale": 100000
      },
      "12": {
        "label": "Second High Score",
        "start": "0x1835",
        "encoding": "bcd",
        "length": 2,
        "scale": 100000
      },
      "13": {
        "label": "Third High Score",
        "start": "0x1837",
        "encoding": "bcd",
        "length": 2,
        "scale": 100000
      }
    }
  },
  "dip_switches": {
    "1-5": {
      "label": "Left Coin Chute",
      "encoding": "dipsw",
      "offsets": [
        1,
        2,
        3,
        4,
        5
      ],
      "values": "pricing"
    },
    "6": {
      "label": "High Games To Date",
      "encoding": "dipsw",
      "offsets": [
        6
      ],
      "values": [
        "no effect",
        "reset #2-#5 on power off"
      ]
    },
    "7": {
      "label": "Attract Mode Sound",
      "encoding": "dipsw",
      "offsets": [
        7
      ],
      "values": "off_on"
    },
    "8": {
      "label": "Auto-Percentage Control",
      "encoding": "dipsw",
      "offsets": [
        8
      ],
      "values": [
        "Disabled (normal high score mode)",
        "Enabled"
      ]
    },
    "9-13": {
      "label": "Right Coin Chute",
      "encoding": "dipsw",
      "offsets": [
        9,
        10,
        11,
        12,
        13
      ],
      "values": "pricing"
    },
    "14": {
      "label": "Left/Right Coin Chute Control",
      "encoding": "dipsw",
      "offsets": [
        14
      ],
      "values": [
        "separate",
        "same"
      ]
    },
    "15-16": {
      "label": "Maximum Credits",
      "encoding": "dipsw",
      "offsets": [
        15,
        16
      ],
      "values": [
        8,
        10,
        15,
        20
      ]
    },
    "17-21": {
      "label": "Center Coin Chute",
      "encoding": "dipsw",
      "offsets": [
        17,
        18,
        19,
        20,
        21
      ],
      "values": "pricing"
    },
    "22": {
      "label": "Playfield Special",
      "encoding": "dipsw",
      "offsets": [
        22
      ],
      "values": [
        "special",
        "extra ball"
      ]
    },
    "23-24": {
      "label": "High Score Awards",
      "encoding": "dipsw",
      "offsets": [
        23,
        24
      ],
      "values": [
        "none (not displayed)",
        "none",
        "2 replays",
        "3 replays"
      ]
    },
    "25": {
      "label": "Balls/Game",
      "encoding": "dipsw",
      "offsets": [
        25
      ],
      "values": [
        5,
        3
      ]
    },
    "26": {
      "label": "Match",
      "encoding": "dipsw",
      "offsets": [
        26
      ],
      "values": "off_on"
    },
    "27": {
      "label": "Replay Limit",
      "encoding": "dipsw",
      "offsets": [
        27
      ],
      "values": [
        "no limit",
        1
      ]
    },
    "28": {
      "label": "Novelty",
      "encoding": "dipsw",
      "offsets": [
        28
      ],
      "values": [
        "normal",
        "score 500K instead of extra ball/special"
      ]
    },
    "29": {
      "label": "Game Mode",
      "encoding": "dipsw",
      "offsets": [
        29
      ],
      "values": [
        "replay",
        "extra ball"
      ]
    },
    "30": {
      "label": "3rd Coin Chute Credits",
      "encoding": "dipsw",
      "offsets": [
        30
      ],
      "values": [
        "no effect",
        "add 9 credits (enables Free Play on competition ROMs)"
      ]
    },
    "31": {
      "label": "Extra Ball Control",
      "encoding": "dipsw",
      "offsets": [
        31
      ],
      "values": [
        "conservative: hole value reset at end of ball; EB lamps alternate",
        "liberal: hole value held between balls; both EB lamps lit"
      ]
    },
    "32": {
      "label": "Outlane Special",
      "encoding": "dipsw",
      "offsets": [
        32
      ],
      "values": [
        "conservative: outlane lit after second race completed",
        "liberal: outlane lit after first race (qualifying heat) completed"
      ]
    }
  }
}
