{
  "schema_version": 1,
  "date": "2026-10-13",
  "scope": "CPU-executed reconstruction and separate Apple reference; no historical PEL ROM authentication",
  "reports": {
    "native": {
      "schema": 1,
      "subject": "Experimental PEL native NMOS6502 bus",
      "historicalAuthenticityVerified": false,
      "checks": [
        {
          "name": "NMOS CPU reset vector and ROM execution produce pixels",
          "pass": true
        },
        {
          "name": "CPU keyboard polling and acknowledgment consume native YUASCII",
          "pass": true
        },
        {
          "name": "Original Orao glyph positions translate all Croatian uppercase input",
          "pass": true
        },
        {
          "name": "ROM writes are ignored and both ROM banks have distinct vectors",
          "pass": true
        },
        {
          "name": "Native I/O leaves live original FF00 graphics addresses in ROM",
          "pass": true
        },
        {
          "name": "Full 256 KiB CPU port access with stable lower memory and upper bank overlay",
          "pass": true
        },
        {
          "name": "Color card displays 640×400 RGB bitplanes and mono uses plane0",
          "pass": true
        },
        {
          "name": "VRAM pointer wraps at physical 32 KiB plane boundary",
          "pass": true
        },
        {
          "name": "CPU-selected display start scrolls actual pixels with circular active bitmap",
          "pass": true
        },
        {
          "name": "Text diagnostics reflect firmware mirror without affecting pixels",
          "pass": true
        },
        {
          "name": "CPU decimal arithmetic remains NMOS 6502 behavior",
          "pass": true
        }
      ],
      "bundle": {
        "path": "native/pel-native.js",
        "sha256": "66025ad783b1f4fa5e030edd766e2ec7b0541ed44fec06776ff2e58b7cfbd763"
      },
      "checkCount": 11,
      "passed": true
    },
    "rom": {
      "date": "2026-10-13",
      "status": "passed",
      "scope": "CPU executes reconstructed ROM; historical PEL identity not verified",
      "romSHA256": "21c514fbeb7dbe120e32b584ad29fe1ff707c74ddc33be5c718fc326ffecdd47",
      "nativeBundleSHA256": "66025ad783b1f4fa5e030edd766e2ec7b0541ed44fec06776ff2e58b7cfbd763",
      "checks": [
        {
          "name": "ROM boots native manager and CPU writes native bitmap",
          "passed": true
        },
        {
          "name": "Retained floating-point BASIC evaluates expression",
          "passed": true
        },
        {
          "name": "Stored program tokenization, FOR/NEXT, LIST, RUN and native scrolling",
          "passed": true
        },
        {
          "name": "INPUT in stored program and RETURN to system manager",
          "passed": true
        },
        {
          "name": "Native physical RAM bank commands reach full expansion",
          "passed": true
        },
        {
          "name": "Croatian glyphs and color console use ROM rendering",
          "passed": true
        },
        {
          "name": "Color console scroll advances display start without rebuilding all glyphs",
          "passed": true
        }
      ]
    },
    "ui": {
      "tested_files": {
        "firmware/pel-rom-v0.2.bin": {
          "bytes": 32768,
          "sha256": "21c514fbeb7dbe120e32b584ad29fe1ff707c74ddc33be5c718fc326ffecdd47"
        },
        "firmware/rom.js": {
          "bytes": 114193,
          "sha256": "332c97c4e4a01fc4c30e0e26360db9cbf90741e24686cb6e2bd303c925c43115"
        },
        "native/pel-native.js": {
          "bytes": 100024,
          "sha256": "66025ad783b1f4fa5e030edd766e2ec7b0541ed44fec06776ff2e58b7cfbd763"
        },
        "engine/impuls-engine.js": {
          "bytes": 344062,
          "sha256": "d1d640f3f060017c96ea34e584cbf8696b28231161e8e60cca5e45a16a71b5ed"
        },
        "app.js": {
          "bytes": 17765,
          "sha256": "3591927165612a086e23671345c39f74dcf513232fa1a78688df4b172bcfae4d"
        },
        "index.html": {
          "bytes": 8652,
          "sha256": "e5e06985950ab3f42b85b01a3c5a7eb3f6daf79189b1c747fb01acf13d265f51"
        },
        "style.css": {
          "bytes": 11079,
          "sha256": "2e7b45206bcef8ea86ec50c3f38fc7dfe2c055d079cf36dd1320a977751a73b9"
        }
      },
      "native_boot": {
        "mode": "pel",
        "rom": {
          "name": "PEL pokusni ROM v0.2 / Orao32 template",
          "kind": "pel-reconstruction",
          "version": "0.2.0",
          "bytes": 32768,
          "keymap": {
            "Č": 91,
            "Ć": 92,
            "Đ": 93,
            "Š": 94,
            "Ž": 95,
            "č": 123,
            "ć": 124,
            "đ": 125,
            "š": 126,
            "ž": 127
          },
          "commands": [
            "HELP",
            "BASIC",
            "MON",
            "MEM",
            "VIDEO",
            "CLS",
            "CHARSET",
            "DOS",
            "COLORS"
          ],
          "authenticPEL": false,
          "basicTemplate": "Orao32 Eagle Extended BASIC v1.0",
          "sourceFont": "Original Orao32 ROM $E000-$E2FF",
          "pelVerified": false
        },
        "text": "IMPULS - 9010 / ORAO 64\nPOKUSNI PEL ROM 0.2 - NIJE IZVORNI DUMP\nBOS/SM PREDLOZAK + EAGLE BASIC IZ ORLA 32\nZA UPUTE UPIŠI HELP; BASIC ZA PROGRAMIRANJE.\n\nSM>",
        "pc": 49413,
        "videoWrites": 101928,
        "reconstructedROM": true,
        "originalROMAvailable": false,
        "clockHz": 2000000
      },
      "pause_stops_native_cpu": true,
      "native_commands_use_real_keyboard_and_firmware": true,
      "memory_control_reaches_native_firmware": true,
      "color_control_reaches_native_firmware": true,
      "native_croatian_font_present": true,
      "native_croatian_keyboard_reaches_basic": true,
      "monitor_button_returns_from_original_basic": true,
      "original_orao_basic_executes_expression_and_program": true,
      "monitor_buttons_leave_basic_through_rom_exit": true,
      "mobile_no_horizontal_overflow": {
        "width": 390,
        "viewport": 390
      },
      "apple_reference_game_keyboard_color_preserved": {
        "before": 20,
        "after": 21,
        "mappedRAMKB": 64,
        "unmappedExpansionKB": 192
      },
      "apple_experimental_croatian_font_reversible": true,
      "original_pel_dump_not_misidentified_as_apple": true,
      "return_to_native_preserves_separate_keyboard_profile": true,
      "file_local_native_and_apple_game": true,
      "errors": {
        "browser": [],
        "file_local": [],
        "failed_requests": []
      }
    },
    "homepage": {
      "threeVariants": true,
      "nativeROMActivation": true,
      "correctCroatianBootText": true,
      "CPUColorsCommand": true,
      "originalEmulatorStillReady": true,
      "errors": []
    },
    "sabotage": {
      "date": "2026-10-13",
      "version": "0.2.0",
      "profile": "Apple II+ reference; original PEL ROM not involved",
      "fixture": {
        "name": "sabotage-mark-allen-1981.dsk",
        "bytes": 143360,
        "sha256": "ef76d4cdebf06e69c4fe9ff3207a28e66175ba2298cfd40d13e3b4366bbf4a71",
        "source": "https://mirrors.apple2.org.za/ftp.apple.asimov.net/images/games/action/Sabotage.dsk",
        "scope": "Local compatibility fixture outside publication; commercial original, redistribution license not established",
        "authenticity": "Preservation archive image; not authenticated as a byte-identical original physical disk"
      },
      "nativeDiskIIBoot": true,
      "gameInstructionIdentityVerified": true,
      "titleCaptured": true,
      "titleEvidence": "Original game-generated instruction screen with SABOTAGE and BY MARK ALLEN header",
      "boot": [
        {
          "cycles": 2034071,
          "pc": 47619,
          "video": {
            "text": true,
            "mixed": false,
            "hires": false,
            "page": 1
          }
        },
        {
          "cycles": 4034072,
          "pc": 47619,
          "video": {
            "text": true,
            "mixed": false,
            "hires": false,
            "page": 1
          }
        },
        {
          "cycles": 6034074,
          "pc": 45487,
          "video": {
            "text": true,
            "mixed": false,
            "hires": false,
            "page": 1
          }
        },
        {
          "cycles": 8034079,
          "pc": 47318,
          "video": {
            "text": true,
            "mixed": false,
            "hires": false,
            "page": 1
          }
        },
        {
          "cycles": 10034080,
          "pc": 44188,
          "video": {
            "text": false,
            "mixed": false,
            "hires": true,
            "page": 1
          }
        },
        {
          "cycles": 12034083,
          "pc": 44821,
          "video": {
            "text": false,
            "mixed": false,
            "hires": true,
            "page": 1
          }
        },
        {
          "cycles": 14034084,
          "pc": 47386,
          "video": {
            "text": false,
            "mixed": false,
            "hires": true,
            "page": 1
          }
        },
        {
          "cycles": 16034085,
          "pc": 44197,
          "video": {
            "text": false,
            "mixed": false,
            "hires": true,
            "page": 1
          }
        },
        {
          "cycles": 18034088,
          "pc": 16455,
          "video": {
            "text": true,
            "mixed": false,
            "hires": true,
            "page": 1
          }
        }
      ],
      "playing": {
        "cycles": 18384089,
        "pc": 24247,
        "video": {
          "text": false,
          "mixed": false,
          "hires": true,
          "page": 1
        },
        "desiredGun": 4,
        "actualGun": 4,
        "score": 0,
        "shellFlags": [
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0
        ],
        "bitmapSHA256": "6a92c5830b516679d082c171ec974f26f0308b87e19d68358d1aa2f28dff8a47"
      },
      "left": {
        "cycles": 18484090,
        "pc": 21532,
        "video": {
          "text": false,
          "mixed": false,
          "hires": true,
          "page": 1
        },
        "desiredGun": 10,
        "actualGun": 10,
        "score": 0,
        "shellFlags": [
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0
        ],
        "bitmapSHA256": "c804174ebfd06e7065ba6a61f5edd38ab5ff1b92dfb4cc9475a69eeb291b79df"
      },
      "right": {
        "cycles": 18584090,
        "pc": 21591,
        "video": {
          "text": false,
          "mixed": false,
          "hires": true,
          "page": 1
        },
        "desiredGun": 4,
        "actualGun": 4,
        "score": 0,
        "shellFlags": [
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0
        ],
        "bitmapSHA256": "c804174ebfd06e7065ba6a61f5edd38ab5ff1b92dfb4cc9475a69eeb291b79df"
      },
      "beforeFire": {
        "cycles": 18984091,
        "pc": 27849,
        "video": {
          "text": false,
          "mixed": false,
          "hires": true,
          "page": 1
        },
        "desiredGun": 28,
        "actualGun": 28,
        "score": 0,
        "shellFlags": [
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0
        ],
        "bitmapSHA256": "8b06d7aa1c799cbd6a91437e0ba2f9741c0edb127cc114e4fb5790411bed1e03"
      },
      "fired": {
        "cycles": 19014093,
        "pc": 19155,
        "video": {
          "text": false,
          "mixed": false,
          "hires": true,
          "page": 1
        },
        "desiredGun": 28,
        "actualGun": 28,
        "score": 0,
        "shellFlags": [
          1,
          0,
          0,
          0,
          0,
          0,
          0,
          0
        ],
        "bitmapSHA256": "6af17831378610e99bdb4c1124a22ca3e4aa8370a41b9f1cac01932b3de128ca"
      },
      "later": {
        "cycles": 20014097,
        "pc": 21591,
        "video": {
          "text": false,
          "mixed": false,
          "hires": true,
          "page": 1
        },
        "desiredGun": 28,
        "actualGun": 28,
        "score": 0,
        "shellFlags": [
          0,
          0,
          0,
          0,
          0,
          0,
          0,
          0
        ],
        "bitmapSHA256": "e5ce67fb304108d776aaea30b253a52735a4614eec6dbc62b8d5799118abcc66"
      },
      "controls": {
        "left": "D",
        "right": "F",
        "fire": "Space (any key other than D/F)",
        "leftAndRightChange6502State": true,
        "fireCreates6502Entity": true
      },
      "render": {
        "width": 560,
        "height": 384,
        "hiresPage": 1,
        "colorSHA256": "e31a43934c003a1f71402938bf58c66c1ab76891465dda675613739041b987ba",
        "monoSHA256": "07ee1206601337228677de31b9bcdee5cdfece6e790cdbf86af7db9c4dc2639a",
        "colorToggleChangesPixels": true,
        "simulationCyclesStableDuringColorToggle": true
      },
      "scope": "This test confirms the supplied Apple reference hardware/profile can execute this game. It does not validate authentic Impuls BOS/SM, PEL DOS, PEL ROM banks, native graphics or native color-card registers.",
      "witness": {
        "source": "User recollection in this chat",
        "claim": "Remembers Apple II Sabotage running on Impuls",
        "status": "Historical witness; not a ROM dump, measured decoder map or technical proof of the reconstructed PEL firmware"
      },
      "errors": []
    }
  }
}
