{
  "schema_version": 1,
  "date": "2026-10-13",
  "name": "PEL pokusni ROM v0.2 / Orao32 template",
  "authenticPEL": false,
  "similarityToOrao32": "User-authorized reconstruction hypothesis; not historical proof",
  "seed": {
    "platform": "Orao 103 / original Orao32 emulator ROM",
    "source": "https://github.com/mejs/orao/tree/master/roms",
    "bytes": 16384,
    "sha256": "fdfdd0c2da51e32e5b79e4398296345b48588c0f24de0ab2826810a88b155085",
    "basicSha256": "574430e2da0d09e88427236ad43156c9fb16053f2e28e4effdbd5413282134b9",
    "monitorSha256": "b59356601b05b4ab17c78d83554cab9f800d332c17b864ba4ca9b52a2eb10721",
    "firmwareRights": "Historical ROM authorship and rights are separate from the MIT integration code"
  },
  "derived": {
    "bytes": 32768,
    "sha256": "21c514fbeb7dbe120e32b584ad29fe1ff707c74ddc33be5c718fc326ffecdd47",
    "eproms": [
      {
        "file": "pel-eprom-a-16k.bin",
        "sha256": "8b36bf6d39045e130f84e6a41030690fbd9fa68da8e928c8c095672c3ef0e730"
      },
      {
        "file": "pel-eprom-b-16k.bin",
        "sha256": "d0f0757923cb484d2c4be4882bc710a38863b0051001524fd564840db2f4bbad"
      }
    ]
  },
  "font": {
    "file": "orao32-font.bin",
    "bytes": 768,
    "sha256": "dc6533e6b1bf453610dc6a81891bebf854ea6d80a3e2b3ee5063f3b4268fa3c0",
    "originalAddresses": "$E000-$E2FF",
    "originalRowOrder": "LSB-left",
    "nativeRenderer": "Firmware reverses rows to MSB-left; color mode repeats each row twice",
    "pelIdentityVerified": false
  },
  "patches": [
    {
      "address": "$EFD7",
      "bytes": [
        72,
        169,
        1,
        141,
        18,
        254,
        104,
        32,
        0,
        194,
        72,
        169,
        0,
        141,
        18,
        254,
        104,
        96
      ],
      "reason": "Native character-output bridge in original monitor padding",
      "banks": [
        0,
        1
      ]
    },
    {
      "address": "$EFEA",
      "bytes": [
        169,
        1,
        141,
        18,
        254,
        32,
        0,
        193,
        72,
        169,
        0,
        141,
        18,
        254,
        104,
        96
      ],
      "reason": "Native blocking keyboard bridge",
      "banks": [
        0,
        1
      ]
    },
    {
      "address": "$FFA6",
      "bytes": [
        169,
        1,
        141,
        18,
        254,
        32,
        128,
        193,
        72,
        169,
        0,
        141,
        18,
        254,
        104,
        96
      ],
      "reason": "Nonblocking keyboard bridge; carry preserved by ROM-switch instructions",
      "banks": [
        0,
        1
      ]
    },
    {
      "address": "$FFB8",
      "bytes": [
        169,
        1,
        141,
        18,
        254,
        76,
        0,
        202
      ],
      "reason": "Return to native system-manager console",
      "banks": [
        0,
        1
      ]
    },
    {
      "address": "$FE05",
      "bytes": [
        169,
        0,
        141,
        18,
        254,
        76,
        0,
        192
      ],
      "reason": "Banked cold-start of retained Orao BASIC",
      "banks": [
        0,
        1
      ]
    },
    {
      "address": "$FF89",
      "bytes": [
        120,
        216,
        162,
        255,
        154,
        169,
        1,
        141,
        18,
        254,
        76,
        0,
        192
      ],
      "reason": "Reset enters native bank, not original Orao32 desktop",
      "banks": [
        0,
        1
      ]
    },
    {
      "address": "$FFA3",
      "bytes": [
        76,
        184,
        255
      ],
      "reason": "Retained BASIC EXIT returns reconstructed system manager",
      "banks": [
        0,
        1
      ]
    },
    {
      "address": "$F027",
      "bytes": [
        76,
        215,
        239
      ],
      "reason": "Retained BASIC output ABI calls native firmware",
      "banks": [
        0,
        1
      ]
    },
    {
      "address": "$F02A",
      "bytes": [
        76,
        215,
        239
      ],
      "reason": "Retained BASIC line-editor echo calls native firmware",
      "banks": [
        0,
        1
      ]
    },
    {
      "address": "$F024",
      "bytes": [
        76,
        234,
        239
      ],
      "reason": "Retained BASIC input ABI calls native firmware",
      "banks": [
        0,
        1
      ]
    },
    {
      "address": "$E5B0",
      "bytes": [
        76,
        166,
        255
      ],
      "reason": "Native nonblocking key peek replacing old matrix driver; blocking reader alone acknowledges",
      "banks": [
        0,
        1
      ]
    },
    {
      "address": "$DF43",
      "bytes": [
        169,
        192,
        133,
        188,
        96
      ],
      "banks": [
        0
      ],
      "reason": "Probe native writable $0000-$BFFF; omit Orao32 disk-card heuristic"
    },
    {
      "address": "$DEC9/$DECD",
      "bytes": [
        80,
        78
      ],
      "banks": [
        0
      ],
      "reason": "80-column text geometry; original 71-character line-editor bound retained"
    }
  ],
  "nativeLabels": {
    "boot": "$C000",
    "old-init": "$C012",
    "getkey": "$C100",
    "pollkey": "$C180",
    "no-key": "$C18C",
    "putchar": "$C200",
    "out-cr": "$C25A",
    "out-lf": "$C262",
    "out-back": "$C26D",
    "out-clear": "$C289",
    "newline": "$C28F",
    "out-return": "$C2A4",
    "mirror-address": "$C2B1",
    "glyph": "$C2CF",
    "color-row-address": "$C30A",
    "add-column": "$C316",
    "glyph-first-row": "$C328",
    "glyph-row": "$C343",
    "reverse": "$C352",
    "glyph-repeat": "$C370",
    "glyph-plane": "$C375",
    "glyph-lit": "$C39F",
    "glyph-dark": "$C3A5",
    "glyph-store": "$C3A7",
    "repeat-next": "$C3C8",
    "wrap-pixel": "$C3DE",
    "wrap-mono-subtract": "$C401",
    "wrap-color": "$C413",
    "wrap-done": "$C426",
    "clear": "$C427",
    "clear-plane": "$C441",
    "clear-byte": "$C453",
    "clear-mirror": "$C486",
    "count-down": "$C494",
    "count-low": "$C49F",
    "scroll": "$C4A9",
    "scroll-byte": "$C4CC",
    "scroll-src-ok": "$C4E9",
    "scroll-dst-ok": "$C506",
    "scroll-last": "$C51C",
    "scroll-color": "$C555",
    "scroll-wrap": "$C55E",
    "erase-bottom-plane": "$C578",
    "erase-bottom-byte": "$C5A8",
    "print": "$C5CD",
    "print-byte": "$C5CF",
    "print-end": "$C5E4",
    "hexbyte": "$C5E5",
    "hexnibble": "$C5F0",
    "hex-digit": "$C5FA",
    "manager": "$CA00",
    "prompt": "$CA05",
    "line-key": "$CA15",
    "line-back": "$CA4A",
    "line-cancel": "$CA5D",
    "line-done": "$CA65",
    "upper": "$CA7C",
    "upper-next": "$CA97",
    "dispatch": "$CA9B",
    "match": "$CBB9",
    "match-char": "$CBBB",
    "match-end": "$CBCE",
    "match-success": "$CBDD",
    "match-fail": "$CBE1",
    "cmd-help": "$CBE3",
    "cmd-basic": "$CBF1",
    "cmd-monitor": "$CBF9",
    "cmd-memory": "$CC07",
    "memory-large": "$CC2A",
    "memory-rest": "$CC35",
    "cmd-video": "$CC43",
    "video-mono": "$CC66",
    "cmd-cls": "$CC74",
    "cmd-charset": "$CC7A",
    "cmd-dos": "$CC88",
    "cmd-color": "$CC96",
    "cmd-colors": "$CCB6",
    "palette-char": "$CCC6",
    "cmd-bank": "$CCF1",
    "bank-ok": "$CD1C",
    "cmd-read": "$CD3B",
    "cmd-write": "$CD65",
    "cmd-dump": "$CDBD",
    "dump-byte": "$CDD1",
    "cmd-go": "$CDEB",
    "syntax": "$CE00",
    "ram-address": "$CE0E",
    "parsehex": "$CE21",
    "hex-space": "$CE2C",
    "hex-prefix": "$CE3A",
    "parse-digit": "$CE42",
    "numeric": "$CE70",
    "shifthex": "$CE78",
    "parse-end": "$CE9E",
    "parse-bad": "$CEA8",
    "banner": "$CEAA",
    "prompt-text": "$CF43",
    "unknown": "$CF48",
    "help-text": "$CF6B",
    "monitor-text": "$D074",
    "memory-text": "$D09E",
    "ram64": "$D0A4",
    "ram256": "$D0AB",
    "rom-text": "$D0B3",
    "video-text": "$D10A",
    "mono-text": "$D11B",
    "color-text": "$D13E",
    "charset-text": "$D162",
    "dos-text": "$D201",
    "bank-text": "$D2C8",
    "read-text": "$D2DC",
    "write-text": "$D2E8",
    "syntax-text": "$D2F3",
    "command-0": "$D330",
    "command-1": "$D335",
    "command-2": "$D33B",
    "command-3": "$D33E",
    "command-4": "$D340",
    "command-5": "$D344",
    "command-6": "$D348",
    "command-7": "$D34E",
    "command-8": "$D352",
    "command-9": "$D35A",
    "command-10": "$D35E",
    "command-11": "$D364",
    "command-12": "$D36B",
    "command-13": "$D370",
    "command-14": "$D375",
    "command-15": "$D37B",
    "command-16": "$D380",
    "plane-masks": "$D383",
    "colors-text": "$D386",
    "textlo": "$D3A6",
    "texthi": "$D3BF",
    "monolo": "$D3D8",
    "monohi": "$D3F1",
    "colorlo": "$D40A",
    "colorhi": "$D423",
    "font": "$D800"
  },
  "assumedHardware": {
    "ports": "$FE10-$FE23 in original unused monitor padding",
    "rom": "Two selectable 16 KiB images at $C000-$FFFF",
    "ram": "Fixed $0000-$BFFF; hypothetical RAM data ports reach physical 64/256KiB",
    "textMirror": "Physical RAM $C000-$C7CF, accessible via assumed RAM ports; outside BASIC address map",
    "displayStart": "$FE1A/$FE1B: assumed CRT display-start byte offset with circular 16000/32000-byte bitmap; not verified PEL registers",
    "workspace": "$0300-$039F; avoids original BASIC numeric buffer $03FF-$0410"
  },
  "limitations": [
    "Actual Impuls firmware, ROM ordering, reset vectors and bank-register addresses are unavailable",
    "Retained BASIC template occupies 8 KiB; reported PEL BASIC is 12 KiB, so this is not a recovered PEL interpreter",
    "Old Orao32 graphics, cassette and disk implementations have not been converted to native PEL hardware",
    "DOS command is an explicit ROM diagnostic placeholder; original VDOS and PEL disk format remain unknown",
    "These binaries are for this emulator profile, not programming a surviving physical Impuls"
  ]
}
