{
  "schema_version": 1,
  "date": "2026-10-13",
  "name": "PEL pokusni ROM v0.3 / Orao32 + Apple II+",
  "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": "4a40b672ddca83b15e8da1c9936387772aa141cac44ecc6d4af5d92387cd572f",
    "eproms": [
      {
        "file": "pel-eprom-a-16k.bin",
        "sha256": "8b36bf6d39045e130f84e6a41030690fbd9fa68da8e928c8c095672c3ef0e730"
      },
      {
        "file": "pel-eprom-b-16k.bin",
        "sha256": "6df4ce53fcd7070b86e8a4e0600a090f642bc26eacd9dd82b8578024259a9786"
      }
    ]
  },
  "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": "$D2D1",
    "read-text": "$D2E5",
    "write-text": "$D2F1",
    "syntax-text": "$D2FC",
    "command-0": "$D339",
    "command-1": "$D33E",
    "command-2": "$D344",
    "command-3": "$D347",
    "command-4": "$D349",
    "command-5": "$D34D",
    "command-6": "$D351",
    "command-7": "$D357",
    "command-8": "$D35B",
    "command-9": "$D363",
    "command-10": "$D367",
    "command-11": "$D36D",
    "command-12": "$D374",
    "command-13": "$D379",
    "command-14": "$D37E",
    "command-15": "$D384",
    "command-16": "$D389",
    "plane-masks": "$D38C",
    "colors-text": "$D38F",
    "textlo": "$D3AF",
    "texthi": "$D3C8",
    "monolo": "$D3E1",
    "monohi": "$D3FA",
    "colorlo": "$D413",
    "colorhi": "$D42C",
    "font": "$D800"
  },
  "assumedHardware": {
    "ports": "$FE10-$FE23 in original unused monitor padding",
    "rom": "32 KiB physical: patched Orao16K + compact native4K + actual Apple II+12K; nativeMap supplies aliases and sparse native bank; automatic Apple personality maps the actual12K at $D000-$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",
    "apple": "Reconstruction decoder selects Apple II+ RAM/video/$C0xx/slot6 Disk II and language-card mapping on the same CPU. Actual PEL Apple decode and peripheral circuitry are unverified."
  },
  "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",
    "Compatibility target is the vanilla Apple II+ with Disk II; tests establish selected programs and APIs, not every Apple peripheral or Apple IIe/IIc extension."
  ],
  "nativeMap": [
    {
      "address": 49152,
      "bytes": 74,
      "physicalOffset": 16384,
      "kind": "native-reconstruction-code"
    },
    {
      "address": 49408,
      "bytes": 15,
      "physicalOffset": 16458,
      "kind": "native-reconstruction-code"
    },
    {
      "address": 49536,
      "bytes": 16,
      "physicalOffset": 16473,
      "kind": "native-reconstruction-code"
    },
    {
      "address": 49664,
      "bytes": 1024,
      "physicalOffset": 16489,
      "kind": "native-reconstruction-code"
    },
    {
      "address": 51712,
      "bytes": 2629,
      "physicalOffset": 17513,
      "kind": "native-reconstruction-code"
    },
    {
      "address": 55296,
      "physicalOffset": 8192,
      "bytes": 768,
      "kind": "retained-Orao-font-alias"
    },
    {
      "address": 57344,
      "physicalOffset": 8192,
      "bytes": 8192,
      "kind": "shared-patched-Orao-monitor"
    }
  ],
  "appleCompatibility": {
    "schema_version": 1,
    "romOffset": 20480,
    "romBytes": 12288,
    "romLogicalAddress": 53248,
    "romSHA256": "378ba00c86a64cca49cedaca7de8d5d351983ebc295d9d11e0752febfc346249",
    "source": "engine/vendor/apple2js/js/roms/system/fpbasic.ts",
    "kind": "embedded-Apple-II+-reference-firmware",
    "firmwareActual12KB": true,
    "authenticPEL": false,
    "physicalBudget": {
      "total": 32768,
      "retainedOraoTemplate": 16384,
      "nativeBytes": 3758,
      "nativeBudget": 4096,
      "nativeFreeBytes": 338,
      "appleROM": 12288
    },
    "bankArrangement": "Laboratory physical packing with native logical-range aliases and explicit Apple hardware personality; original PEL bank map is unknown",
    "hardwareRequired": [
      "Apple II+ RAM/video mapping",
      "C0xx keyboard strobe, graphics softswitches, speaker and paddles",
      "Disk II slot ROM/controller for original Apple disk boot"
    ],
    "services": [
      {
        "name": "COUT",
        "address": 65005
      },
      {
        "name": "COUT1",
        "address": 65008
      },
      {
        "name": "RDKEY",
        "address": 64780
      },
      {
        "name": "KEYIN",
        "address": 64795
      },
      {
        "name": "GETLNZ",
        "address": 64871
      },
      {
        "name": "GETLN",
        "address": 64874
      },
      {
        "name": "CROUT",
        "address": 64910
      },
      {
        "name": "HOME",
        "address": 64600
      },
      {
        "name": "SETTXT",
        "address": 64313
      },
      {
        "name": "SETGR",
        "address": 64320
      },
      {
        "name": "PLOT",
        "address": 63488
      },
      {
        "name": "SETCOL",
        "address": 63588
      },
      {
        "name": "WAIT",
        "address": 64680
      },
      {
        "name": "BELL",
        "address": 65338
      },
      {
        "name": "SETKBD",
        "address": 65161
      },
      {
        "name": "SETVID",
        "address": 65171
      },
      {
        "name": "INIT",
        "address": 64303
      },
      {
        "name": "SETNORM",
        "address": 65156
      },
      {
        "name": "HGR",
        "address": 62434
      },
      {
        "name": "HGR2",
        "address": 62424
      },
      {
        "name": "HPLOT",
        "address": 62551
      }
    ],
    "verificationMeaning": "Executing the embedded Apple ROM validates this compatibility component, not historical identity of Impuls firmware"
  },
  "patchRecordMeaning": "Addresses and banks describe logical native views before packing; shared monitor patches occur physically once in EPROM A."
}
