{"id":11455,"date":"2026-11-01T10:23:30","date_gmt":"2026-11-01T09:23:30","guid":{"rendered":"https:\/\/retrofixer.it\/manuale-commodore-64\/"},"modified":"2026-11-01T11:22:55","modified_gmt":"2026-11-01T10:22:55","slug":"manuale-commodore-64","status":"publish","type":"page","link":"https:\/\/retrofixer.it\/en\/manuale-commodore-64\/","title":{"rendered":"Manuale d&#8217;uso Commodore 64"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"11455\" class=\"elementor elementor-11455\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cf9d52b e-con-full e-flex e-con e-parent\" data-id=\"cf9d52b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-861de29 elementor-widget elementor-widget-html\" data-id=\"861de29\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;600;700&family=Press+Start+2P&family=VT323&display=swap\" rel=\"stylesheet\">\n\n<style>\n.rfman{--bg:#0f0c24;--bg2:#171338;--panel:#1d1846;--line:#342c74;--text:#eceaff;--muted:#aaa5d8;--c64l:#7c70da;--c64b:#40318d;--mag:#e0398a;--yel:#ffd23f;--grn:#5ad15f;--cya:#3fd8ff;--red:#f94144;font-family:'Inter',system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--text);background:var(--bg);line-height:1.55;padding:36px 0 28px}\n.rfman *,.rfman *::before,.rfman *::after{box-sizing:border-box}\n.rfman h2,.rfman h3,.rfman h4,.rfman p,.rfman ul,.rfman ol{margin:0;padding:0}\n.rfman h2,.rfman h3,.rfman h4{font-family:'Inter',system-ui,sans-serif!important;letter-spacing:0;text-transform:none;font-weight:700;color:var(--text)}\n.rfman a{color:var(--cya)}\n.rfman button,.rfman input{font:inherit;color:inherit}\n.rfman button{cursor:pointer}\n.rfman [hidden]{display:none!important}\n.rfman mark{background:var(--yel);color:#1a1440;border-radius:2px;padding:0 1px}\n.post-views.post-11455{background:#0f0c24;color:#aaa5d8;margin:0;padding:0 16px 8px;font-size:13px}\n.rfman .wrap{max-width:1400px;margin:0 auto;padding:0 16px}\n.rfman .head h2{font-family:'Press Start 2P',monospace!important;font-size:clamp(17px,3vw,27px);line-height:1.45;color:var(--yel);margin-bottom:12px}\n.rfman .head p{color:var(--muted);max-width:860px;font-size:16px}\n.rfman .head .stats{font-family:'VT323',monospace;font-size:19px;color:var(--c64l);margin-top:8px}\n\n\/* barra di ricerca *\/\n.rfman .search{position:relative;margin:22px 0 10px;max-width:860px}\n.rfman .search input{width:100%;background:var(--bg2);border:2px solid var(--line);border-radius:10px;padding:13px 46px 13px 46px;font-size:17px;outline:none;transition:border-color .15s}\n.rfman .search input:focus{border-color:var(--c64l);background:#1a1638}\n.rfman .search .lens{position:absolute;left:15px;top:50%;transform:translateY(-50%);width:18px;height:18px;color:var(--muted);pointer-events:none}\n.rfman .search input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none;display:none}\n.rfman .search .x{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:34px;height:34px;border:0;border-radius:8px;background:none;color:var(--muted);font-size:22px;line-height:1}\n.rfman .search .x:hover{background:var(--line);color:#fff}\n.rfman .chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:18px}\n.rfman .chips span{font-size:13px;color:var(--muted);align-self:center;margin-right:4px}\n.rfman .chip{background:var(--bg2);border:1px solid var(--line);border-radius:999px;padding:4px 12px;font-size:13px;color:var(--muted)}\n.rfman .chip:hover{color:#fff;border-color:var(--c64l)}\n\n\/* layout *\/\n.rfman .main{display:grid;grid-template-columns:310px minmax(0,1fr);gap:16px;align-items:start}\n.rfman .side{position:sticky;top:16px;background:var(--panel);border:1px solid var(--line);border-radius:10px;display:flex;flex-direction:column;max-height:calc(100vh - 32px);overflow:hidden}\n.admin-bar .rfman .side{top:48px;max-height:calc(100vh - 64px)}\n.rfman .tabs{display:flex;border-bottom:1px solid var(--line);flex:none}\n.rfman .tabs button{flex:1;background:none;border:0;border-bottom:3px solid transparent;padding:10px 6px 8px;font-size:13px;font-weight:600;color:var(--muted)}\n.rfman .tabs button[aria-selected=true]{color:#fff;border-bottom-color:var(--yel)}\n.rfman .tabs button:hover{color:#fff}\n.rfman .pane{overflow:auto;padding:8px 6px 12px;flex:1 1 auto;scrollbar-width:thin;scrollbar-color:var(--line) transparent}\n.rfman .toc .ch{margin-bottom:2px}\n.rfman .toc button{display:flex;gap:8px;width:100%;text-align:left;background:none;border:0;border-radius:6px;padding:5px 8px;font-size:14px;color:var(--text);align-items:baseline}\n.rfman .toc button:hover{background:var(--line)}\n.rfman .toc button .n{margin-left:auto;font-family:'VT323',monospace;font-size:17px;color:var(--c64l);flex:none}\n.rfman .toc .ch>button{font-weight:700}\n.rfman .toc .sec button{padding-left:22px;font-size:13.5px;color:var(--muted)}\n.rfman .toc .sec button:hover{color:#fff}\n.rfman .toc button.cur{background:#2a2366;color:#fff}\n.rfman .toc button.cur .n{color:var(--yel)}\n.rfman .flt{width:calc(100% - 8px);margin:2px 4px 8px;background:var(--bg2);border:1px solid var(--line);border-radius:7px;padding:7px 10px;font-size:14px;outline:none}\n.rfman .flt:focus{border-color:var(--c64l)}\n.rfman .idx div{display:flex;flex-wrap:wrap;gap:2px 6px;padding:5px 8px;border-radius:6px;font-size:13.5px;align-items:baseline}\n.rfman .idx div:hover{background:#231d55}\n.rfman .idx .t{flex:1 1 100%}\n.rfman .idx button,.rfman .kw button{background:none;border:0;padding:0 2px;font-family:'VT323',monospace;font-size:17px;color:var(--cya);line-height:1.2}\n.rfman .idx button:hover{color:var(--yel);text-decoration:underline}\n.rfman .kw{display:grid;grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:6px;padding:4px}\n.rfman .kw button{border:1px solid var(--line);border-radius:6px;padding:6px 4px;background:var(--bg2);color:var(--text);font-size:18px;text-align:center}\n.rfman .kw button:hover{border-color:var(--yel);color:var(--yel);text-decoration:none}\n.rfman .kw h4{grid-column:1\/-1;font-size:12px!important;font-weight:600;color:var(--muted);text-transform:uppercase!important;letter-spacing:.06em!important;margin:8px 2px 0}\n.rfman .side-toggle{display:none}\n\n\/* lettore *\/\n.rfman .reader{background:var(--panel);border:1px solid var(--line);border-radius:10px;min-width:0}\n.rfman .rbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;padding:10px 12px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--panel);border-radius:10px 10px 0 0;z-index:5}\n.admin-bar .rfman .rbar{top:32px}\n.rfman .nav{display:inline-flex;align-items:center;gap:6px}\n.rfman .nav button{width:36px;height:36px;border-radius:8px;border:1px solid var(--line);background:var(--bg2);font-size:16px}\n.rfman .nav button:hover:not(:disabled){background:var(--line)}\n.rfman .nav button:disabled{opacity:.35;cursor:default}\n.rfman .pgno{display:inline-flex;align-items:center;gap:6px;font-size:14px;color:var(--muted)}\n.rfman .pgno input{width:62px;background:var(--bg2);border:1px solid var(--line);border-radius:7px;padding:6px 8px;font-family:'VT323',monospace;font-size:19px;text-align:center;outline:none;color:var(--yel)}\n.rfman .pgno input:focus{border-color:var(--c64l)}\n.rfman .where{flex:1 1 200px;min-width:0;font-size:14px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.rfman .where b{color:var(--text)}\n.rfman .seg{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--bg2)}\n.rfman .seg button{background:none;border:0;padding:7px 11px;font-size:13px;color:var(--muted);border-right:1px solid var(--line);white-space:nowrap}\n.rfman .seg button:last-child{border-right:0}\n.rfman .seg button[aria-pressed=true]{background:#342c74;color:#fff}\n.rfman .seg button:hover{color:#fff}\n.rfman .reader.rm .rbar{display:none}\n.rfman .back{background:var(--bg2);border:1px solid var(--line);border-radius:8px;padding:7px 11px;font-size:13px;color:var(--yel)}\n.rfman .back:hover{background:var(--line)}\n\n.rfman .page{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:0}\n.rfman .page[data-v=text]{grid-template-columns:minmax(0,1fr)}\n.rfman .page[data-v=scan]{grid-template-columns:minmax(0,1fr)}\n.rfman .page[data-v=text] .scan,.rfman .page[data-v=scan] .txt{display:none}\n.rfman .txt{padding:20px 24px 28px;font-size:16px;min-width:0}\n.rfman .page[data-v=text] .txt{max-width:860px}\n.rfman .txt .lbl{font-family:'VT323',monospace;font-size:19px;color:var(--c64l);margin-bottom:8px}\n.rfman .txt h3{font-size:17px!important;color:var(--yel)!important;margin:16px 0 8px!important;line-height:1.35}\n.rfman .txt h3:first-of-type{margin-top:0!important}\n.rfman .txt p{margin:0 0 11px;color:#dcd9f7}\n.rfman .txt pre{font-family:'VT323',monospace;font-size:19px;line-height:1.2;background:var(--c64b);color:#a8a0ff;border:1px solid #6c5eb5;border-radius:6px;padding:10px 12px;margin:4px 0 12px;white-space:pre-wrap;word-break:break-word}\n.rfman .txt .empty{color:var(--muted);font-style:italic}\n.rfman .txt .ocr{margin-top:18px;padding-top:10px;border-top:1px dashed var(--line);font-size:13px;color:var(--muted)}\n.rfman .scan{padding:16px;border-left:1px solid var(--line);min-width:0}\n.rfman .page[data-v=scan] .scan{border-left:0;display:flex;justify-content:center}\n.rfman .page[data-v=both] .scan figure{position:sticky;top:70px}\n.rfman .scan figure{margin:0;position:relative;max-width:720px;width:100%}\n.rfman .scan .ph{aspect-ratio:771\/1256;background:#0b0920;border:1px solid var(--line);border-radius:6px;display:flex;align-items:center;justify-content:center;color:var(--muted);font-family:'VT323',monospace;font-size:20px;overflow:hidden}\n.rfman .scan img{display:block;width:100%;height:100%;object-fit:contain;background:#fff;cursor:zoom-in}\n.rfman .scan figcaption{display:flex;justify-content:space-between;gap:10px;font-size:12.5px;color:var(--muted);margin-top:6px}\n\n.rfman .results{padding:14px 16px 20px}\n.rfman .rhead{font-size:14px;color:var(--muted);margin-bottom:12px}\n.rfman .rhead b{color:#fff}\n.rfman .quick{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}\n.rfman .quick button{display:flex;flex-direction:column;align-items:flex-start;gap:1px;background:var(--bg2);border:1px solid var(--line);border-left:3px solid var(--grn);border-radius:8px;padding:7px 12px;text-align:left;font-size:14px}\n.rfman .quick button small{font-size:11.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}\n.rfman .quick button:hover{border-color:var(--grn);background:#1f2a4a}\n.rfman .hit{display:block;width:100%;text-align:left;background:none;border:0;border-top:1px solid var(--line);padding:11px 6px;border-radius:0}\n.rfman .hit:hover{background:#231d55}\n.rfman .hit .top{display:flex;gap:10px;align-items:baseline;margin-bottom:3px}\n.rfman .hit .pn{font-family:'VT323',monospace;font-size:20px;color:var(--yel);flex:none;min-width:58px}\n.rfman .hit .ct{font-size:13px;color:var(--c64l);font-weight:600}\n.rfman .hit .ct i{font-style:normal;color:var(--muted);font-weight:400}\n.rfman .hit .sn{font-size:14.5px;color:#cfcbef;padding-left:68px}\n.rfman .hit .cnt{margin-left:auto;font-size:12px;color:var(--muted);flex:none}\n.rfman .none{color:var(--muted);padding:18px 4px}\n\n.rfman .credits{margin-top:18px;font-size:13px;color:var(--muted);max-width:1000px}\n.rfman kbd{font-family:'VT323',monospace;font-size:16px;background:var(--bg2);border:1px solid var(--line);border-radius:4px;padding:0 5px}\n\n.rfman .lb{position:fixed;inset:0;background:rgb(5 4 15 \/ .94);z-index:99999;overflow:auto;padding:20px;display:flex;justify-content:center;align-items:flex-start;cursor:zoom-out}\n.rfman .lb img{max-width:min(1500px,100%);height:auto;background:#fff;box-shadow:0 10px 40px #000}\n.rfman .lb button{position:fixed;top:12px;right:16px;width:42px;height:42px;border-radius:50%;border:1px solid var(--line);background:var(--panel);font-size:22px}\n\n\/* modalit\u00e0 modifica (solo amministratori) *\/\n.rfman .edit{background:var(--bg2);border:1px solid var(--mag);border-radius:8px;padding:7px 11px;font-size:13px;color:#ff9ccc}\n.rfman .edit:hover,.rfman .edit[aria-pressed=true]{background:var(--mag);color:#fff}\n.rfman .txt .lbl .fx{color:var(--grn);margin-left:8px}\n.rfman .ed textarea{width:100%;min-height:62vh;background:#0b0920;color:#eceaff;border:1px solid var(--line);border-radius:8px;padding:12px;font:15px\/1.45 ui-monospace,Consolas,'Courier New',monospace;resize:vertical;outline:none;tab-size:4}\n.rfman .ed textarea:focus{border-color:var(--mag)}\n.rfman .ed .help{font-size:13px;color:var(--muted);margin:0 0 8px}\n.rfman .ed .help code{font-family:ui-monospace,Consolas,monospace;color:var(--yel);background:var(--bg2);padding:0 4px;border-radius:3px}\n.rfman .ed .btns{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px;align-items:center}\n.rfman .ed .btns button{border:1px solid var(--line);background:var(--bg2);border-radius:8px;padding:8px 13px;font-size:14px}\n.rfman .ed .btns button:hover{background:var(--line)}\n.rfman .ed .btns .pri{background:var(--grn);border-color:var(--grn);color:#0f0c24;font-weight:700}\n.rfman .ed .btns .pri:hover{background:#7be27f}\n.rfman .ed .btns .rst{margin-left:auto;color:#ff9ccc;border-color:var(--mag)}\n.rfman .ed .msg{font-size:13px;color:var(--grn)}\n.rfman .ed .msg.err{color:var(--red)}\n.rfman .ed .chars{display:flex;flex-wrap:wrap;gap:4px;margin:0 0 8px}\n.rfman .ed .chars button{min-width:30px;border:1px solid var(--line);background:var(--bg2);border-radius:6px;padding:2px 7px;font:15px ui-monospace,Consolas,monospace}\n.rfman .ed .chars button:hover{border-color:var(--yel);color:var(--yel)}\n@media (max-width:1100px){.rfman .page{grid-template-columns:minmax(0,1fr)}.rfman .page[data-v=both] .scan{border-left:0;border-top:1px solid var(--line)}}\n@media (max-width:900px){\n .rfman .main{grid-template-columns:minmax(0,1fr)}\n .rfman .side{position:static;max-height:none;display:none}\n .rfman .side.open{display:flex;max-height:70vh}\n .rfman .side-toggle{display:inline-flex;align-items:center;gap:8px;background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:9px 14px;font-size:14px;font-weight:600;margin-bottom:10px}\n .rfman .rbar{position:static}\n .rfman .txt{padding:16px 16px 22px}\n .rfman .hit .sn{padding-left:0}\n}\n<\/style>\n\n<div class=\"rfman\" data-no-translation>\n <div class=\"wrap\">\n  <div class=\"head\">\n   <h2 data-t=\"title\">Manuale d'uso Commodore 64<\/h2>\n   <p data-t=\"intro\">Il manuale originale italiano del Commodore 64 (1982), consultabile e ricercabile. Cerca una parola, un comando BASIC o un indirizzo di memoria e vai subito alla pagina giusta, con il testo e la scansione originale affiancati.<\/p>\n   <div class=\"stats\" id=\"rfmStats\"><\/div>\n  <\/div>\n\n  <div class=\"search\" role=\"search\">\n   <svg class=\"lens\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" aria-hidden=\"true\"><circle cx=\"8.5\" cy=\"8.5\" r=\"6\"\/><path d=\"M13 13l5 5\" stroke-linecap=\"round\"\/><\/svg>\n   <input id=\"rfmQ\" type=\"search\" autocomplete=\"off\" spellcheck=\"false\" placeholder=\"Cerca nel manuale: POKE 53280, sprite, joystick, SAVE\u2026\" data-tp=\"ph\" aria-label=\"Cerca\">\n   <button class=\"x\" id=\"rfmX\" type=\"button\" aria-label=\"Cancella\" hidden>\u00d7<\/button>\n  <\/div>\n  <div class=\"chips\" id=\"rfmChips\"><\/div>\n\n  <button class=\"side-toggle\" id=\"rfmSideT\" type=\"button\" aria-expanded=\"false\"><span>\u2630<\/span><span data-t=\"toc\">Indice<\/span><\/button>\n  <div class=\"main\">\n   <aside class=\"side\" id=\"rfmSide\">\n    <div class=\"tabs\" role=\"tablist\">\n     <button role=\"tab\" data-tab=\"toc\" aria-selected=\"true\" data-t=\"tToc\">Capitoli<\/button>\n     <button role=\"tab\" data-tab=\"idx\" aria-selected=\"false\" data-t=\"tIdx\">Indice A-Z<\/button>\n     <button role=\"tab\" data-tab=\"kw\" aria-selected=\"false\" data-t=\"tKw\">BASIC<\/button>\n    <\/div>\n    <div class=\"pane toc\" id=\"rfmToc\" role=\"tabpanel\"><\/div>\n    <div class=\"pane\" id=\"rfmIdxP\" role=\"tabpanel\" hidden>\n     <input class=\"flt\" id=\"rfmIdxF\" type=\"search\" autocomplete=\"off\" placeholder=\"Filtra l'indice\u2026\" data-tp=\"flt\">\n     <div class=\"idx\" id=\"rfmIdx\"><\/div>\n    <\/div>\n    <div class=\"pane\" id=\"rfmKwP\" role=\"tabpanel\" hidden><div class=\"kw\" id=\"rfmKw\"><\/div><\/div>\n   <\/aside>\n\n   <section class=\"reader\" id=\"rfmReader\" aria-live=\"polite\">\n    <div class=\"rbar\">\n     <button class=\"back\" id=\"rfmBack\" type=\"button\" hidden data-t=\"back\">\u25c0 Risultati<\/button>\n     <div class=\"nav\">\n      <button id=\"rfmPrev\" type=\"button\" aria-label=\"Pagina precedente\">\u25c0<\/button>\n      <span class=\"pgno\"><span data-t=\"pg\">Pag.<\/span> <input id=\"rfmPg\" inputmode=\"numeric\" aria-label=\"Pagina\"><\/span>\n      <button id=\"rfmNext\" type=\"button\" aria-label=\"Pagina successiva\">\u25b6<\/button>\n     <\/div>\n     <div class=\"where\" id=\"rfmWhere\"><\/div>\n     <div class=\"seg\" id=\"rfmView\" role=\"group\">\n      <button data-v=\"both\" aria-pressed=\"true\" data-t=\"vBoth\">Affiancati<\/button>\n      <button data-v=\"text\" aria-pressed=\"false\" data-t=\"vText\">Testo<\/button>\n      <button data-v=\"scan\" aria-pressed=\"false\" data-t=\"vScan\">Scansione<\/button>\n     <\/div>\n     <button class=\"edit\" id=\"rfmEdit\" type=\"button\" hidden data-t=\"edit\">\u270e Modifica<\/button>\n    <\/div>\n    <div class=\"results\" id=\"rfmRes\" hidden><\/div>\n    <div class=\"page\" id=\"rfmPage\" data-v=\"both\">\n     <div class=\"txt\" id=\"rfmTxt\"><p class=\"empty\" data-t=\"loading\">Caricamento del manuale\u2026<\/p><\/div>\n     <div class=\"scan\"><figure><div class=\"ph\" id=\"rfmPh\"><\/div><figcaption><span id=\"rfmCap\"><\/span><a id=\"rfmIA\" href=\"#\" target=\"_blank\" rel=\"noopener\" data-t=\"openIA\">Apri su archive.org \u2197<\/a><\/figcaption><\/figure><\/div>\n    <\/div>\n   <\/section>\n  <\/div>\n\n  <p class=\"credits\" data-th=\"credits\">Scansione e riconoscimento del testo (OCR) da <a href=\"https:\/\/archive.org\/details\/Commodore_64_Microcomputer_Manuale_duso_1982_Commodore_IT\" target=\"_blank\" rel=\"noopener\">Internet Archive<\/a>; il testo \u00e8 stato ripulito in automatico da RetroFixer e pu\u00f2 contenere errori, soprattutto nei listati e nelle tabelle: in caso di dubbio fa fede la scansione. Manuale \u00a9 1982 Commodore Italiana S.r.l. Scorciatoie: <kbd>\/<\/kbd> cerca, <kbd>\u2190<\/kbd> <kbd>\u2192<\/kbd> sfoglia le pagine, <kbd>Esc<\/kbd> chiude la ricerca.<\/p>\n <\/div>\n<\/div>\n\n<script>\n(function(){\n'use strict';\nvar EN = \/^en\/i.test(document.documentElement.lang || '');\nvar T = {\n it:{\n  title:\"Manuale d'uso Commodore 64\",\n  intro:\"Il manuale originale italiano del Commodore 64 (1982), consultabile e ricercabile. Cerca una parola, un comando BASIC o un indirizzo di memoria e vai subito alla pagina giusta, con il testo e la scansione originale affiancati.\",\n  stats:'{p} pagine \u00b7 {c} capitoli e appendici \u00b7 {k} parole chiave BASIC',\n  ph:'Cerca nel manuale: POKE 53280, sprite, joystick, SAVE\u2026', toc:'Indice', tToc:'Capitoli', tIdx:'Indice A-Z', tKw:'BASIC',\n  flt:\"Filtra l'indice\u2026\", back:'\u25c0 Risultati', pg:'Pag.', vBoth:'Affiancati', vText:'Testo', vScan:'Scansione',\n  loading:'Caricamento del manuale\u2026', loadErr:'Non riesco a caricare il manuale. Riprova tra poco.',\n  openIA:'Apri su archive.org \u2197', scanLoad:'Caricamento scansione\u2026', scanErr:'Scansione non disponibile',\n  try:'Prova:', noText:'Questa pagina non contiene testo: guarda la scansione.',\n  ocr:'Testo ottenuto con OCR: listati e tabelle possono contenere errori, controlla la scansione.',\n  res:'{n} pagine trovate per \u00ab{q}\u00bb', res1:'1 pagina trovata per \u00ab{q}\u00bb', none:'Nessun risultato per \u00ab{q}\u00bb. Prova con una parola diversa o pi\u00f9 corta.',\n  occ:'{n} volte', kwHit:'Parola chiave BASIC', idxHit:'Indice analitico', secHit:'Capitolo',\n  page:'Pagina {n}', scanOf:'Scansione \u00b7 foglio {l} di {t}',\n  kCmd:'Comandi', kStm:'Istruzioni', kFn:'Funzioni', kOth:'Variabili e operatori', zoom:'Clicca per ingrandire',\n  edit:'\u270e Modifica', save:'Salva', saveNext:'Salva e vai alla successiva \u25b6', cancel:'Chiudi', restore:'Ripristina testo OCR',\n  exportFix:'Esporta correzioni', saved:'Salvato \u2713', saving:'Salvataggio\u2026', saveErr:'Errore nel salvataggio ({e}): riprova.',\n  fixed:'\u2713 corretta', unsaved:'Ci sono modifiche non salvate in questa pagina. Vuoi perderle?', restoreQ:'Tornare al testo OCR originale di questa pagina?',\n  editHelp:'Riga vuota = nuovo paragrafo \u00b7 <code>## <\/code> a inizio riga = titolo \u00b7 listati e schermate tra due righe <code>```<\/code> (gli a capo restano come li scrivi) \u00b7 <kbd>Ctrl<\/kbd>+<kbd>S<\/kbd> salva',\n  credits:'Scansione e riconoscimento del testo (OCR) da <a href=\"https:\/\/archive.org\/details\/Commodore_64_Microcomputer_Manuale_duso_1982_Commodore_IT\" target=\"_blank\" rel=\"noopener\">Internet Archive<\/a>; il testo \u00e8 stato ripulito in automatico da RetroFixer e pu\u00f2 contenere errori, soprattutto nei listati e nelle tabelle: in caso di dubbio fa fede la scansione. Manuale \u00a9 1982 Commodore Italiana S.r.l. Scorciatoie: <kbd>\/<\/kbd> cerca, <kbd>\u2190<\/kbd> <kbd>\u2192<\/kbd> sfoglia le pagine, <kbd>Esc<\/kbd> chiude la ricerca.'\n },\n en:{\n  title:'Commodore 64 User Manual (Italian)',\n  intro:'The original Italian Commodore 64 user manual (1982), browsable and searchable. Search for a word, a BASIC command or a memory address and jump straight to the right page, with the text and the original scan side by side. The manual itself is in Italian.',\n  stats:'{p} pages \u00b7 {c} chapters and appendices \u00b7 {k} BASIC keywords',\n  ph:'Search the manual: POKE 53280, sprite, joystick, SAVE\u2026', toc:'Contents', tToc:'Chapters', tIdx:'A-Z index', tKw:'BASIC',\n  flt:'Filter the index\u2026', back:'\u25c0 Results', pg:'Page', vBoth:'Side by side', vText:'Text', vScan:'Scan',\n  loading:'Loading the manual\u2026', loadErr:'Could not load the manual. Please try again shortly.',\n  openIA:'Open on archive.org \u2197', scanLoad:'Loading scan\u2026', scanErr:'Scan not available',\n  try:'Try:', noText:'This page has no text: see the scan.',\n  ocr:'OCR text: listings and tables may contain errors, check the scan.',\n  res:'{n} pages found for \u201c{q}\u201d', res1:'1 page found for \u201c{q}\u201d', none:'No results for \u201c{q}\u201d. Try a different or shorter word (the manual is in Italian).',\n  occ:'{n} hits', kwHit:'BASIC keyword', idxHit:'Index entry', secHit:'Chapter',\n  page:'Page {n}', scanOf:'Scan \u00b7 sheet {l} of {t}',\n  kCmd:'Commands', kStm:'Statements', kFn:'Functions', kOth:'Variables and operators', zoom:'Click to enlarge',\n  edit:'\u270e Edit', save:'Save', saveNext:'Save and go to next \u25b6', cancel:'Close', restore:'Restore OCR text',\n  exportFix:'Export corrections', saved:'Saved \u2713', saving:'Saving\u2026', saveErr:'Save failed ({e}): please retry.',\n  fixed:'\u2713 corrected', unsaved:'This page has unsaved changes. Discard them?', restoreQ:'Go back to the original OCR text of this page?',\n  editHelp:'Blank line = new paragraph \u00b7 <code>## <\/code> at line start = heading \u00b7 listings and screens between two <code>```<\/code> lines (line breaks kept) \u00b7 <kbd>Ctrl<\/kbd>+<kbd>S<\/kbd> saves',\n  credits:'Scan and OCR text from <a href=\"https:\/\/archive.org\/details\/Commodore_64_Microcomputer_Manuale_duso_1982_Commodore_IT\" target=\"_blank\" rel=\"noopener\">Internet Archive<\/a>; the text was cleaned up automatically by RetroFixer and may contain errors, especially in listings and tables: when in doubt, trust the scan. Manual \u00a9 1982 Commodore Italiana S.r.l. Shortcuts: <kbd>\/<\/kbd> search, <kbd>\u2190<\/kbd> <kbd>\u2192<\/kbd> turn pages, <kbd>Esc<\/kbd> close search.'\n }\n}[EN ? 'en' : 'it'];\nfunction tr(k, o){ var s = T[k] || k; if (o) for (var x in o) s = s.split('{' + x + '}').join(o[x]); return s; }\nfunction $(id){ return document.getElementById(id); }\nfunction esc(s){ return String(s).replace(\/[&<>\"]\/g, function(c){ return {'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;'}[c]; }); }\n\nvar root = document.querySelector('.rfman');\nroot.querySelectorAll('[data-t]').forEach(function(e){ e.textContent = tr(e.dataset.t); });\nroot.querySelectorAll('[data-tp]').forEach(function(e){ e.placeholder = tr(e.dataset.tp); });\nroot.querySelectorAll('[data-th]').forEach(function(e){ e.innerHTML = tr(e.dataset.th); });\n\n\/\/ file dei dati nella libreria media (in locale si usa quello in dati\/)\nvar LOCAL = \/^(localhost|127\\.)\/.test(location.hostname) || location.protocol === 'file:';\nvar DATA = LOCAL ? 'dati\/c64-manuale-it.txt' : '\/wp-content\/uploads\/2026\/11\/c64-manuale-it.txt';\n\/\/ correzioni salvate dagli amministratori (snippet WPCode \"RetroFixer - correzioni Manuale C64\")\nvar FIX = LOCAL ? 'dati\/correzioni.json' : '\/wp-json\/retrofixer\/v1\/manuale-c64';\nvar fixes = {}, editing = false, edSrc = '';\n\nvar CHIPS = ['POKE 53280', 'sprite', 'SID', 'joystick', 'LOAD', 'SAVE', 'CHR$', 'messaggi di errore', 'mappa di memoria', 'colori'];\n\nvar D, pages, fold = [], leafByLabel = {}, chapters = [], cur = -1, query = '', terms = [], view = 'both', fromResults = false;\n\n\/* ---------- normalizzazione per la ricerca (stessa lunghezza del testo originale) ---------- *\/\nvar fcache = {};\nfunction fch(c){\n  var r = fcache[c];\n  if (r === undefined) {\n    r = c.normalize('NFD').charAt(0).toLowerCase();\n    if (c === '\u2019' || c === '\u2018' || c === '`') r = \"'\";\n    if (c === '\u00ab' || c === '\u00bb' || c === '\u201c' || c === '\u201d') r = '\"';\n    fcache[c] = r;\n  }\n  return r;\n}\nfunction f(s){ var o = ''; for (var i = 0; i < s.length; i++) o += fch(s[i]); return o; }\n\n\/\/ il manuale usa termini italiani dell'epoca: ogni parola cerca anche i suoi sinonimi\nvar SYN = {\n  sprite: ['grafici animati', 'grafico animato', 'disegni animati', 'disegno animato'], sprites: ['grafici animati', 'disegni animati'],\n  sid: ['suono', 'sonor', 'voce'], audio: ['suono', 'sonor'], musica: ['suono', 'nota', 'note'], sound: ['suono', 'sonor'],\n  joystick: ['comando giochi', 'barre di comando', 'control port', 'paddle'], paddle: ['comando giochi'],\n  cassetta: ['nastro', 'datassette', 'datasette', 'registratore'], tape: ['nastro', 'datassette', 'datasette'],\n  disk: ['disco', 'floppy'], disco: ['disk', 'floppy'], floppy: ['disco', 'disk'],\n  stampante: ['printer'], printer: ['stampante'], errore: ['error'], errori: ['error'], error: ['errore'],\n  colore: ['colori'], colori: ['colore'], color: ['colore', 'colori'], schermo: ['video'],\n  vic: ['schermo', 'video'], ram: ['memoria'], memoria: ['memory'], memory: ['memoria'], tastiera: ['tasti', 'tasto'],\n  keyboard: ['tastiera', 'tasti']\n};\nfunction parseGroups(q){\n  var out = [], m, re = \/\"([^\"]+)\"|(\\S+)\/g;\n  q = f(q.normalize('NFC'));\n  while ((m = re.exec(q))) {\n    var t = (m[1] || m[2]).trim();\n    if (t.length >= 2 || \/[$#%0-9]\/.test(t)) out.push([t].concat(SYN[t] || []));\n  }\n  return out;\n}\nfunction parseQuery(q){ return [].concat.apply([], parseGroups(q)); }\n\n\/* ---------- evidenziazione ---------- *\/\nfunction ranges(fs, ts){\n  var r = [];\n  ts.forEach(function(t){\n    var i = 0;\n    while ((i = fs.indexOf(t, i)) !== -1) { r.push([i, i + t.length]); i += t.length; }\n  });\n  r.sort(function(a, b){ return a[0] - b[0]; });\n  var m = [];\n  r.forEach(function(x){ if (m.length && x[0] <= m[m.length - 1][1]) m[m.length - 1][1] = Math.max(m[m.length - 1][1], x[1]); else m.push(x); });\n  return m;\n}\nfunction hl(s, ts, from, to){\n  from = from || 0; to = to === undefined ? s.length : to;\n  var sub = s.slice(from, to);\n  if (!ts.length) return esc(sub);\n  var rr = ranges(f(sub), ts), o = '', p = 0;\n  rr.forEach(function(x){ o += esc(sub.slice(p, x[0])) + '<mark>' + esc(sub.slice(x[0], x[1])) + '<\/mark>'; p = x[1]; });\n  return o + esc(sub.slice(p));\n}\n\n\/* ---------- etichette pagine e capitoli ---------- *\/\nfunction leafOf(label){\n  label = String(label).trim().toLowerCase();\n  if (leafByLabel[label] !== undefined) return leafByLabel[label];\n  return -1;\n}\nfunction chapterOf(leaf){\n  var best = null;\n  chapters.forEach(function(c){ if (c.leaf <= leaf && (!best || c.leaf >= best.leaf)) best = c; });\n  return best;\n}\nfunction sectionOf(leaf){\n  var ch = chapterOf(leaf), best = null;\n  if (!ch) return null;\n  ch.secs.forEach(function(s){ if (s.leaf <= leaf && (!best || s.leaf >= best.leaf)) best = s; });\n  return best;\n}\nfunction pageName(p){ return \/^\\d+$|^[vix]+$\/.test(p.n) ? tr('page', {n: p.n}) : p.n; }\n\n\/* ---------- barra laterale ---------- *\/\nfunction buildSide(){\n  $('rfmToc').innerHTML = chapters.map(function(c, i){\n    return '<div class=\"ch\"><button data-l=\"' + c.leaf + '\" data-c=\"' + i + '\"><span>' + esc(c.t) + '<\/span><span class=\"n\">' + esc(c.p) + '<\/span><\/button>' +\n      (c.secs.length ? '<div class=\"sec\">' + c.secs.map(function(s){\n        return '<button data-l=\"' + s.leaf + '\"><span>' + esc(s.t) + '<\/span><span class=\"n\">' + esc(s.p) + '<\/span><\/button>';\n      }).join('') + '<\/div>' : '') + '<\/div>';\n  }).join('');\n\n  renderIdx('');\n\n  var groups = [['kCmd', 0, 7], ['kStm', 7, 36], ['kFn', 36, 62], ['kOth', 62, 99]];\n  $('rfmKw').innerHTML = groups.map(function(g){\n    var items = D.kw.slice(g[1], g[2]);\n    if (!items.length) return '';\n    return '<h4>' + tr(g[0]) + '<\/h4>' + items.map(function(k){\n      return '<button data-l=\"' + leafOf(k[1]) + '\" data-q=\"' + esc(k[0].split(\/[ .\\\/]\/)[0]) + '\" title=\"' + tr('page', {n: k[1]}) + '\">' + esc(k[0]) + '<\/button>';\n    }).join('');\n  }).join('');\n}\nfunction pageLinks(refs){\n  return refs.split(',').map(function(r){\n    r = r.trim(); var first = r.split('-')[0];\n    var l = leafOf(first);\n    return l < 0 ? esc(r) : '<button data-l=\"' + l + '\">' + esc(r) + '<\/button>';\n  }).join('');\n}\nfunction renderIdx(q){\n  var fq = f(q.trim());\n  var rows = D.idx.filter(function(e){ return !fq || f(e[0]).indexOf(fq) !== -1; });\n  $('rfmIdx').innerHTML = rows.map(function(e){\n    return '<div><span class=\"t\">' + hl(e[0], fq ? [fq] : []) + '<\/span>' + pageLinks(e[1]) + '<\/div>';\n  }).join('') || '<p class=\"none\">\u2014<\/p>';\n}\nfunction markToc(){\n  var ch = chapterOf(cur), sec = sectionOf(cur);\n  $('rfmToc').querySelectorAll('button').forEach(function(b){\n    var l = +b.dataset.l;\n    var on = sec ? (b.parentNode.className === 'sec' && l === sec.leaf && b.textContent.indexOf(sec.t) === 0) : (ch && b.dataset.c !== undefined && l === ch.leaf);\n    b.classList.toggle('cur', !!on);\n  });\n  \/\/ tiene visibile nell'indice la voce corrente senza far scorrere la pagina\n  var pane = $('rfmToc'), c = pane.querySelector('.cur');\n  if (c && !pane.hidden) {\n    var pr = pane.getBoundingClientRect(), cr = c.getBoundingClientRect();\n    if (cr.top < pr.top || cr.bottom > pr.bottom) pane.scrollTop += cr.top - pr.top - pr.height \/ 3;\n  }\n}\n\n\/* ---------- pagina ---------- *\/\nfunction scanUrl(leaf, w){ return 'https:\/\/archive.org\/download\/' + D.id + '\/page\/n' + leaf + '_w' + w + '.jpg'; }\n\nfunction show(leaf, keepTerms){\n  if (leaf < 0 || leaf >= pages.length) return;\n  if (editing && leaf !== cur && edDirty() && !confirm(tr('unsaved'))) return;\n  cur = leaf;\n  if (!keepTerms) { terms = []; }\n  var p = pages[leaf];\n  $('rfmRes').hidden = true; $('rfmPage').hidden = false; $('rfmReader').classList.remove('rm');\n  $('rfmBack').hidden = !fromResults;\n  $('rfmPg').value = p.n;\n  $('rfmPrev').disabled = leaf === 0; $('rfmNext').disabled = leaf === pages.length - 1;\n  var ch = chapterOf(leaf), sec = sectionOf(leaf);\n  $('rfmWhere').innerHTML = ch ? '<b>' + esc(ch.t) + '<\/b>' + (sec ? ' \u00b7 ' + esc(sec.t) : '') : '';\n  $('rfmWhere').title = $('rfmWhere').textContent;\n\n  var html = '<div class=\"lbl\">' + esc(pageName(p)) + (p.orig ? '<span class=\"fx\">' + tr('fixed') + '<\/span>' : '') + '<\/div>';\n  if (editing) html += editorHtml(p);\n  else if (!p.b.length) html += '<p class=\"empty\">' + tr('noText') + '<\/p>';\n  if (!editing) {\n  var firstMark = null;\n  p.b.forEach(function(b){\n    var h = hl(b[1], terms);\n    if (b[0] === 'h') html += '<h3>' + h + '<\/h3>';\n    else if (b[0] === 'c') html += '<pre>' + h + '<\/pre>';\n    else html += '<p>' + h + '<\/p>';\n  });\n  if (p.b.length) html += '<p class=\"ocr\">' + tr('ocr') + '<\/p>';\n  }\n  $('rfmTxt').innerHTML = html;\n  if (editing) wireEditor(p);\n\n  \/\/ scansione\n  var ph = $('rfmPh');\n  ph.innerHTML = tr('scanLoad');\n  var img = new Image();\n  img.alt = pageName(p); img.title = tr('zoom'); img.decoding = 'async';\n  img.onload = function(){ if (cur === leaf) { ph.innerHTML = ''; ph.appendChild(img); } };\n  img.onerror = function(){ if (cur === leaf) ph.textContent = tr('scanErr'); };\n  img.src = scanUrl(leaf, 700);\n  img.onclick = function(){ zoom(leaf); };\n  $('rfmCap').textContent = tr('scanOf', {l: leaf + 1, t: pages.length});\n  $('rfmIA').href = 'https:\/\/archive.org\/details\/' + D.id + '\/page\/n' + leaf + '\/mode\/1up';\n  \/\/ precarica la pagina successiva\n  if (leaf + 1 < pages.length && view !== 'text') { var nx = new Image(); nx.src = scanUrl(leaf + 1, 700); }\n\n  markToc();\n  setHash();\n  var m = $('rfmTxt').querySelector('mark');\n  var rd = $('rfmReader');\n  if (rd.getBoundingClientRect().top < 0) rd.scrollIntoView({block: 'start'});\n  if (m && view !== 'scan') {\n    var r = m.getBoundingClientRect();\n    if (r.top > window.innerHeight * 0.8) window.scrollBy(0, r.top - window.innerHeight * 0.35);\n  }\n}\n\nfunction zoom(leaf){\n  var lb = document.createElement('div');\n  lb.className = 'lb';\n  lb.innerHTML = '<button type=\"button\" aria-label=\"Chiudi\">\u00d7<\/button><img decoding=\"async\" alt=\"\" src=\"' + scanUrl(leaf, 1600) + '\">';\n  lb.onclick = function(){ lb.remove(); document.removeEventListener('keydown', k, true); };\n  function k(e){ if (e.key === 'Escape') { e.stopPropagation(); lb.onclick(); } }\n  document.addEventListener('keydown', k, true);\n  root.appendChild(lb);\n}\n\n\/* ---------- modifica del testo (solo amministratori) ---------- *\/\n\/\/ la pagina si modifica come testo semplice: riga vuota = paragrafo, \"## \" = titolo, ``` ... ``` = listato\nfunction toMarkup(blocks){\n  return blocks.map(function(b){\n    return b[0] === 'h' ? '## ' + b[1] : b[0] === 'c' ? '```\\n' + b[1] + '\\n```' : b[1];\n  }).join('\\n\\n');\n}\nfunction fromMarkup(s){\n  var out = [], lines = s.replace(\/\\r\/g, '').split('\\n'), para = [], code = null;\n  function flush(){\n    var t = para.join(' ').replace(\/\\s+\/g, ' ').trim(); para = [];\n    if (!t) return;\n    if (\/^##\\s\/.test(t)) out.push(['h', t.replace(\/^##\\s+\/, '')]); else out.push(['p', t]);\n  }\n  lines.forEach(function(l){\n    if (code !== null) {\n      if (\/^```\\s*$\/.test(l)) { out.push(['c', code.join('\\n').replace(\/\\s+$\/, '')]); code = null; }\n      else code.push(l);\n    } else if (\/^```\/.test(l)) { flush(); code = []; }\n    else if (!l.trim()) flush();\n    else if (\/^##\\s\/.test(l)) { flush(); para.push(l); flush(); }\n    else para.push(l);\n  });\n  if (code !== null) out.push(['c', code.join('\\n').replace(\/\\s+$\/, '')]);\n  flush();\n  return out.filter(function(b){ return b[1]; });\n}\nvar CHARS = ['\u03a9', '\u03c0', '\u00a3', '\u2191', '\u2190', '\u2588', '\u258c', '\u2665', '{CLR\/HOME}', '{CRSR DOWN}', '{CRSR RIGHT}', '{RVS ON}'];\nfunction editorHtml(p){\n  edSrc = toMarkup(p.b);\n  return '<div class=\"ed\"><p class=\"help\">' + tr('editHelp') + '<\/p>' +\n    '<div class=\"chars\">' + CHARS.map(function(c){ return '<button type=\"button\" data-ch=\"' + esc(c) + '\">' + esc(c) + '<\/button>'; }).join('') + '<\/div>' +\n    '<textarea id=\"rfmEd\" spellcheck=\"false\" aria-label=\"' + esc(tr('edit')) + '\">' + esc(edSrc) + '<\/textarea>' +\n    '<div class=\"btns\"><button type=\"button\" class=\"pri\" data-a=\"save\">' + tr('save') + '<\/button>' +\n    '<button type=\"button\" data-a=\"next\">' + tr('saveNext') + '<\/button>' +\n    '<button type=\"button\" data-a=\"close\">' + tr('cancel') + '<\/button>' +\n    '<span class=\"msg\" id=\"rfmMsg\"><\/span>' +\n    (p.orig ? '<button type=\"button\" class=\"rst\" data-a=\"restore\">' + tr('restore') + '<\/button>' : '') +\n    (LOCAL ? '<button type=\"button\" data-a=\"export\">' + tr('exportFix') + '<\/button>' : '') + '<\/div><\/div>';\n}\nfunction enableEdit(){\n  if (!LOCAL && !window.rfManEdit) return false;\n  $('rfmEdit').hidden = false;\n  $('rfmEdit').setAttribute('aria-pressed', 'false');\n  $('rfmEdit').onclick = function(){ if (!editing || !edDirty() || confirm(tr('unsaved'))) setEditing(!editing); };\n  return true;\n}\nfunction edDirty(){ var t = $('rfmEd'); return !!t && t.value !== edSrc; }\nfunction wireEditor(p){\n  var ta = $('rfmEd'), leaf = cur;\n  ta.addEventListener('keydown', function(e){\n    if ((e.ctrlKey || e.metaKey) && (e.key === 's' || e.key === 'S')) { e.preventDefault(); saveFix(leaf, fromMarkup(ta.value)); }\n  });\n  $('rfmTxt').querySelector('.chars').addEventListener('click', function(e){\n    var b = e.target.closest('button'); if (!b) return;\n    ta.setRangeText(b.dataset.ch, ta.selectionStart, ta.selectionEnd, 'end'); ta.focus();\n  });\n  $('rfmTxt').querySelector('.btns').addEventListener('click', function(e){\n    var b = e.target.closest('button'); if (!b) return;\n    var a = b.dataset.a;\n    if (a === 'save') saveFix(leaf, fromMarkup(ta.value));\n    else if (a === 'next') saveFix(leaf, fromMarkup(ta.value), function(){ if (leaf < pages.length - 1) show(leaf + 1, true); });\n    else if (a === 'close') { if (!edDirty() || confirm(tr('unsaved'))) { edSrc = ta.value; setEditing(false); } }\n    else if (a === 'restore') { if (confirm(tr('restoreQ'))) saveFix(leaf, null); }\n    else if (a === 'export') exportFixes();\n  });\n}\nfunction setEditing(on){\n  editing = on;\n  $('rfmEdit').setAttribute('aria-pressed', on ? 'true' : 'false');\n  if (on && view !== 'both') setView('both');\n  show(cur, true);\n  if (on) { var t = $('rfmEd'); if (t) t.focus(); }\n}\nfunction applyFix(leaf, blocks){\n  var p = pages[leaf];\n  if (blocks) { if (!p.orig) p.orig = p.b; p.b = blocks; }\n  else if (p.orig) { p.b = p.orig; delete p.orig; }\n  indexPage(p, leaf);\n}\nfunction saveFix(leaf, blocks, done){\n  var msg = $('rfmMsg');\n  function ok(){\n    if (blocks) fixes[leaf] = blocks; else delete fixes[leaf];\n    applyFix(leaf, blocks);\n    edSrc = $('rfmEd') ? $('rfmEd').value : '';\n    if (done) done(); else { show(leaf, true); var m = $('rfmMsg'); if (m) m.textContent = tr('saved'); }\n  }\n  if (LOCAL) { ok(); return; }\n  if (msg) { msg.className = 'msg'; msg.textContent = tr('saving'); }\n  fetch(window.rfManEdit.api, {method: 'POST', credentials: 'same-origin',\n    headers: {'Content-Type': 'application\/json', 'X-WP-Nonce': window.rfManEdit.nonce},\n    body: JSON.stringify({leaf: leaf, blocks: blocks})})\n   .then(function(r){ if (!r.ok) throw r.status; return r.json(); })\n   .then(ok)\n   .catch(function(e){ if (msg) { msg.className = 'msg err'; msg.textContent = tr('saveErr', {e: e}); } });\n}\nfunction exportFixes(){\n  var a = document.createElement('a');\n  a.href = URL.createObjectURL(new Blob([JSON.stringify(fixes, null, 1)], {type: 'application\/json'}));\n  a.download = 'correzioni.json'; a.click();\n  setTimeout(function(){ URL.revokeObjectURL(a.href); }, 1000);\n}\n\n\/* ---------- ricerca ---------- *\/\nfunction search(q){\n  query = q;\n  terms = parseQuery(q);\n  $('rfmX').hidden = !q;\n  if (!terms.length) { fromResults = false; $('rfmReader').classList.remove('rm'); $('rfmRes').hidden = true; $('rfmPage').hidden = false; $('rfmBack').hidden = true; if (cur < 0) show(defaultLeaf()); else show(cur); return; }\n  var hits = [], groups = parseGroups(q);\n  pages.forEach(function(p, i){\n    var s = fold[i], score = 0, cnt = 0, ok = true;\n    groups.forEach(function(g){\n      var n = 0, head = false;\n      g.forEach(function(t, k){\n        var c = 0, j = 0;\n        while ((j = s.indexOf(t, j)) !== -1) { c++; j += t.length; }\n        n += c; score += Math.min(c, 8) * (k ? 0.6 : 1);\n        if (c && p.hf.indexOf(t) !== -1) head = true;\n      });\n      if (!n) ok = false;\n      cnt += n; if (head) score += 6;\n    });\n    if (ok && ((i >= 4 && i <= 6) || (i >= 176 && i <= 178))) score -= 6;  \/\/ sommario e indice alfabetico vanno in fondo\n    if (ok) hits.push({i: i, score: score, cnt: cnt});\n  });\n  hits.sort(function(a, b){ return b.score - a.score || a.i - b.i; });\n\n  var out = '';\n  \/\/ scorciatoie: parole chiave BASIC, voci dell'indice, capitoli\n  var quick = [], fq = f(q.trim()), seen = {};\n  D.kw.forEach(function(k){\n    var names = k[0].split(\/\\s*\\\/\\s*|\\.\\.\\.\/).map(f);\n    if (names.indexOf(fq) !== -1 || f(k[0]) === fq) quick.push([tr('kwHit'), k[0] + ' \u00b7 ' + tr('page', {n: k[1]}), leafOf(k[1])]);\n  });\n  if (fq.length >= 3) {\n    chapters.forEach(function(c){\n      [c].concat(c.secs).forEach(function(s){ if (f(s.t).indexOf(fq) !== -1) quick.push([tr('secHit'), s.t + ' \u00b7 ' + tr('page', {n: s.p}), s.leaf]); });\n    });\n    D.idx.forEach(function(e){\n      if (f(e[0]).indexOf(fq) !== -1) quick.push([tr('idxHit'), e[0] + ' \u00b7 ' + e[1], leafOf(e[1].split(',')[0].split('-')[0])]);\n    });\n  }\n  quick = quick.filter(function(x){ var k = x[1]; if (seen[k] || x[2] < 0) return false; seen[k] = 1; return true; }).slice(0, 8);\n  if (quick.length) out += '<div class=\"quick\">' + quick.map(function(x){\n    return '<button data-l=\"' + x[2] + '\" data-k=\"1\"><small>' + esc(x[0]) + '<\/small>' + hl(x[1], terms) + '<\/button>';\n  }).join('') + '<\/div>';\n\n  if (!hits.length) out += '<p class=\"none\">' + tr('none', {q: esc(q)}) + '<\/p>';\n  else out += '<p class=\"rhead\">' + (hits.length === 1 ? tr('res1', {q: '<b>' + esc(q) + '<\/b>'}) : tr('res', {n: hits.length, q: '<b>' + esc(q) + '<\/b>'})) + '<\/p>';\n  out += hits.map(function(h){\n    var p = pages[h.i], ch = chapterOf(h.i), sec = sectionOf(h.i);\n    return '<button class=\"hit\" data-l=\"' + h.i + '\"><div class=\"top\"><span class=\"pn\">' + esc(\/^\\d+$\/.test(p.n) ? 'p. ' + p.n : p.n) + '<\/span>' +\n      '<span class=\"ct\">' + (ch ? esc(ch.t) : '') + (sec ? ' <i>\u00b7 ' + esc(sec.t) + '<\/i>' : '') + '<\/span>' +\n      '<span class=\"cnt\">' + tr('occ', {n: h.cnt}) + '<\/span><\/div><div class=\"sn\">' + snippet(h.i) + '<\/div><\/button>';\n  }).join('');\n  $('rfmRes').innerHTML = out;\n  $('rfmRes').hidden = false; $('rfmPage').hidden = true; $('rfmBack').hidden = true; $('rfmReader').classList.add('rm');\n  fromResults = false;\n  setHash();\n}\nfunction snippet(i){\n  var p = pages[i];\n  for (var b = 0; b < p.b.length; b++) {\n    var s = p.b[b][1].replace(\/\\s+\/g, ' '), fs = f(s), best = -1;\n    terms.forEach(function(t){ var j = fs.indexOf(t); if (j !== -1 && (best < 0 || j < best)) best = j; });\n    if (best >= 0) {\n      var a = Math.max(0, best - 70), z = Math.min(s.length, best + 150);\n      if (a > 0) { var sp = s.indexOf(' ', a); if (sp > 0 && sp < best) a = sp + 1; }\n      return (a > 0 ? '\u2026 ' : '') + hl(s, terms, a, z) + (z < s.length ? ' \u2026' : '');\n    }\n  }\n  return '';\n}\n\n\/* ---------- url ---------- *\/\nfunction setHash(){\n  var h = !$('rfmRes').hidden && query ? '#q=' + encodeURIComponent(query) : (cur >= 0 ? '#p=' + encodeURIComponent(pages[cur].n) + (terms.length ? '&q=' + encodeURIComponent(query) : '') : '');\n  if (h !== location.hash) history.replaceState(null, '', h || location.pathname + location.search);\n}\nfunction readHash(){\n  var h = location.hash.slice(1), o = {};\n  h.split('&').forEach(function(kv){ var i = kv.indexOf('='); if (i > 0) o[kv.slice(0, i)] = decodeURIComponent(kv.slice(i + 1)); });\n  return o;\n}\nfunction defaultLeaf(){ return leafOf('1'); }\n\n\/* ---------- eventi ---------- *\/\nfunction setView(v){\n  view = v;\n  $('rfmPage').dataset.v = v;\n  $('rfmView').querySelectorAll('button').forEach(function(b){ b.setAttribute('aria-pressed', b.dataset.v === v ? 'true' : 'false'); });\n  try { localStorage.setItem('rfmView', v); } catch (e) {}\n}\nfunction wire(){\n  var tq;\n  $('rfmQ').addEventListener('input', function(){ clearTimeout(tq); var v = this.value; tq = setTimeout(function(){ search(v); }, 180); });\n  $('rfmQ').addEventListener('keydown', function(e){\n    if (e.key === 'Enter') { clearTimeout(tq); search(this.value); var first = $('rfmRes').querySelector('.hit'); if (first && $('rfmRes').querySelectorAll('.hit').length === 1) first.click(); }\n    if (e.key === 'Escape') { this.value = ''; search(''); }\n  });\n  $('rfmX').onclick = function(){ $('rfmQ').value = ''; search(''); $('rfmQ').focus(); };\n  $('rfmChips').innerHTML = '<span>' + tr('try') + '<\/span>' + CHIPS.map(function(c){ return '<button class=\"chip\" type=\"button\">' + esc(c) + '<\/button>'; }).join('');\n  $('rfmChips').addEventListener('click', function(e){\n    var b = e.target.closest('.chip'); if (!b) return;\n    $('rfmQ').value = b.textContent; search(b.textContent);\n  });\n  root.addEventListener('click', function(e){\n    var b = e.target.closest('[data-l]');\n    if (!b || !root.contains(b) || b.closest('.tabs')) return;\n    var l = +b.dataset.l; if (l < 0 || isNaN(l)) return;\n    var inRes = !!b.closest('#rfmRes');\n    fromResults = inRes && !!query;\n    if (b.dataset.q) { terms = parseQuery(b.dataset.q); show(l, true); }\n    else show(l, inRes);\n    if (b.closest('#rfmSide') && innerWidth <= 900) toggleSide(false);\n    if (b.closest('#rfmSide') || inRes) $('rfmReader').scrollIntoView({block: 'start', behavior: 'smooth'});\n  });\n  $('rfmBack').onclick = function(){ search(query); $('rfmReader').scrollIntoView({block: 'start'}); };\n  $('rfmPrev').onclick = function(){ show(cur - 1, true); };\n  $('rfmNext').onclick = function(){ show(cur + 1, true); };\n  $('rfmPg').addEventListener('change', function(){ var l = leafOf(this.value); if (l >= 0) show(l, true); else this.value = pages[cur].n; });\n  $('rfmPg').addEventListener('focus', function(){ this.select(); });\n  $('rfmView').addEventListener('click', function(e){ var b = e.target.closest('button'); if (b) setView(b.dataset.v); });\n  root.querySelector('.tabs').addEventListener('click', function(e){\n    var b = e.target.closest('button'); if (!b) return;\n    root.querySelectorAll('.tabs button').forEach(function(x){ x.setAttribute('aria-selected', x === b ? 'true' : 'false'); });\n    $('rfmToc').hidden = b.dataset.tab !== 'toc'; $('rfmIdxP').hidden = b.dataset.tab !== 'idx'; $('rfmKwP').hidden = b.dataset.tab !== 'kw';\n  });\n  $('rfmIdxF').addEventListener('input', function(){ renderIdx(this.value); });\n  $('rfmSideT').onclick = function(){ toggleSide(!$('rfmSide').classList.contains('open')); };\n  document.addEventListener('keydown', function(e){\n    var tag = (e.target.tagName || '').toLowerCase();\n    if (tag === 'input' || tag === 'textarea' || e.target.isContentEditable || e.ctrlKey || e.metaKey || e.altKey) return;\n    if (e.key === '\/') { e.preventDefault(); $('rfmQ').focus(); $('rfmQ').select(); }\n    else if (!$('rfmPage').hidden && e.key === 'ArrowLeft' && cur > 0) show(cur - 1, true);\n    else if (!$('rfmPage').hidden && e.key === 'ArrowRight' && cur < pages.length - 1) show(cur + 1, true);\n    else if (e.key === 'Escape' && query) { $('rfmQ').value = ''; search(''); }\n  });\n}\nfunction toggleSide(open){\n  $('rfmSide').classList.toggle('open', open);\n  $('rfmSideT').setAttribute('aria-expanded', open ? 'true' : 'false');\n}\n\n\/* ---------- avvio ---------- *\/\nfunction indexPage(p, i){\n  p.b.forEach(function(b){ b[1] = b[1].normalize('NFC'); });\n  fold[i] = f(p.b.map(function(b){ return b[1]; }).join('\\n'));\n  p.hf = f(p.b.filter(function(b){ return b[0] === 'h'; }).map(function(b){ return b[1]; }).join('\\n'));\n}\nfunction init(d, fx){\n  D = d; pages = d.pages;\n  fixes = fx && typeof fx === 'object' && !Array.isArray(fx) ? fx : {};\n  pages.forEach(function(p, i){\n    var b = fixes[i];\n    if (Array.isArray(b) && b.length) { p.orig = p.b; p.b = b; }\n    indexPage(p, i);\n    leafByLabel[p.n.toLowerCase()] = leafByLabel[p.n.toLowerCase()] === undefined ? i : leafByLabel[p.n.toLowerCase()];\n  });\n  \/\/ la chiave rfManEdit arriva dallo snippet nel footer: se non c'\u00e8 ancora, si riprova a pagina caricata\n  if (!enableEdit()) window.addEventListener('load', enableEdit);\n  d.toc.forEach(function(c){\n    chapters.push({t: c[0], p: c[1], leaf: leafOf(c[1]), secs: c[2].map(function(s){ return {t: s[0], p: s[1], leaf: leafOf(s[1])}; })});\n  });\n  $('rfmStats').textContent = tr('stats', {p: pages.length, c: chapters.length, k: d.kw.length});\n  buildSide();\n  wire();\n  var v = 'both';\n  try { v = localStorage.getItem('rfmView') || (innerWidth <= 700 ? 'text' : 'both'); } catch (e) {}\n  setView(v);\n  var h = readHash();\n  if (h.p) { var l = leafOf(h.p); if (h.q) { query = h.q; $('rfmQ').value = h.q; $('rfmX').hidden = false; terms = parseQuery(h.q); fromResults = true; } show(l >= 0 ? l : defaultLeaf(), !!h.q); }\n  else if (h.q) { $('rfmQ').value = h.q; cur = defaultLeaf(); search(h.q); }\n  else show(defaultLeaf());\n}\n\nPromise.all([\n fetch(DATA).then(function(r){ if (!r.ok) throw r.status; return r.text(); }),\n fetch(FIX, {cache: 'no-store'}).then(function(r){ return r.ok ? r.json() : {}; }).catch(function(){ return {}; })\n]).then(function(a){ init(JSON.parse(a[0].slice(a[0].indexOf('{'))), a[1]); })\n .catch(function(err){ console.error(err); $('rfmTxt').innerHTML = '<p class=\"empty\">' + tr('loadErr') + '<\/p>'; });\n})();\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Il manuale d&#8217;uso originale del Commodore 64 (1982) in italiano: cerca comandi BASIC, POKE, sprite e suono e vai subito alla pagina, con la scansione originale.<\/p>","protected":false},"author":1,"featured_media":11463,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"categories":[],"tags":[595,6,172,594],"class_list":["post-11455","page","type-page","status-publish","has-post-thumbnail","hentry","tag-basic-c64","tag-c64","tag-manuale","tag-manuale-commodore-64"],"_links":{"self":[{"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/pages\/11455","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/comments?post=11455"}],"version-history":[{"count":10,"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/pages\/11455\/revisions"}],"predecessor-version":[{"id":11470,"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/pages\/11455\/revisions\/11470"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/media\/11463"}],"wp:attachment":[{"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/media?parent=11455"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/categories?post=11455"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/tags?post=11455"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}