{
  "schema_version": 1,
  "date": "2026-10-14",
  "name": "PEL pokusni ROM v0.6 / 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": "b70691ac1f6d777c2fac28c085cd9aa73ba2d5ce20383487deb1f56accf924a6",
    "eproms": [
      {
        "file": "pel-eprom-a-16k.bin",
        "sha256": "7110160eab42f51913da6eef88ec1545233e3c8d98fee2dd8d5abcece6fcf488"
      },
      {
        "file": "pel-eprom-b-16k.bin",
        "sha256": "cb4f0b2ef0d342034c40e25ee666c170c9de1aa279f55b834c5072a8072cd95f"
      }
    ]
  },
  "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": "$E6E0",
      "bytes": [
        169,
        1,
        141,
        18,
        254,
        32,
        128,
        193,
        72,
        169,
        0,
        141,
        18,
        254,
        104,
        96
      ],
      "reason": "Relocated nonblocking keyboard bridge outside original command loop",
      "banks": [
        0,
        1
      ]
    },
    {
      "address": "$E6F1",
      "bytes": [
        169,
        0,
        141,
        18,
        254,
        76,
        163,
        255
      ],
      "reason": "Enter byte-identical original monitor command loop in Orao ROM bank",
      "banks": [
        0,
        1
      ]
    },
    {
      "address": "$FE24",
      "bytes": [
        169,
        1,
        141,
        18,
        254,
        76,
        0,
        202
      ],
      "reason": "Return from original monitor to native system manager, outside native I/O range",
      "banks": [
        0,
        1
      ]
    },
    {
      "address": "$E70D",
      "bytes": [
        169,
        0,
        141,
        18,
        254,
        76,
        173,
        255
      ],
      "reason": "Enter original dispatcher with native-collected command line; original command table remains intact",
      "banks": [
        0,
        1
      ]
    },
    {
      "address": "$E6F9",
      "bytes": [
        78,
        15,
        3,
        76,
        0,
        192
      ],
      "reason": "Mark BASIC state when original monitor BC starts retained cold BASIC",
      "banks": [
        0,
        1
      ]
    },
    {
      "address": "$FE2C",
      "bytes": [
        78,
        15,
        3,
        76,
        3,
        192
      ],
      "reason": "Mark BASIC state when original monitor BW starts retained warm BASIC",
      "banks": [
        0,
        1
      ]
    },
    {
      "address": "$F0E3",
      "bytes": [
        76,
        249,
        230
      ],
      "reason": "Original extended BC cold-start uses state-marking bridge",
      "banks": [
        0,
        1
      ]
    },
    {
      "address": "$F0B0",
      "bytes": [
        76,
        44,
        254
      ],
      "reason": "Original extended BW warm-start uses state-marking bridge",
      "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": "$FE02",
      "bytes": [
        76,
        36,
        254
      ],
      "reason": "Retained BASIC EXIT returns system manager without overwriting original command loop",
      "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,
        224,
        230
      ],
      "reason": "Native nonblocking key peek replacing old matrix driver; blocking reader alone acknowledges",
      "banks": [
        0,
        1
      ]
    },
    {
      "address": "$E500",
      "bytes": [
        76,
        234,
        239
      ],
      "reason": "Original monitor keyboard frontend and echo retained; replace hardware matrix reader only",
      "banks": [
        0,
        1
      ]
    },
    {
      "address": "$E4F4",
      "bytes": [
        96
      ],
      "reason": "Original hardware bell disabled to avoid writing legacy speaker I/O into native RAM",
      "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": "$CA08",
    "line-key": "$CA18",
    "line-back": "$CA4D",
    "line-cancel": "$CA60",
    "line-done": "$CA68",
    "upper": "$CA7F",
    "upper-next": "$CA9A",
    "dispatch": "$CA9E",
    "legacy-letter": "$CBB3",
    "legacy-command": "$CBD1",
    "legacy-copy": "$CBD3",
    "legacy-end": "$CBE2",
    "match": "$CBEF",
    "match-char": "$CBF1",
    "match-end": "$CC04",
    "match-success": "$CC13",
    "match-fail": "$CC17",
    "cmd-help": "$CC19",
    "cmd-basic": "$CC27",
    "cmd-monitor": "$CC2F",
    "cmd-memory": "$CC37",
    "memory-large": "$CC5A",
    "memory-rest": "$CC65",
    "cmd-video": "$CC73",
    "video-mono": "$CC96",
    "cmd-cls": "$CCA4",
    "cmd-charset": "$CCAA",
    "cmd-dos": "$CCB8",
    "cmd-color": "$CCC6",
    "cmd-colors": "$CCE6",
    "palette-char": "$CCF6",
    "cmd-bank": "$CD21",
    "bank-ok": "$CD4C",
    "cmd-read": "$CD6B",
    "cmd-write": "$CD95",
    "cmd-dump": "$CDED",
    "dump-byte": "$CE01",
    "cmd-go": "$CE1B",
    "syntax": "$CE30",
    "ram-address": "$CE3E",
    "parsehex": "$CE51",
    "hex-space": "$CE5C",
    "hex-prefix": "$CE6A",
    "parse-digit": "$CE72",
    "numeric": "$CEA0",
    "shifthex": "$CEA8",
    "parse-end": "$CECE",
    "parse-bad": "$CED8",
    "banner": "$CEDA",
    "prompt-text": "$CF73",
    "unknown": "$CF78",
    "help-text": "$CF9B",
    "monitor-text": "$D0DE",
    "memory-text": "$D108",
    "ram64": "$D10E",
    "ram256": "$D115",
    "rom-text": "$D11D",
    "video-text": "$D174",
    "mono-text": "$D185",
    "color-text": "$D1A8",
    "charset-text": "$D1CC",
    "dos-text": "$D26B",
    "bank-text": "$D33B",
    "read-text": "$D34F",
    "write-text": "$D35B",
    "syntax-text": "$D366",
    "command-0": "$D3A3",
    "command-1": "$D3A8",
    "command-2": "$D3AE",
    "command-3": "$D3B1",
    "command-4": "$D3B3",
    "command-5": "$D3B7",
    "command-6": "$D3BB",
    "command-7": "$D3C1",
    "command-8": "$D3C5",
    "command-9": "$D3CD",
    "command-10": "$D3D1",
    "command-11": "$D3D7",
    "command-12": "$D3DE",
    "command-13": "$D3E3",
    "command-14": "$D3E8",
    "command-15": "$D3EE",
    "command-16": "$D3F3",
    "plane-masks": "$D3F6",
    "colors-text": "$D3F9",
    "textlo": "$D419",
    "texthi": "$D432",
    "monolo": "$D44B",
    "monohi": "$D464",
    "colorlo": "$D47D",
    "colorhi": "$D496",
    "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": 2735,
      "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": 3864,
      "nativeBudget": 4096,
      "nativeFreeBytes": 232,
      "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.",
  "originalMonitor": {
    "entry": 65443,
    "forwardedEntry": 65453,
    "systemReturn": 65060,
    "modeAddress": 783,
    "modeValue": 2,
    "commands": [
      "A",
      "X",
      "E",
      "M",
      "C",
      "F",
      "U",
      "Q"
    ],
    "source": "orao32-template.bin",
    "commandLoopUnchanged": true,
    "parserAndAssemblerUnchanged": true,
    "hardwareAdapted": true
  }
}
