{"id":11893,"date":"2026-11-12T13:46:47","date_gmt":"2026-11-12T12:46:47","guid":{"rendered":"https:\/\/retrofixer.it\/oscilloscopio\/"},"modified":"2026-11-12T13:50:21","modified_gmt":"2026-11-12T12:50:21","slug":"oscilloscopio","status":"publish","type":"page","link":"https:\/\/retrofixer.it\/en\/oscilloscopio\/","title":{"rendered":"The oscilloscope for retro repairs: guide and simulator"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"11893\" class=\"elementor elementor-11893\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c3a8e51 e-con-full e-flex e-con e-parent\" data-id=\"c3a8e51\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d4f9b02 elementor-widget elementor-widget-html\" data-id=\"d4f9b02\" 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;500;600;700;800&family=Press+Start+2P&family=VT323&display=swap\" rel=\"stylesheet\">\n\n<style>\n.rfos{\n  --bg:#0f0c24;--bg2:#171338;--panel:#1d1846;--line:#342c74;--text:#eceaff;--muted:#aaa5d8;\n  --c64:#3e31a2;--c64l:#7c70da;--ink:#b3abff;--yel:#ffd23f;--grn:#5ad15f;--cya:#3fd8ff;--ora:#f8961e;--red:#f94144;--mag:#e0398a;\n  font-family:Inter,system-ui,-apple-system,\"Segoe UI\",Roboto,sans-serif;color:var(--text);background:var(--bg);\n  line-height:1.6;position:relative;padding:44px 0 70px;overflow:clip;font-size:15.5px\n}\n.rfos *,.rfos ::before,.rfos ::after{box-sizing:border-box}\n.rfos h2,.rfos h3,.rfos h4,.rfos p,.rfos ul,.rfos ol,.rfos figure{margin:0;padding:0}\n.rfos h2,.rfos h3,.rfos h4{letter-spacing:0;text-transform:none;font-weight:700;font-family:Inter,system-ui,sans-serif!important}\n.rfos:not(.en) [data-l=\"en\"],.rfos.en [data-l=\"it\"]{display:none!important}\n.rfos a{color:var(--cya);text-decoration:underline;text-underline-offset:2px}\n.rfos a:hover{color:#fff}\n.rfos b,.rfos strong{color:#fff}\n.rfos code{font-family:VT323,monospace;font-size:1.2em;color:var(--grn);background:none;padding:0}\n.rfos button{font:inherit;color:inherit;cursor:pointer;box-shadow:none;margin:0!important;height:auto!important;min-height:0!important;text-transform:none!important;letter-spacing:0!important}\n.rfos [hidden]{display:none!important}\n.rfos .wrap{max-width:1180px;margin:0 auto;padding:0 20px}\n.rfos .stripe{height:6px;background:linear-gradient(90deg,var(--red) 0 16.6%,var(--ora) 0 33.3%,var(--yel) 0 50%,var(--grn) 0 66.6%,var(--cya) 0 83.3%,var(--c64l) 0);position:absolute;left:0;right:0;top:0}\n.rfos .kicker{display:inline-block;font-family:\"Press Start 2P\",monospace;font-size:10px;color:var(--yel);letter-spacing:.06em;margin-bottom:12px;line-height:1.7}\n.rfos .h2{font-size:clamp(17px,2.4vw,26px);line-height:1.45;color:#fff;text-shadow:3px 3px 0 #000;margin-bottom:12px;font-weight:400;font-family:\"Press Start 2P\",monospace!important}\n.rfos .h3{font-size:clamp(13px,1.6vw,17px);line-height:1.55;color:#fff;margin-bottom:14px;font-weight:400;font-family:\"Press Start 2P\",monospace!important;scroll-margin-top:90px}\n.rfos .h4{font-size:17px;color:#fff;margin:22px 0 8px;line-height:1.35}\n.rfos .sub{color:var(--muted);font-size:16px;max-width:900px}\n.rfos section{margin-top:56px}\n.rfos .txt{max-width:900px}\n.rfos .txt p,.rfos .txt ul,.rfos .txt ol{margin-top:10px;color:#dcd8f6}\n.rfos .txt ul,.rfos .txt ol{padding-left:22px}\n.rfos .txt li{margin-top:5px}\n.rfos .toc{display:flex;flex-wrap:wrap;gap:8px;margin-top:22px}\n.rfos .toc a{display:inline-flex;align-items:center;gap:8px;text-decoration:none;background:var(--panel);border:2px solid var(--line);border-radius:10px;padding:7px 12px;color:#dcd8f6;font-size:13.5px;font-weight:600}\n.rfos .toc a:hover{border-color:var(--yel);color:#fff}\n.rfos .toc a i{font-style:normal;font-family:\"Press Start 2P\",monospace;font-size:9px;color:var(--yel)}\n.rfos .alert{display:flex;gap:12px;align-items:flex-start;border-radius:12px;padding:12px 16px;margin-top:16px;font-size:14.5px;max-width:900px}\n.rfos .alert .ico{font-size:22px;line-height:1.1}\n.rfos .alert.red{background:#3a0d1a;border:2px solid var(--red);color:#ffd9de}\n.rfos .alert.yel{background:#2e2608;border:2px solid var(--yel);color:#fff1c2}\n.rfos .alert.cya{background:#08283a;border:2px solid var(--cya);color:#d4f4ff}\n.rfos .alert p+p{margin-top:6px}\n\/* schemi *\/\n.rfos .fig{background:var(--bg2);border:2px solid var(--line);border-radius:14px;padding:10px;margin-top:16px}\n.rfos .fig figcaption{font-size:13px;color:var(--muted);margin-top:6px;padding:0 6px 4px}\n.rfos .fig figcaption b{color:var(--yel)}\n.rfos .scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}\n.rfos .figs2{display:grid;grid-template-columns:1fr 1fr;gap:16px}\n.rfos .figs2 .fig{margin-top:16px}\n\/* calcolatori *\/\n.rfos .calc{background:linear-gradient(180deg,#1b1650,#151138);border:2px solid var(--c64l);border-radius:16px;padding:16px;margin-top:20px;box-shadow:0 0 0 3px #000,6px 6px 0 #000}\n.rfos .ctitle{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-family:\"Press Start 2P\",monospace;font-size:10px;color:var(--yel);letter-spacing:.04em;margin-bottom:14px;line-height:1.6}\n.rfos .ctitle .tag{font-family:Inter,sans-serif;font-size:11px;font-weight:700;color:#0f0c24;background:var(--grn);border-radius:6px;padding:2px 7px;letter-spacing:0}\n.rfos .cgrid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);gap:16px;align-items:start}\n.rfos .fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px}\n.rfos .fld{display:flex;flex-direction:column;gap:4px;margin:0;min-width:0}\n.rfos .fld.w2{grid-column:1\/-1}\n.rfos .fld>span{font-size:12.5px;font-weight:600;color:#dcd8f6;line-height:1.3}\n.rfos .fld small{font-size:11.5px;color:var(--muted);line-height:1.35}\n.rfos .inp{display:flex;align-items:stretch;min-width:0}\n.rfos .inp input,.rfos .inp select,.rfos .fld select{width:100%!important;min-width:0;background:#000!important;border:2px solid #3a3a5a!important;border-radius:8px!important;padding:5px 9px!important;font-family:VT323,monospace!important;font-size:21px!important;color:#fff!important;height:auto!important;margin:0!important;box-shadow:none!important;line-height:1.2!important;outline:0}\n.rfos .fld select{font-family:Inter,system-ui,sans-serif!important;font-size:14px!important;padding:7px 9px!important;-webkit-appearance:auto;appearance:auto}\n.rfos .inp input:focus,.rfos .fld select:focus{border-color:var(--grn)!important}\n.rfos .inp input.bad{border-color:var(--red)!important}\n.rfos .inp .u{display:flex;align-items:center;padding:0 0 0 7px;font-family:VT323,monospace;font-size:19px;color:var(--muted);white-space:nowrap}\n.rfos .chk{display:flex;align-items:center;gap:8px;font-size:13px;color:#dcd8f6;cursor:pointer;user-select:none;margin:2px 0 0;font-weight:600}\n.rfos .chk input{appearance:none;-webkit-appearance:none;flex:0 0 auto;position:relative;cursor:pointer;width:18px!important;height:18px!important;margin:0!important;border:2px solid var(--ink)!important;border-radius:4px!important;background:#000!important;padding:0!important}\n.rfos .chk input:checked{background:var(--grn)!important;border-color:var(--grn)!important}\n.rfos .chk input:checked::after{content:\"\\2713\";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#063b0b;font:700 12px\/1 Inter,sans-serif}\n.rfos .res{background:#000;border:2px solid #2a2a48;border-radius:12px;padding:12px 14px}\n.rfos .rrow{display:flex;justify-content:space-between;gap:12px;align-items:baseline;padding:4px 0;border-bottom:1px dashed #262444;font-size:13.5px;color:#cfcaff}\n.rfos .rrow:last-child{border-bottom:0}\n.rfos .rrow b{font-family:VT323,monospace;font-size:22px;font-weight:400;color:var(--grn);white-space:nowrap;text-align:right}\n.rfos .rrow b.y{color:var(--yel)}\n.rfos .rrow b.c{color:var(--cya)}\n.rfos .rrow b.r{color:var(--red)}\n.rfos .rrow.big b{font-size:28px}\n.rfos .rhead{font-family:\"Press Start 2P\",monospace;font-size:8.5px;color:var(--yel);margin:12px 0 4px;letter-spacing:.04em}\n.rfos .rhead:first-child{margin-top:0}\n.rfos .verdict{border-radius:10px;padding:9px 12px;margin-top:10px;font-size:13.5px;line-height:1.45}\n.rfos .verdict.ok{background:#0d2e14;border:2px solid var(--grn);color:#d8ffd9}\n.rfos .verdict.warn{background:#2e2608;border:2px solid var(--yel);color:#fff1c2}\n.rfos .verdict.bad{background:#3a0d1a;border:2px solid var(--red);color:#ffd9de}\n.rfos .verdict+.verdict{margin-top:6px}\n.rfos .b{align-items:center;gap:6px;white-space:nowrap;display:inline-flex!important;padding:7px 11px!important;border-radius:9px!important;border:2px solid var(--line)!important;background:var(--panel)!important;color:#dcd8f6!important;font-size:12.5px!important;font-weight:600!important;line-height:1.2!important}\n.rfos .b:hover{color:#fff!important;border-color:var(--c64l)!important}\n.rfos .b.y{background:var(--yel)!important;border-color:var(--yel)!important;color:#231a00!important}\n.rfos .btns{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}\n.rfos .seg{display:inline-flex;flex-wrap:wrap;border:2px solid var(--line);border-radius:10px;overflow:hidden}\n.rfos .seg button{padding:6px 11px!important;font-size:12.5px!important;font-weight:700!important;background:var(--panel)!important;color:var(--muted)!important;border:0!important;border-radius:0!important;line-height:1.2!important}\n.rfos .seg button.on{background:var(--yel)!important;color:#231a00!important}\n.rfos .sub2{background:#120f30;border:2px dashed var(--line);border-radius:12px;padding:12px;margin-top:14px}\n.rfos .sub2 .ctitle{margin-bottom:10px}\n\/* catena termica *\/\n\/* tabelle *\/\n.rfos .tblw{overflow-x:auto;margin-top:14px;border-radius:12px;border:2px solid var(--line)}\n.rfos table.tbl{width:100%!important;border-collapse:collapse!important;margin:0!important;font-size:14px;background:var(--bg2)!important;border:0!important}\n.rfos table.tbl th,.rfos table.tbl td{padding:8px 10px!important;border:0!important;border-bottom:1px solid var(--line)!important;text-align:left!important;vertical-align:top;color:#dcd8f6!important;background:none!important}\n.rfos table.tbl th{background:#231d55!important;color:var(--yel)!important;font-weight:700!important;font-size:12.5px;white-space:nowrap}\n.rfos table.tbl tr:last-child td{border-bottom:0!important}\n.rfos table.tbl td b{color:#fff}\n\/* schede *\/\n.rfos .cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-top:16px}\n.rfos .cards.c2{grid-template-columns:repeat(2,minmax(0,1fr))}\n.rfos .gcard{display:flex;flex-direction:column;gap:8px;background:var(--panel);border:2px solid var(--line);border-radius:12px;padding:16px}\n.rfos .gcard h4{font-size:15.5px;color:#fff;line-height:1.3}\n.rfos .gcard p,.rfos .gcard li{font-size:14px;color:#cfcaff}\n.rfos .gcard ul{padding-left:18px}\n.rfos .gcard .pro{color:var(--grn);font-weight:700}\n.rfos .gcard .con{color:var(--ora);font-weight:700}\n.rfos .foot{margin-top:56px;padding-top:20px;border-top:2px solid var(--line);font-size:13.5px;color:var(--muted)}\n@media (max-width:980px){\n  .rfos .cgrid{grid-template-columns:minmax(0,1fr)}\n  .rfos .cards{grid-template-columns:repeat(2,minmax(0,1fr))}\n  .rfos .figs2{grid-template-columns:minmax(0,1fr)}\n}\n@media (max-width:620px){\n  .rfos{font-size:15px;padding:30px 0 50px}\n  .rfos .wrap{padding:0 12px}\n  .rfos .cards,.rfos .cards.c2{grid-template-columns:minmax(0,1fr)}\n  .rfos .fields{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px}\n  .rfos .calc{padding:12px;box-shadow:0 0 0 3px #000}\n  .rfos .fig{padding:6px}\n  .rfos .rrow{font-size:13px;flex-wrap:wrap;gap:2px 10px}\n  .rfos .rrow b{white-space:normal;margin-left:auto;font-size:20px}\n  .rfos .rrow.big b{font-size:24px}\n}\n@media (max-width:400px){\n  .rfos .fields{grid-template-columns:minmax(0,1fr)}\n}\nbody:has(.rfos) .post-views.entry-meta{display:block;margin:0;padding:7px 16px;text-align:center;font:12px\/1.4 Inter,system-ui,sans-serif;color:#aaa5d8;background:#0f0c24;border-top:2px solid #342c74;border-bottom:2px solid #5ad15f}\n\/* ---------- oscilloscopio ---------- *\/\n.rfos .scope{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:16px;margin-top:18px;align-items:start}\n.rfos .scrcol{position:sticky;top:74px;z-index:3}\nbody.admin-bar .rfos .scrcol{top:106px}\n.rfos .scr{position:relative;width:100%;aspect-ratio:10\/8;background:#05070f;border:3px solid #2b2f4a;border-radius:12px;overflow:hidden;box-shadow:0 0 0 3px #000,6px 6px 0 #000}\n.rfos .scr canvas{position:absolute;inset:0;width:100%!important;height:100%!important;display:block}\n.rfos .rd{display:flex;flex-wrap:wrap;gap:4px 12px;align-items:center;background:#000;border:2px solid #2a2a48;border-radius:10px;padding:6px 10px;margin-top:8px;font-family:VT323,monospace;font-size:19px;line-height:1.15;color:#dcd8f6}\n.rfos .rd b{font-family:Inter,sans-serif;font-size:11px;font-weight:700;color:#000;background:#aaa5d8;border-radius:4px;padding:0 4px;margin-right:2px;vertical-align:2px}\n.rfos .rd .c1 b{background:#ffd23f}.rfos .rd .c2 b{background:#3fd8ff}.rfos .rd .tg b{background:#ff8c3f}\n.rfos .c1{color:#ffd23f}.rfos .c2{color:#3fd8ff}\n.rfos .pill{font-family:Inter,sans-serif;font-size:11px;font-weight:800;border-radius:6px;padding:2px 7px;color:#000;letter-spacing:.03em}\n.rfos .pill.ok{background:var(--grn)}.rfos .pill.au{background:var(--yel)}.rfos .pill.wt{background:var(--ora)}.rfos .pill.st{background:var(--red);color:#fff}\n.rfos .ms{display:grid;gap:2px;margin-top:6px;font-family:VT323,monospace;font-size:18px;line-height:1.2}\n.rfos .ms>div{display:flex;flex-wrap:wrap;gap:0 14px}\n.rfos .ms b{font-family:Inter,sans-serif;font-size:11px;font-weight:800;align-self:center}\n.rfos .ms i{font-style:normal;color:#fff}\n.rfos .quick{margin-top:10px;align-items:center}\n.rfos .quick .ql{font-size:12.5px;color:var(--muted);font-weight:600}\n.rfos .ctl{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px}\n.rfos .grp{background:linear-gradient(180deg,#1b1650,#151138);border:2px solid var(--line);border-radius:12px;padding:10px;display:flex;flex-direction:column;gap:8px;min-width:0}\n.rfos .grp.c1{border-color:#8a7420;color:inherit}.rfos .grp.c2{border-color:#1f6f86;color:inherit}\n.rfos .grp.off>*:not(.gh){opacity:.4}\n.rfos .gh{display:flex;align-items:center;gap:8px;justify-content:space-between}\n.rfos .gh>span{font-size:12px;color:var(--muted);font-weight:600}\n.rfos .gh .gt{font-family:\"Press Start 2P\",monospace;font-size:9px;color:var(--yel);letter-spacing:.04em}\n.rfos .chb{font-family:\"Press Start 2P\",monospace!important;font-size:9px!important;padding:6px 8px!important;border-radius:7px!important;border:2px solid var(--line)!important;background:#000!important;color:var(--muted)!important;line-height:1.2!important}\n.rfos .c1 .chb.on{background:#ffd23f!important;color:#231a00!important;border-color:#ffd23f!important}\n.rfos .c2 .chb.on{background:#3fd8ff!important;color:#00222b!important;border-color:#3fd8ff!important}\n.rfos .grp .fld>span,.rfos .kn>span,.rfos .row>span{font-size:11.5px;font-weight:600;color:#cfcaff;line-height:1.25}\n.rfos .grp .fld select{font-size:13px!important;padding:5px 6px!important}\n.rfos .kn{display:flex;align-items:center;gap:6px;flex-wrap:wrap}\n.rfos .kn>span{flex:1 0 100%}\n.rfos .kn>b{font-family:VT323,monospace;font-size:20px;font-weight:400;color:#fff;background:#000;border:2px solid #2a2a48;border-radius:7px;padding:0 6px;min-width:76px;text-align:center;line-height:1.3}\n.rfos .kn>b.okc{color:var(--grn)}.rfos .kn>b.bad{color:var(--ora)}.rfos .kn>b.mt{color:var(--muted);font-size:16px}\n.rfos .kn .b{padding:4px 11px!important;font-size:16px!important}\n.rfos .kn .b.sm{padding:4px 7px!important;font-size:11.5px!important}\n.rfos .kn input[type=range]{flex:1 1 90px;min-width:70px;width:auto!important;margin:0!important;padding:0!important;height:22px!important;background:none!important;border:0!important;box-shadow:none!important;accent-color:#ffd23f;cursor:pointer}\n.rfos .grp.c2 input[type=range]{accent-color:#3fd8ff}\n.rfos .kn input[type=range]:disabled{opacity:.35;cursor:default}\n.rfos .row{display:flex;flex-direction:column;gap:3px}\n.rfos .grp .seg{display:flex;flex-wrap:nowrap;width:100%}\n.rfos .grp .seg button{flex:1 1 0;padding:5px 4px!important;font-size:11.5px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.rfos .pw{font-size:11.5px;color:#ffd9de;background:#3a0d1a;border:1px solid var(--red);border-radius:7px;padding:4px 7px;line-height:1.3}\n.rfos .run{padding:4px 10px!important;font-family:\"Press Start 2P\",monospace!important;font-size:8.5px!important;background:#3a0d1a!important;border-color:var(--red)!important;color:#ffd9de!important}\n.rfos .run.y{background:var(--grn)!important;border-color:var(--grn)!important;color:#063b0b!important}\n.rfos .pwr{justify-content:center;background:#3a2a08!important;border-color:var(--ora)!important;color:#ffe3c2!important}\n.rfos .b i{font-style:normal;font-family:\"Press Start 2P\",monospace;font-size:8.5px;color:var(--yel)}\n.rfos .b.y i{color:#231a00}\n.rfos .b.good{background:var(--grn)!important;border-color:var(--grn)!important;color:#063b0b!important}\n.rfos .b.wrong{background:#3a0d1a!important;border-color:var(--red)!important;color:#ffd9de!important}\n.rfos .b:disabled{cursor:default}\n.rfos .ex{margin-top:18px;margin-bottom:4px}\n.rfos .exp{scroll-margin-top:90px}\n.rfos .exi{font-size:14px;color:#cfcaff}\n.rfos .exp{margin-top:12px;background:#000;border:2px solid #2a2a48;border-radius:12px;padding:12px 14px}\n.rfos .exp .btns .b{white-space:normal!important;text-align:left;line-height:1.35!important}\n.rfos .exq{font-size:14.5px;color:#eceaff}\n.rfos .verdict{font-size:14px;line-height:1.5}\n\/* anteprime *\/\n.rfos .minis{display:grid;gap:14px;margin-top:16px}\n.rfos .minis.m2{grid-template-columns:repeat(2,minmax(0,1fr))}\n.rfos .minis.m3{grid-template-columns:repeat(3,minmax(0,1fr))}\n.rfos .minis.m4{grid-template-columns:repeat(4,minmax(0,1fr))}\n.rfos .mini{display:flex;flex-direction:column;gap:6px;background:var(--bg2);border:2px solid var(--line);border-radius:12px;padding:8px;margin:0}\n.rfos .mini canvas{display:block;width:100%!important;aspect-ratio:10\/8;height:auto!important;border-radius:7px;background:#05070f}\n.rfos .mini .sc{font-family:VT323,monospace;font-size:16px;line-height:1.1;color:var(--muted)}\n.rfos .mini figcaption{font-size:13px;color:#cfcaff;line-height:1.4;flex:1}\n.rfos .mini .try{align-self:flex-start;padding:4px 9px!important;font-size:12px!important}\n.rfos .txt a[data-pre]{white-space:nowrap}\n@media (max-width:1100px){\n  .rfos .minis.m4{grid-template-columns:repeat(2,minmax(0,1fr))}\n}\n@media (max-width:980px){\n  .rfos .scope{grid-template-columns:minmax(0,1fr)}\n  .rfos .scrcol,body.admin-bar .rfos .scrcol{top:0;background:var(--bg);padding:6px 4px 4px;margin:0 -4px}\n  .rfos .scrcol .quick{display:none}\n  .rfos .scr{max-width:520px;margin:0 auto;box-shadow:0 0 0 2px #000}\n  .rfos .rd,.rfos .ms{max-width:520px;margin-left:auto;margin-right:auto}\n}\n@media (max-width:620px){\n  .rfos .ctl{gap:8px}\n  .rfos .grp{padding:8px}\n  .rfos .minis.m3{grid-template-columns:repeat(2,minmax(0,1fr))}\n  .rfos .minis{gap:10px}\n  .rfos .mini figcaption{font-size:12.5px}\n  .rfos .rd{font-size:16px;padding:4px 8px;gap:2px 8px}\n  .rfos .ms{font-size:15px}\n  .rfos .scr{max-width:330px}\n}\n@media (max-width:440px){\n  .rfos .ctl{grid-template-columns:minmax(0,1fr)}\n  .rfos .minis.m2,.rfos .minis.m3,.rfos .minis.m4{grid-template-columns:minmax(0,1fr)}\n}\n<\/style>\n\n<div class=\"rfos\" id=\"rfos\" data-no-translation>\n  <div class=\"stripe\"><\/div>\n  <div class=\"wrap\">\n    <span class=\"kicker\"><span data-l=\"it\">OSCILLOSCOPIO \u00b7 TRIGGER \u00b7 CLOCK \u00b7 BUS \u00b7 DRAM \u00b7 VIDEO<\/span><span data-l=\"en\">OSCILLOSCOPE \u00b7 TRIGGER \u00b7 CLOCK \u00b7 BUS \u00b7 DRAM \u00b7 VIDEO<\/span><\/span>\n    <h2 class=\"h2\"><span data-l=\"it\">L'oscilloscopio nelle riparazioni retro: guida e simulatore<\/span><span data-l=\"en\">The oscilloscope for retro repairs: guide and simulator<\/span><\/h2>\n    <div data-l=\"it\">\n      <p class=\"sub\">Il tester ti dice <b>quanta<\/b> tensione c'\u00e8, l'oscilloscopio ti fa vedere <b>come cambia nel tempo<\/b>. \u00c8 lo strumento che separa un clock sano da uno che arriva a met\u00e0, una linea dati viva da una che fluttua, una RAM che risponde da una morta. Questa guida parte da zero: sonda, comandi, trigger e poi le forme d'onda giuste e sbagliate di un <b>Commodore 64<\/b> e di un <b>Amiga<\/b>. Il <b>simulatore a due canali<\/b> qui sotto ha i comandi di un oscilloscopio vero: puoi sbagliare quanto vuoi e provare gli esercizi \"trova il guasto\".<\/p>\n    <\/div>\n    <div data-l=\"en\">\n      <p class=\"sub\">A multimeter tells you <b>how much<\/b> voltage there is; an oscilloscope shows you <b>how it changes over time<\/b>. It is the tool that tells a healthy clock from one that only gets halfway, a live data line from a floating one, a working RAM from a dead one. This guide starts from scratch: probe, controls, trigger, then the right and wrong waveforms of a <b>Commodore 64<\/b> and an <b>Amiga<\/b>. The <b>two-channel simulator<\/b> below has the controls of a real scope: make as many mistakes as you like and try the \"find the fault\" exercises.<\/p>\n    <\/div>\n    <nav class=\"toc\">\n      <a href=\"#os-sim\"><i>1<\/i> <span data-l=\"it\">Simulatore<\/span><span data-l=\"en\">Simulator<\/span><\/a>\n      <a href=\"#os-basi\"><i>2<\/i> <span data-l=\"it\">Le basi<\/span><span data-l=\"en\">The basics<\/span><\/a>\n      <a href=\"#os-trig\"><i>3<\/i> Trigger<\/a>\n      <a href=\"#os-forme\"><i>4<\/i> <span data-l=\"it\">Forme d'onda<\/span><span data-l=\"en\">Waveforms<\/span><\/a>\n      <a href=\"#os-nero\"><i>5<\/i> <span data-l=\"it\">C64 a schermo nero<\/span><span data-l=\"en\">C64 black screen<\/span><\/a>\n      <a href=\"#os-sic\"><i>6<\/i> <span data-l=\"it\">Sicurezza<\/span><span data-l=\"en\">Safety<\/span><\/a>\n    <\/nav>\n    <div class=\"alert red\">\n      <span class=\"ico\">&#9889;<\/span>\n      <div data-l=\"it\"><p><b>La massa della sonda \u00e8 collegata alla terra della presa di corrente.<\/b> Mai agganciarla al primario di un alimentatore switching o al telaio di un monitor a tubo senza trasformatore di isolamento: \u00e8 un corto circuito verso terra. Leggi la <a href=\"#os-sic\">sezione sicurezza<\/a> prima di misurare dentro un alimentatore o un monitor.<\/p><\/div>\n      <div data-l=\"en\"><p><b>The probe ground is tied to mains earth.<\/b> Never clip it to the primary side of a switching supply or to the chassis of a CRT monitor without an isolation transformer: that is a short circuit to earth. Read the <a href=\"#os-sic\">safety section<\/a> before measuring inside a power supply or a monitor.<\/p><\/div>\n    <\/div>\n\n    <!-- ===================================================== 1 simulatore -->\n    <section id=\"os-sim\">\n      <span class=\"kicker\">01<\/span>\n      <h3 class=\"h3\"><span data-l=\"it\">Il simulatore a due canali<\/span><span data-l=\"en\">The two-channel simulator<\/span><\/h3>\n      <div class=\"txt\" data-l=\"it\"><p>Canale 1 in <b style=\"color:#ffd23f\">giallo<\/b>, canale 2 in <b style=\"color:#3fd8ff\">azzurro<\/b>. Le frecce a sinistra segnano lo zero di ogni canale, la freccia arancione a destra il livello del trigger e quella in alto il punto del trigger. Si parte dal <b>calibratore<\/b> con una sonda da tarare: prova a girare la compensazione finch\u00e9 l'onda quadra ha gli spigoli dritti.<\/p><\/div>\n      <div class=\"txt\" data-l=\"en\"><p>Channel 1 in <b style=\"color:#ffd23f\">yellow<\/b>, channel 2 in <b style=\"color:#3fd8ff\">cyan<\/b>. The arrows on the left mark each channel's zero, the orange arrow on the right the trigger level and the one at the top the trigger point. You start on the <b>calibrator<\/b> with a probe that needs adjusting: turn the compensation until the square wave has straight corners.<\/p><\/div>\n\n      <div class=\"calc ex\">\n        <div class=\"ctitle\"><span data-l=\"it\">TROVA IL GUASTO<\/span><span data-l=\"en\">FIND THE FAULT<\/span> <span class=\"tag\"><span data-l=\"it\">8 esercizi<\/span><span data-l=\"en\">8 exercises<\/span><\/span><\/div>\n        <div data-l=\"it\"><p class=\"exi\">Ogni esercizio imposta il simulatore su una scheda con un problema e nasconde il nome del segnale. Regola i comandi finch\u00e9 vedi bene, poi scegli la risposta.<\/p><\/div>\n        <div data-l=\"en\"><p class=\"exi\">Each exercise sets the simulator up on a board with a problem and hides the signal name. Adjust the controls until you can see clearly, then pick an answer.<\/p><\/div>\n        <div class=\"btns\" id=\"os-exl\"><\/div>\n        <div class=\"exp\" id=\"os-exp\" hidden><\/div>\n      <\/div>\n\n      <div class=\"scope\">\n        <div class=\"scrcol\">\n          <div class=\"scr\" id=\"os-scr\"><canvas id=\"os-grid\"><\/canvas><canvas id=\"os-tr\"><\/canvas><\/div>\n          <div class=\"rd\" id=\"os-rd\"><\/div>\n          <div class=\"ms\" id=\"os-ms\"><\/div>\n          <div class=\"btns quick\">\n            <span class=\"ql\"><span data-l=\"it\">Prove rapide:<\/span><span data-l=\"en\">Quick setups:<\/span><\/span>\n            <button class=\"b\" data-pre=\"start\"><span data-l=\"it\">Calibratore<\/span><span data-l=\"en\">Calibrator<\/span><\/button>\n            <button class=\"b\" data-pre=\"dot2\">\u03a62 + dot clock<\/button>\n            <button class=\"b\" data-pre=\"bus_ok\"><span data-l=\"it\">Bus dati su \u03a62<\/span><span data-l=\"en\">Data bus on \u03a62<\/span><\/button>\n            <button class=\"b\" data-pre=\"ras\">\/RAS + \u03a62<\/button>\n            <button class=\"b\" data-pre=\"single\"><span data-l=\"it\">Glitch in SINGLE<\/span><span data-l=\"en\">Glitch in SINGLE<\/span><\/button>\n            <button class=\"b\" data-pre=\"video\"><span data-l=\"it\">Riga video<\/span><span data-l=\"en\">Video line<\/span><\/button>\n            <button class=\"b\" data-pre=\"sid_ac\"><span data-l=\"it\">Audio SID<\/span><span data-l=\"en\">SID audio<\/span><\/button>\n            <button class=\"b\" data-pre=\"reset\">Reset<\/button>\n          <\/div>\n        <\/div>\n        <div class=\"ctl\">\n          <!-- canale 1 -->\n          <div class=\"grp c1\" id=\"os-g0\">\n            <div class=\"gh\"><button class=\"chb\" data-tog=\"0\">CH1<\/button><span><span data-l=\"it\">Canale 1<\/span><span data-l=\"en\">Channel 1<\/span><\/span><\/div>\n            <label class=\"fld w2\"><span><span data-l=\"it\">Segnale (dove metti la sonda)<\/span><span data-l=\"en\">Signal (where the probe goes)<\/span><\/span><select id=\"os-s0\"><\/select><\/label>\n            <div class=\"kn\"><span>Volt\/div<\/span><button class=\"b\" data-step=\"vdiv:0:-1\" aria-label=\"-\">\u2212<\/button><b id=\"os-vd0\"><\/b><button class=\"b\" data-step=\"vdiv:0:1\" aria-label=\"+\">+<\/button><\/div>\n            <div class=\"kn\"><span><span data-l=\"it\">Posizione<\/span><span data-l=\"en\">Position<\/span><\/span><input type=\"range\" min=\"-40\" max=\"40\" step=\"1\" data-rng=\"pos:0\"><button class=\"b sm\" data-zero=\"pos:0\">0<\/button><\/div>\n            <div class=\"row\"><span><span data-l=\"it\">Accoppiamento<\/span><span data-l=\"en\">Coupling<\/span><\/span><div class=\"seg\" data-seg=\"cpl:0\"><button data-v=\"dc\">DC<\/button><button data-v=\"ac\">AC<\/button><button data-v=\"gnd\">GND<\/button><\/div><\/div>\n            <div class=\"row\"><span><span data-l=\"it\">Interruttore sonda<\/span><span data-l=\"en\">Probe switch<\/span><\/span><div class=\"seg\" data-seg=\"probe:0\"><button data-v=\"1\">1x<\/button><button data-v=\"10\">10x<\/button><\/div><\/div>\n            <div class=\"row\"><span><span data-l=\"it\">Canale impostato a<\/span><span data-l=\"en\">Channel set to<\/span><\/span><div class=\"seg\" data-seg=\"menu:0\"><button data-v=\"1\">1x<\/button><button data-v=\"10\">10x<\/button><\/div><\/div>\n            <p class=\"pw\" id=\"os-pw0\" hidden><span data-l=\"it\">\u26a0 Sonda e canale non coincidono: le tensioni lette sono sbagliate di 10 volte.<\/span><span data-l=\"en\">\u26a0 Probe and channel don't match: readings are off by a factor of 10.<\/span><\/p>\n            <div class=\"kn\"><span><span data-l=\"it\">Compensazione<\/span><span data-l=\"en\">Compensation<\/span><\/span><input type=\"range\" min=\"-100\" max=\"100\" step=\"1\" data-rng=\"comp:0\"><b id=\"os-cp0\"><\/b><\/div>\n            <div class=\"row\"><span><span data-l=\"it\">Massa della sonda<\/span><span data-l=\"en\">Probe ground<\/span><\/span><div class=\"seg\" data-seg=\"gnd:0\"><button data-v=\"short\"><span data-l=\"it\">Molla corta<\/span><span data-l=\"en\">Short spring<\/span><\/button><button data-v=\"long\"><span data-l=\"it\">Coccodrillo 15 cm<\/span><span data-l=\"en\">15 cm clip lead<\/span><\/button><\/div><\/div>\n          <\/div>\n          <!-- canale 2 -->\n          <div class=\"grp c2\" id=\"os-g1\">\n            <div class=\"gh\"><button class=\"chb\" data-tog=\"1\">CH2<\/button><span><span data-l=\"it\">Canale 2<\/span><span data-l=\"en\">Channel 2<\/span><\/span><\/div>\n            <label class=\"fld w2\"><span><span data-l=\"it\">Segnale (dove metti la sonda)<\/span><span data-l=\"en\">Signal (where the probe goes)<\/span><\/span><select id=\"os-s1\"><\/select><\/label>\n            <div class=\"kn\"><span>Volt\/div<\/span><button class=\"b\" data-step=\"vdiv:1:-1\" aria-label=\"-\">\u2212<\/button><b id=\"os-vd1\"><\/b><button class=\"b\" data-step=\"vdiv:1:1\" aria-label=\"+\">+<\/button><\/div>\n            <div class=\"kn\"><span><span data-l=\"it\">Posizione<\/span><span data-l=\"en\">Position<\/span><\/span><input type=\"range\" min=\"-40\" max=\"40\" step=\"1\" data-rng=\"pos:1\"><button class=\"b sm\" data-zero=\"pos:1\">0<\/button><\/div>\n            <div class=\"row\"><span><span data-l=\"it\">Accoppiamento<\/span><span data-l=\"en\">Coupling<\/span><\/span><div class=\"seg\" data-seg=\"cpl:1\"><button data-v=\"dc\">DC<\/button><button data-v=\"ac\">AC<\/button><button data-v=\"gnd\">GND<\/button><\/div><\/div>\n            <div class=\"row\"><span><span data-l=\"it\">Interruttore sonda<\/span><span data-l=\"en\">Probe switch<\/span><\/span><div class=\"seg\" data-seg=\"probe:1\"><button data-v=\"1\">1x<\/button><button data-v=\"10\">10x<\/button><\/div><\/div>\n            <div class=\"row\"><span><span data-l=\"it\">Canale impostato a<\/span><span data-l=\"en\">Channel set to<\/span><\/span><div class=\"seg\" data-seg=\"menu:1\"><button data-v=\"1\">1x<\/button><button data-v=\"10\">10x<\/button><\/div><\/div>\n            <p class=\"pw\" id=\"os-pw1\" hidden><span data-l=\"it\">\u26a0 Sonda e canale non coincidono: le tensioni lette sono sbagliate di 10 volte.<\/span><span data-l=\"en\">\u26a0 Probe and channel don't match: readings are off by a factor of 10.<\/span><\/p>\n            <div class=\"kn\"><span><span data-l=\"it\">Compensazione<\/span><span data-l=\"en\">Compensation<\/span><\/span><input type=\"range\" min=\"-100\" max=\"100\" step=\"1\" data-rng=\"comp:1\"><b id=\"os-cp1\"><\/b><\/div>\n            <div class=\"row\"><span><span data-l=\"it\">Massa della sonda<\/span><span data-l=\"en\">Probe ground<\/span><\/span><div class=\"seg\" data-seg=\"gnd:1\"><button data-v=\"short\"><span data-l=\"it\">Molla corta<\/span><span data-l=\"en\">Short spring<\/span><\/button><button data-v=\"long\"><span data-l=\"it\">Coccodrillo 15 cm<\/span><span data-l=\"en\">15 cm clip lead<\/span><\/button><\/div><\/div>\n          <\/div>\n          <!-- orizzontale -->\n          <div class=\"grp\">\n            <div class=\"gh\"><span class=\"gt\"><span data-l=\"it\">Orizzontale<\/span><span data-l=\"en\">Horizontal<\/span><\/span><\/div>\n            <div class=\"kn\"><span><span data-l=\"it\">Tempo\/div<\/span><span data-l=\"en\">Time\/div<\/span><\/span><button class=\"b\" data-step=\"tdiv:-1\" aria-label=\"-\">\u2212<\/button><b id=\"os-td\"><\/b><button class=\"b\" data-step=\"tdiv:1\" aria-label=\"+\">+<\/button><\/div>\n            <div class=\"kn\"><span><span data-l=\"it\">Posizione<\/span><span data-l=\"en\">Position<\/span><\/span><input type=\"range\" min=\"-50\" max=\"50\" step=\"1\" data-rng=\"hpos\"><button class=\"b sm\" data-zero=\"hpos\">0<\/button><\/div>\n          <\/div>\n          <!-- trigger -->\n          <div class=\"grp\">\n            <div class=\"gh\"><span class=\"gt\">Trigger<\/span><button class=\"b run\" id=\"os-run\">STOP<\/button><\/div>\n            <div class=\"row\"><span><span data-l=\"it\">Sorgente<\/span><span data-l=\"en\">Source<\/span><\/span><div class=\"seg\" data-seg=\"src\"><button data-v=\"0\">CH1<\/button><button data-v=\"1\">CH2<\/button><\/div><\/div>\n            <div class=\"row\"><span><span data-l=\"it\">Fronte<\/span><span data-l=\"en\">Slope<\/span><\/span><div class=\"seg\" data-seg=\"slope\"><button data-v=\"1\">\u2191 <span data-l=\"it\">salita<\/span><span data-l=\"en\">rising<\/span><\/button><button data-v=\"-1\">\u2193 <span data-l=\"it\">discesa<\/span><span data-l=\"en\">falling<\/span><\/button><\/div><\/div>\n            <div class=\"kn\"><span><span data-l=\"it\">Livello<\/span><span data-l=\"en\">Level<\/span><\/span><input type=\"range\" min=\"-450\" max=\"450\" step=\"1\" data-rng=\"level\"><b id=\"os-lv\"><\/b><button class=\"b sm\" id=\"os-l50\">50%<\/button><\/div>\n            <div class=\"row\"><span><span data-l=\"it\">Modalit\u00e0<\/span><span data-l=\"en\">Mode<\/span><\/span><div class=\"seg\" data-seg=\"mode\"><button data-v=\"auto\">AUTO<\/button><button data-v=\"norm\">NORMAL<\/button><button data-v=\"single\">SINGLE<\/button><\/div><\/div>\n            <div class=\"kn\"><span>Holdoff<\/span><input type=\"range\" min=\"0\" max=\"100\" step=\"1\" data-rng=\"hold\"><b id=\"os-ho\"><\/b><\/div>\n            <button class=\"b pwr\" id=\"os-pwr\" hidden>\u23fb <span data-l=\"it\">Spegni e riaccendi il C64<\/span><span data-l=\"en\">Power-cycle the C64<\/span><\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n\n    <\/section>\n\n    <!-- ===================================================== 2 basi -->\n    <section id=\"os-basi\">\n      <span class=\"kicker\">02<\/span>\n      <h3 class=\"h3\"><span data-l=\"it\">Le basi: schermo, comandi e sonda<\/span><span data-l=\"en\">The basics: screen, controls and probe<\/span><\/h3>\n      <div class=\"txt\" data-l=\"it\">\n        <p>Lo schermo \u00e8 una griglia di <b>10 divisioni in orizzontale<\/b> (il tempo) e <b>8 in verticale<\/b> (la tensione). Tutti i comandi principali dicono quanto vale una divisione:<\/p>\n      <\/div>\n      <div class=\"txt\" data-l=\"en\">\n        <p>The screen is a grid of <b>10 horizontal divisions<\/b> (time) and <b>8 vertical ones<\/b> (voltage). Every main control sets what one division is worth:<\/p>\n      <\/div>\n      <div class=\"tblw\"><table class=\"tbl\">\n        <tr><th><span data-l=\"it\">Comando<\/span><span data-l=\"en\">Control<\/span><\/th><th><span data-l=\"it\">Cosa fa<\/span><span data-l=\"en\">What it does<\/span><\/th><th><span data-l=\"it\">Esempio<\/span><span data-l=\"en\">Example<\/span><\/th><\/tr>\n        <tr><td><b>Volt\/div<\/b><\/td><td><span data-l=\"it\">Quanti volt vale ogni quadretto in verticale.<\/span><span data-l=\"en\">How many volts each square is worth vertically.<\/span><\/td><td><span data-l=\"it\">Un segnale TTL da 0 a 5 V a 1 V\/div occupa 5 quadretti.<\/span><span data-l=\"en\">A 0\u20135 V TTL signal at 1 V\/div spans 5 squares.<\/span><\/td><\/tr>\n        <tr><td><b><span data-l=\"it\">Tempo\/div<\/span><span data-l=\"en\">Time\/div<\/span><\/b><\/td><td><span data-l=\"it\">Quanto tempo vale ogni quadretto in orizzontale. Tutto lo schermo vale 10 volte tanto.<\/span><span data-l=\"en\">How much time each square is worth horizontally. The whole screen is 10 times that.<\/span><\/td><td><span data-l=\"it\">A 500 ns\/div lo schermo copre 5 \u00b5s: circa 5 cicli del \u03a62 di un C64.<\/span><span data-l=\"en\">At 500 ns\/div the screen covers 5 \u00b5s: about 5 cycles of a C64's \u03a62.<\/span><\/td><\/tr>\n        <tr><td><b><span data-l=\"it\">Posizione verticale<\/span><span data-l=\"en\">Vertical position<\/span><\/b><\/td><td><span data-l=\"it\">Sposta su e gi\u00f9 lo zero di un canale (la freccia a sinistra).<\/span><span data-l=\"en\">Moves a channel's zero (the left-hand arrow) up and down.<\/span><\/td><td><span data-l=\"it\">Con due canali metti uno in alto e uno in basso.<\/span><span data-l=\"en\">With two channels, put one at the top and one at the bottom.<\/span><\/td><\/tr>\n        <tr><td><b><span data-l=\"it\">Posizione orizzontale<\/span><span data-l=\"en\">Horizontal position<\/span><\/b><\/td><td><span data-l=\"it\">Sposta il punto del trigger: vedi pi\u00f9 \"prima\" o pi\u00f9 \"dopo\" l'evento.<\/span><span data-l=\"en\">Moves the trigger point: shows more \"before\" or more \"after\" the event.<\/span><\/td><td><span data-l=\"it\">Utile per guardare cosa succede prima di un glitch.<\/span><span data-l=\"en\">Handy to see what happens just before a glitch.<\/span><\/td><\/tr>\n        <tr><td><b>DC<\/b><\/td><td><span data-l=\"it\">Mostra il segnale com'\u00e8, continua compresa.<\/span><span data-l=\"en\">Shows the signal as it is, DC included.<\/span><\/td><td><span data-l=\"it\">\u00c8 la scelta giusta per i segnali logici: vedi se lo 0 \u00e8 davvero vicino a 0 V.<\/span><span data-l=\"en\">The right choice for logic signals: you see whether a 0 is really near 0 V.<\/span><\/td><\/tr>\n        <tr><td><b>AC<\/b><\/td><td><span data-l=\"it\">Toglie la componente continua con un condensatore: resta solo la parte che varia.<\/span><span data-l=\"en\">Blocks the DC part with a capacitor: only the varying part is left.<\/span><\/td><td><span data-l=\"it\">Per vedere 30 mV di ripple su un +5 V, o l'audio del SID che sta su qualche volt di continua.<\/span><span data-l=\"en\">To see 30 mV of ripple on a +5 V rail, or SID audio sitting on a few volts of DC.<\/span><\/td><\/tr>\n        <tr><td><b>GND<\/b><\/td><td><span data-l=\"it\">Scollega l'ingresso e mostra lo zero.<\/span><span data-l=\"en\">Disconnects the input and shows zero.<\/span><\/td><td><span data-l=\"it\">Serve per allineare lo zero a una riga della griglia.<\/span><span data-l=\"en\">Used to line zero up with a grid line.<\/span><\/td><\/tr>\n      <\/table><\/div>\n      <div class=\"minis m2\">\n        <figure class=\"mini\"><canvas data-pre=\"dc\" data-k=\"3\"><\/canvas><figcaption><span data-l=\"it\"><b>DC<\/b>: il +5 V \u00e8 una riga piatta a 5 quadretti dallo zero.<\/span><span data-l=\"en\"><b>DC<\/b>: the +5 V rail is a flat line 5 squares above zero.<\/span><\/figcaption><button class=\"b try\" data-pre=\"dc\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"ac\" data-k=\"3\"><\/canvas><figcaption><span data-l=\"it\"><b>AC<\/b> a 10 mV\/div: compare il ripple a 100 Hz del raddrizzatore.<\/span><span data-l=\"en\"><b>AC<\/b> at 10 mV\/div: the 100 Hz rectifier ripple appears.<\/span><\/figcaption><button class=\"b try\" data-pre=\"ac\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n      <\/div>\n\n      <h4 class=\"h4\"><span data-l=\"it\">La sonda 1x e 10x<\/span><span data-l=\"en\">1x and 10x probes<\/span><\/h4>\n      <div class=\"txt\" data-l=\"it\">\n        <p>Le sonde in dotazione hanno quasi sempre un interruttore <b>1x \/ 10x<\/b>. In <b>10x<\/b> la sonda divide la tensione per 10 e presenta al circuito circa 10 M\u03a9 e pochi pF: disturba poco e passa tutta la banda dell'oscilloscopio. In <b>1x<\/b> il circuito vede il cavo e l'ingresso dello strumento (decine di pF in pi\u00f9) e la banda scende a pochi MHz, spesso tra 6 e 35 MHz secondo il modello: un dot clock a 7,88 MHz diventa una specie di sinusoide.<\/p>\n        <ul>\n          <li><b>Lavora sempre in 10x<\/b>, salvo segnali piccolissimi (pochi mV) e lenti.<\/li>\n          <li>Il canale dell'oscilloscopio va impostato allo stesso valore della sonda. Se la sonda \u00e8 su 10x e il canale su 1x, tutte le tensioni lette sono <b>10 volte pi\u00f9 basse<\/b>: un errore classico che fa sembrare guasto un clock sano.<\/li>\n        <\/ul>\n      <\/div>\n      <div class=\"txt\" data-l=\"en\">\n        <p>The probes that come with a scope almost always have a <b>1x \/ 10x<\/b> switch. In <b>10x<\/b> the probe divides the voltage by 10 and loads the circuit with about 10 M\u03a9 and a few pF: it barely disturbs it and passes the scope's full bandwidth. In <b>1x<\/b> the circuit sees the cable and the scope input (tens of pF more) and bandwidth drops to a few MHz, often 6 to 35 MHz depending on the model: a 7.88 MHz dot clock turns into something like a sine wave.<\/p>\n        <ul>\n          <li><b>Always work in 10x<\/b>, except for tiny (a few mV) slow signals.<\/li>\n          <li>Set the scope channel to the same value as the probe. With the probe on 10x and the channel on 1x, every reading is <b>10 times too low<\/b>: a classic mistake that makes a healthy clock look dead.<\/li>\n        <\/ul>\n      <\/div>\n      <div class=\"minis m2\">\n        <figure class=\"mini\"><canvas data-pre=\"gnd_short\" data-k=\"3\"><\/canvas><figcaption><span data-l=\"it\">Dot clock con sonda <b>10x<\/b>: fronti ripidi.<\/span><span data-l=\"en\">Dot clock with a <b>10x<\/b> probe: sharp edges.<\/span><\/figcaption><button class=\"b try\" data-pre=\"gnd_short\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"probe1x\" data-k=\"3\"><\/canvas><figcaption><span data-l=\"it\">Lo stesso con sonda <b>1x<\/b>: la banda limitata arrotonda tutto.<\/span><span data-l=\"en\">The same with a <b>1x<\/b> probe: the limited bandwidth rounds everything.<\/span><\/figcaption><button class=\"b try\" data-pre=\"probe1x\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n      <\/div>\n\n      <h4 class=\"h4\"><span data-l=\"it\">Compensare la sonda<\/span><span data-l=\"en\">Compensating the probe<\/span><\/h4>\n      <div class=\"txt\" data-l=\"it\">\n        <p>Una sonda 10x contiene un partitore con un piccolo condensatore regolabile che va adattato all'ingresso del tuo oscilloscopio. Si fa una volta per ogni sonda e per ogni canale: aggancia la sonda all'uscita del <b>calibratore<\/b> sul pannello (un'onda quadra a 1 kHz di qualche volt), metti circa 200 \u00b5s\/div e gira il trimmer con il cacciavite di plastica finch\u00e9 gli spigoli sono dritti. Una sonda <b>sovracompensata<\/b> aggiunge punte su ogni fronte, una <b>sottocompensata<\/b> li arrotonda: in entrambi i casi misuri male ampiezze e tempi di salita.<\/p>\n      <\/div>\n      <div class=\"txt\" data-l=\"en\">\n        <p>A 10x probe contains a divider with a small adjustable capacitor that has to be matched to your scope input. You do it once per probe and per channel: hook the probe to the <b>calibrator<\/b> output on the front panel (a 1 kHz square wave of a few volts), set about 200 \u00b5s\/div and turn the trimmer with the plastic screwdriver until the corners are square. An <b>over-compensated<\/b> probe adds spikes on every edge, an <b>under-compensated<\/b> one rounds them: either way, amplitudes and rise times come out wrong.<\/p>\n      <\/div>\n      <div class=\"minis m3\">\n        <figure class=\"mini\"><canvas data-pre=\"comp_under\" data-k=\"2\"><\/canvas><figcaption><span data-l=\"it\"><b>Sottocompensata<\/b>: fronti arrotondati.<\/span><span data-l=\"en\"><b>Under-compensated<\/b>: rounded edges.<\/span><\/figcaption><button class=\"b try\" data-pre=\"comp_under\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"comp_ok\" data-k=\"2\"><\/canvas><figcaption><span data-l=\"it\"><b>Corretta<\/b>: quadra perfetta.<\/span><span data-l=\"en\"><b>Correct<\/b>: a perfect square.<\/span><\/figcaption><button class=\"b try\" data-pre=\"comp_ok\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"comp_over\" data-k=\"2\"><\/canvas><figcaption><span data-l=\"it\"><b>Sovracompensata<\/b>: punte sui fronti.<\/span><span data-l=\"en\"><b>Over-compensated<\/b>: spikes on the edges.<\/span><\/figcaption><button class=\"b try\" data-pre=\"comp_over\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n      <\/div>\n\n      <h4 class=\"h4\"><span data-l=\"it\">La massa: corta \u00e8 meglio<\/span><span data-l=\"en\">Ground: shorter is better<\/span><\/h4>\n      <div class=\"txt\" data-l=\"it\">\n        <p>Il filo di massa con il coccodrillo \u00e8 lungo 10\u201315 cm: \u00e8 un'induttanza che, insieme alla capacit\u00e0 della sonda, forma un circuito risonante. Su ogni fronte veloce compaiono <b>oscillazioni smorzate<\/b> che nel circuito non esistono. Per i clock e i bus usa la <b>mollettina di massa<\/b> che si infila sulla punta, o un filo cortissimo verso il piedino GND pi\u00f9 vicino. Il coccodrillo lungo va bene per segnali lenti: alimentazioni, audio, reset.<\/p>\n      <\/div>\n      <div class=\"txt\" data-l=\"en\">\n        <p>The ground lead with its alligator clip is 10\u201315 cm long: it is an inductance that, with the probe capacitance, makes a resonant circuit. Every fast edge then shows <b>damped ringing<\/b> that isn't really in the circuit. For clocks and buses use the <b>ground spring<\/b> that slips over the probe tip, or a very short wire to the nearest GND pin. The long clip lead is fine for slow signals: supplies, audio, reset.<\/p>\n      <\/div>\n      <div class=\"minis m2\">\n        <figure class=\"mini\"><canvas data-pre=\"gnd_short\" data-k=\"3\"><\/canvas><figcaption><span data-l=\"it\">Dot clock con la <b>molla corta<\/b>.<\/span><span data-l=\"en\">Dot clock with the <b>short spring<\/b>.<\/span><\/figcaption><button class=\"b try\" data-pre=\"gnd_short\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"gnd_long\" data-k=\"3\"><\/canvas><figcaption><span data-l=\"it\">Con il <b>coccodrillo lungo<\/b>: oscillazioni su ogni fronte.<\/span><span data-l=\"en\">With the <b>long clip lead<\/b>: ringing on every edge.<\/span><\/figcaption><button class=\"b try\" data-pre=\"gnd_long\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n      <\/div>\n\n      <h4 class=\"h4\"><span data-l=\"it\">Quanta banda serve<\/span><span data-l=\"en\">How much bandwidth you need<\/span><\/h4>\n      <div class=\"txt\" data-l=\"it\">\n        <p>La <b>banda<\/b> (in MHz) dice fino a che frequenza l'oscilloscopio misura senza attenuare. Un'onda quadra \u00e8 fatta della sua frequenza pi\u00f9 le armoniche dispari: per vederla ancora quadra serve almeno la <b>5\u00aa armonica<\/b>, quindi una banda di <b>5 volte<\/b> la frequenza. Il tempo di salita pi\u00f9 veloce che lo strumento riesce a mostrare \u00e8 circa <code>0,35 \/ banda<\/code>: 7 ns con 50 MHz, 3,5 ns con 100 MHz.<\/p>\n      <\/div>\n      <div class=\"txt\" data-l=\"en\">\n        <p><b>Bandwidth<\/b> (in MHz) is the highest frequency the scope measures without attenuating it. A square wave is its frequency plus the odd harmonics: to still see it square you need at least the <b>5th harmonic<\/b>, so a bandwidth of <b>5 times<\/b> the frequency. The fastest rise time the scope can show is about <code>0.35 \/ bandwidth<\/code>: 7 ns at 50 MHz, 3.5 ns at 100 MHz.<\/p>\n      <\/div>\n      <div class=\"tblw\"><table class=\"tbl\">\n        <tr><th><span data-l=\"it\">Segnale<\/span><span data-l=\"en\">Signal<\/span><\/th><th>PAL<\/th><th>NTSC<\/th><th><span data-l=\"it\">Banda consigliata<\/span><span data-l=\"en\">Suggested bandwidth<\/span><\/th><\/tr>\n        <tr><td><b>C64 \u03a62<\/b> <span data-l=\"it\">(clock della CPU)<\/span><span data-l=\"en\">(CPU clock)<\/span><\/td><td>0,985248 MHz<\/td><td>1,022727 MHz<\/td><td><span data-l=\"it\">20 MHz bastano<\/span><span data-l=\"en\">20 MHz is enough<\/span><\/td><\/tr>\n        <tr><td><b>C64 dot clock<\/b> <span data-l=\"it\">(8 \u00d7 \u03a62, pixel del VIC-II)<\/span><span data-l=\"en\">(8 \u00d7 \u03a62, VIC-II pixels)<\/span><\/td><td>7,881984 MHz<\/td><td>8,181818 MHz<\/td><td><span data-l=\"it\">50 MHz o pi\u00f9<\/span><span data-l=\"en\">50 MHz or more<\/span><\/td><\/tr>\n        <tr><td><b><span data-l=\"it\">C64 quarzo colore<\/span><span data-l=\"en\">C64 colour crystal<\/span><\/b><\/td><td>17,734475 MHz<\/td><td>14,31818 MHz<\/td><td>100 MHz<\/td><\/tr>\n        <tr><td><b><span data-l=\"it\">Amiga clock CPU<\/span><span data-l=\"en\">Amiga CPU clock<\/span><\/b> (68000)<\/td><td>7,09379 MHz<\/td><td>7,15909 MHz<\/td><td><span data-l=\"it\">50 MHz o pi\u00f9<\/span><span data-l=\"en\">50 MHz or more<\/span><\/td><\/tr>\n        <tr><td><b><span data-l=\"it\">Amiga quarzo<\/span><span data-l=\"en\">Amiga crystal<\/span><\/b><\/td><td>28,37516 MHz<\/td><td>28,63636 MHz<\/td><td>100\u2013200 MHz<\/td><\/tr>\n        <tr><td><b><span data-l=\"it\">Riga video<\/span><span data-l=\"en\">Video line<\/span><\/b><\/td><td><span data-l=\"it\">64 \u00b5s (C64: 63 cicli = 63,94 \u00b5s)<\/span><span data-l=\"en\">64 \u00b5s (C64: 63 cycles = 63.94 \u00b5s)<\/span><\/td><td><span data-l=\"it\">63,5 \u00b5s (C64: 65 cicli)<\/span><span data-l=\"en\">63.5 \u00b5s (C64: 65 cycles)<\/span><\/td><td><span data-l=\"it\">20 MHz bastano<\/span><span data-l=\"en\">20 MHz is enough<\/span><\/td><\/tr>\n      <\/table><\/div>\n      <div class=\"txt\" data-l=\"it\"><p>Per un C64 e un Amiga un oscilloscopio da <b>50\u2013100 MHz<\/b> a due canali va benissimo. Pi\u00f9 della banda conta usarlo bene: sonda in 10x compensata, massa corta, trigger giusto.<\/p><\/div>\n      <div class=\"txt\" data-l=\"en\"><p>For a C64 and an Amiga a two-channel <b>50\u2013100 MHz<\/b> scope is plenty. Using it well matters more than bandwidth: a compensated 10x probe, a short ground, the right trigger.<\/p><\/div>\n    <\/section>\n\n    <!-- ===================================================== 3 trigger -->\n    <section id=\"os-trig\">\n      <span class=\"kicker\">03<\/span>\n      <h3 class=\"h3\"><span data-l=\"it\">Il trigger: fermare l'immagine<\/span><span data-l=\"en\">The trigger: freezing the picture<\/span><\/h3>\n      <div class=\"txt\" data-l=\"it\">\n        <p>Un segnale da 1 MHz si ripete un milione di volte al secondo. Lo schermo invece si aggiorna qualche decina di volte al secondo: se ogni immagine partisse in un punto a caso del segnale, vedresti le onde scorrere e sovrapporsi. Il <b>trigger<\/b> fa partire ogni acquisizione nello stesso punto: quando il segnale attraversa il <b>livello<\/b> scelto nel <b>verso<\/b> scelto (salita o discesa). Cos\u00ec tutte le immagini combaciano e la traccia sta ferma.<\/p>\n        <ul>\n          <li><b>Livello<\/b>: mettilo a met\u00e0 dell'ampiezza (per i segnali TTL tra 1,5 e 2,5 V). Se \u00e8 fuori dal segnale il trigger non scatta mai: il tasto <b>50%<\/b> lo rimette in mezzo.<\/li>\n          <li><b>Fronte<\/b>: salita o discesa. Per i segnali attivi bassi come \/RAS, \/CAS o \/RESET di solito interessa il fronte di discesa.<\/li>\n        <\/ul>\n      <\/div>\n      <div class=\"txt\" data-l=\"en\">\n        <p>A 1 MHz signal repeats a million times a second. The screen only refreshes a few dozen times a second: if each picture started at a random point of the signal, you would see waves drifting and overlapping. The <b>trigger<\/b> starts every acquisition at the same point: when the signal crosses the chosen <b>level<\/b> in the chosen <b>direction<\/b> (rising or falling). All the pictures then line up and the trace stands still.<\/p>\n        <ul>\n          <li><b>Level<\/b>: put it at half the amplitude (between 1.5 and 2.5 V for TTL signals). If it is outside the signal the trigger never fires: the <b>50%<\/b> button puts it back in the middle.<\/li>\n          <li><b>Slope<\/b>: rising or falling. For active-low signals such as \/RAS, \/CAS or \/RESET you usually want the falling edge.<\/li>\n        <\/ul>\n      <\/div>\n      <div class=\"minis m3\">\n        <figure class=\"mini\"><canvas data-pre=\"trig_off\" data-k=\"6\"><\/canvas><figcaption><span data-l=\"it\">Livello a 6 V, sopra il segnale: in AUTO la traccia corre libera.<\/span><span data-l=\"en\">Level at 6 V, above the signal: in AUTO the trace free-runs.<\/span><\/figcaption><button class=\"b try\" data-pre=\"trig_off\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"trig_ok\" data-k=\"6\"><\/canvas><figcaption><span data-l=\"it\">Livello a 2,3 V, fronte di salita: immagine ferma.<\/span><span data-l=\"en\">Level 2.3 V, rising edge: a steady picture.<\/span><\/figcaption><button class=\"b try\" data-pre=\"trig_ok\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"trig_fall\" data-k=\"6\"><\/canvas><figcaption><span data-l=\"it\">Fronte di discesa: al centro c'\u00e8 il fronte che scende.<\/span><span data-l=\"en\">Falling edge: the falling edge sits in the centre.<\/span><\/figcaption><button class=\"b try\" data-pre=\"trig_fall\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n      <\/div>\n\n      <h4 class=\"h4\"><span data-l=\"it\">AUTO, NORMAL e SINGLE<\/span><span data-l=\"en\">AUTO, NORMAL and SINGLE<\/span><\/h4>\n      <div class=\"tblw\"><table class=\"tbl\">\n        <tr><th><span data-l=\"it\">Modalit\u00e0<\/span><span data-l=\"en\">Mode<\/span><\/th><th><span data-l=\"it\">Cosa fa<\/span><span data-l=\"en\">What it does<\/span><\/th><th><span data-l=\"it\">Quando usarla<\/span><span data-l=\"en\">When to use it<\/span><\/th><\/tr>\n        <tr><td><b>AUTO<\/b><\/td><td><span data-l=\"it\">Se il trigger scatta mostra l'immagine agganciata; se non scatta entro poco disegna lo stesso, senza aggancio.<\/span><span data-l=\"en\">If the trigger fires it shows a locked picture; if not, it draws anyway after a short wait, unlocked.<\/span><\/td><td><span data-l=\"it\">Per cominciare: vedi sempre qualcosa, anche una linea ferma a 0 V.<\/span><span data-l=\"en\">To get started: you always see something, even a line stuck at 0 V.<\/span><\/td><\/tr>\n        <tr><td><b>NORMAL<\/b><\/td><td><span data-l=\"it\">Disegna solo quando il trigger scatta; altrimenti tiene sullo schermo l'ultima immagine.<\/span><span data-l=\"en\">Draws only when the trigger fires; otherwise it keeps the last picture on screen.<\/span><\/td><td><span data-l=\"it\">Per eventi rari o irregolari: l'immagine non viene coperta da tracce senza aggancio.<\/span><span data-l=\"en\">For rare or irregular events: the picture is not overwritten by unlocked traces.<\/span><\/td><\/tr>\n        <tr><td><b>SINGLE<\/b><\/td><td><span data-l=\"it\">Aspetta il primo trigger, acquisisce una volta e si ferma (STOP).<\/span><span data-l=\"en\">Waits for the first trigger, captures once and stops (STOP).<\/span><\/td><td><span data-l=\"it\">Per catturare un evento unico: l'accensione, un reset, un glitch che capita una volta ogni tanto.<\/span><span data-l=\"en\">To catch a one-off event: power-on, a reset, a glitch that happens once in a while.<\/span><\/td><\/tr>\n      <\/table><\/div>\n      <div class=\"minis m2\">\n        <figure class=\"mini\"><canvas data-pre=\"single\" data-k=\"1\"><\/canvas><figcaption><span data-l=\"it\">Un glitch di 50 ns su \/NMI catturato in <b>SINGLE<\/b> con fronte di discesa a 2,5 V.<\/span><span data-l=\"en\">A 50 ns glitch on \/NMI caught in <b>SINGLE<\/b> with a falling edge at 2.5 V.<\/span><\/figcaption><button class=\"b try\" data-pre=\"single\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"reset\" data-k=\"1\"><\/canvas><figcaption><span data-l=\"it\">\/RESET all'accensione a 100 ms\/div: resta basso per una frazione di secondo, poi sale.<\/span><span data-l=\"en\">\/RESET at power-on at 100 ms\/div: it stays low for a fraction of a second, then rises.<\/span><\/figcaption><button class=\"b try\" data-pre=\"reset\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n      <\/div>\n\n      <h4 class=\"h4\">Holdoff<\/h4>\n      <div class=\"txt\" data-l=\"it\">\n        <p>Alcuni segnali sono fatti di <b>raffiche<\/b>: qualche impulso, una pausa, di nuovo qualche impulso. Ogni impulso della raffica soddisfa il trigger, quindi l'oscilloscopio si aggancia a volte al primo, a volte al terzo: le immagini non combaciano. L'<b>holdoff<\/b> dice allo strumento di ignorare i trigger per un certo tempo dopo l'ultimo valido. Se lo imposti pi\u00f9 lungo della raffica e pi\u00f9 corto della pausa, il trigger cade sempre sul primo impulso e l'immagine si ferma.<\/p>\n      <\/div>\n      <div class=\"txt\" data-l=\"en\">\n        <p>Some signals come in <b>bursts<\/b>: a few pulses, a gap, a few pulses again. Every pulse in the burst satisfies the trigger, so the scope locks sometimes on the first, sometimes on the third: the pictures don't line up. <b>Holdoff<\/b> tells the scope to ignore triggers for a set time after the last valid one. Set it longer than the burst and shorter than the gap and the trigger always lands on the first pulse: the picture stands still.<\/p>\n      <\/div>\n      <div class=\"minis m2\">\n        <figure class=\"mini\"><canvas data-pre=\"hold_off\" data-k=\"7\"><\/canvas><figcaption><span data-l=\"it\">Holdoff al minimo: le raffiche si sovrappongono sfasate.<\/span><span data-l=\"en\">Minimum holdoff: the bursts overlap out of step.<\/span><\/figcaption><button class=\"b try\" data-pre=\"hold_off\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"hold_on\" data-k=\"7\"><\/canvas><figcaption><span data-l=\"it\">Holdoff a 7 \u00b5s: sempre agganciato al primo impulso.<\/span><span data-l=\"en\">7 \u00b5s holdoff: always locked on the first pulse.<\/span><\/figcaption><button class=\"b try\" data-pre=\"hold_on\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n      <\/div>\n\n      <h4 class=\"h4\"><span data-l=\"it\">Trigger sul secondo canale<\/span><span data-l=\"en\">Triggering on the other channel<\/span><\/h4>\n      <div class=\"txt\" data-l=\"it\">\n        <p>Una linea dati cambia in modo diverso a ogni ciclo: se fai trigger su di lei, ogni immagine \u00e8 diversa e vedi solo un groviglio. Il trucco \u00e8 mettere il <b>secondo canale sul clock<\/b> (\u03a62 sul C64, o \/RAS per le RAM) e prendere il trigger <b>da quel canale<\/b>. Il clock \u00e8 perfettamente regolare, quindi l'asse dei tempi sta fermo, e sulla linea dati vedi le commutazioni sempre allo stesso punto del ciclo, con lo 0 e l'1 sovrapposti: si vede subito se i livelli sono buoni e se arrivano in tempo.<\/p>\n      <\/div>\n      <div class=\"txt\" data-l=\"en\">\n        <p>A data line changes differently on every cycle: trigger on it and each picture is different, so all you see is a tangle. The trick is to put the <b>second channel on the clock<\/b> (\u03a62 on a C64, or \/RAS for the RAMs) and take the trigger <b>from that channel<\/b>. The clock is perfectly regular, so the time axis stands still, and on the data line you see the transitions always at the same point of the cycle, with 0 and 1 overlaid: you can tell at once whether levels are good and on time.<\/p>\n      <\/div>\n      <div class=\"minis m2\">\n        <figure class=\"mini\"><canvas data-pre=\"bus_self\" data-k=\"7\"><\/canvas><figcaption><span data-l=\"it\">Trigger sulla linea dati stessa: confuso.<\/span><span data-l=\"en\">Trigger on the data line itself: confusing.<\/span><\/figcaption><button class=\"b try\" data-pre=\"bus_self\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"bus_ok\" data-k=\"7\"><\/canvas><figcaption><span data-l=\"it\">Trigger su \u03a62 (CH2): lo 0 e l'1 si sovrappongono ordinati.<\/span><span data-l=\"en\">Trigger on \u03a62 (CH2): 0 and 1 overlay neatly.<\/span><\/figcaption><button class=\"b try\" data-pre=\"bus_ok\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n      <\/div>\n    <\/section>\n\n    <!-- ===================================================== 4 forme -->\n    <section id=\"os-forme\">\n      <span class=\"kicker\">04<\/span>\n      <h3 class=\"h3\"><span data-l=\"it\">Forme d'onda giuste e sbagliate<\/span><span data-l=\"en\">Good and bad waveforms<\/span><\/h3>\n      <div class=\"txt\" data-l=\"it\">\n        <p>Per i livelli logici TTL ricorda due soglie: un ingresso legge <b>0 sotto 0,8 V<\/b> e <b>1 sopra 2 V<\/b>. In mezzo c'\u00e8 la zona proibita: un segnale che ci resta \u00e8 un guasto. Le uscite sane danno meno di 0,4\u20130,5 V per lo 0 e pi\u00f9 di 2,4\u20132,7 V per l'1. Gli esempi sono di un C64 PAL; le forme di \/RAS e \/CAS sono indicative, controlla i tempi esatti sullo schema della tua scheda.<\/p>\n      <\/div>\n      <div class=\"txt\" data-l=\"en\">\n        <p>For TTL logic levels remember two thresholds: an input reads <b>0 below 0.8 V<\/b> and <b>1 above 2 V<\/b>. In between is the forbidden zone: a signal that stays there is a fault. Healthy outputs give less than 0.4\u20130.5 V for a 0 and more than 2.4\u20132.7 V for a 1. Examples are from a PAL C64; the \/RAS and \/CAS shapes are indicative, check exact timings on your board's schematic.<\/p>\n      <\/div>\n\n      <h4 class=\"h4\"><span data-l=\"it\">Clock<\/span><span data-l=\"en\">Clock<\/span><\/h4>\n      <div class=\"minis m4\">\n        <figure class=\"mini\"><canvas data-pre=\"clk_ok\" data-k=\"3\"><\/canvas><figcaption><span data-l=\"it\"><b>Sano<\/b>: quadra pulita da 0,2 a 4,6 V, 0,985 MHz.<\/span><span data-l=\"en\"><b>Healthy<\/b>: a clean 0.2 to 4.6 V square, 0.985 MHz.<\/span><\/figcaption><button class=\"b try\" data-pre=\"clk_ok\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"clk_round\" data-k=\"3\"><\/canvas><figcaption><span data-l=\"it\"><b>Arrotondato<\/b>: fronti lenti, chip debole o linea troppo caricata.<\/span><span data-l=\"en\"><b>Rounded<\/b>: slow edges, a weak driver or an overloaded line.<\/span><\/figcaption><button class=\"b try\" data-pre=\"clk_round\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"clk_low\" data-k=\"3\"><\/canvas><figcaption><span data-l=\"it\"><b>Ampiezza bassa<\/b>: non supera i 2 V, qualcosa lo tira gi\u00f9.<\/span><span data-l=\"en\"><b>Low amplitude<\/b>: never reaches 2 V, something drags it down.<\/span><\/figcaption><button class=\"b try\" data-pre=\"clk_low\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"clk_dead\" data-k=\"3\"><\/canvas><figcaption><span data-l=\"it\"><b>Assente<\/b>: riga piatta, il generatore non oscilla.<\/span><span data-l=\"en\"><b>Missing<\/b>: a flat line, the generator isn't running.<\/span><\/figcaption><button class=\"b try\" data-pre=\"clk_dead\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n      <\/div>\n      <div class=\"minis m2\">\n        <figure class=\"mini\"><canvas data-pre=\"dot2\" data-k=\"3\"><\/canvas><figcaption><span data-l=\"it\">Dot clock (CH1) e \u03a62 (CH2): 8 periodi del dot clock per ogni ciclo di \u03a62.<\/span><span data-l=\"en\">Dot clock (CH1) and \u03a62 (CH2): 8 dot-clock periods per \u03a62 cycle.<\/span><\/figcaption><button class=\"b try\" data-pre=\"dot2\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"amiga\" data-k=\"3\"><\/canvas><figcaption><span data-l=\"it\">Amiga PAL: clock della CPU a 7,09 MHz (quarzo da 28,375 MHz diviso 4).<\/span><span data-l=\"en\">PAL Amiga: 7.09 MHz CPU clock (28.375 MHz crystal divided by 4).<\/span><\/figcaption><button class=\"b try\" data-pre=\"amiga\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n      <\/div>\n\n      <h4 class=\"h4\"><span data-l=\"it\">Bus dati (trigger su \u03a62)<\/span><span data-l=\"en\">Data bus (trigger on \u03a62)<\/span><\/h4>\n      <div class=\"minis m4\">\n        <figure class=\"mini\"><canvas data-pre=\"bus_ok\" data-k=\"7\"><\/canvas><figcaption><span data-l=\"it\"><b>Sano<\/b>: livelli netti, commuta dopo ogni fronte di \u03a62.<\/span><span data-l=\"en\"><b>Healthy<\/b>: clean levels, switching after every \u03a62 edge.<\/span><\/figcaption><button class=\"b try\" data-pre=\"bus_ok\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"bus_float\" data-k=\"7\"><\/canvas><figcaption><span data-l=\"it\"><b>Flottante<\/b>: vaga tra 1 e 2 V, nessuno la pilota.<\/span><span data-l=\"en\"><b>Floating<\/b>: wanders between 1 and 2 V, nobody drives it.<\/span><\/figcaption><button class=\"b try\" data-pre=\"bus_float\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"bus_conf\" data-k=\"7\"><\/canvas><figcaption><span data-l=\"it\"><b>Conflitto<\/b>: in alcuni cicli resta a 2\u20132,4 V, due chip parlano insieme.<\/span><span data-l=\"en\"><b>Contention<\/b>: in some cycles it sits at 2\u20132.4 V, two chips talk at once.<\/span><\/figcaption><button class=\"b try\" data-pre=\"bus_conf\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"bus_0\" data-k=\"7\"><\/canvas><figcaption><span data-l=\"it\"><b>Bloccata a 0<\/b>: in corto verso massa o tenuta bassa da un chip.<\/span><span data-l=\"en\"><b>Stuck at 0<\/b>: shorted to ground or held low by a chip.<\/span><\/figcaption><button class=\"b try\" data-pre=\"bus_0\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n      <\/div>\n      <div class=\"txt\" data-l=\"it\"><p>Una linea <b>bloccata a 1<\/b> sta sopra i 4 V con solo piccoli disturbi: pu\u00f2 essere in corto con il +5 V o tenuta alta da un chip guasto (<a href=\"#\" data-pre=\"bus_1\">\u25b6 prova<\/a>). Per trovare il colpevole confronta la linea con le altre del bus: in un bus sano si assomigliano tutte.<\/p><\/div>\n      <div class=\"txt\" data-l=\"en\"><p>A line <b>stuck at 1<\/b> sits above 4 V with only small glitches: it can be shorted to +5 V or held high by a faulty chip (<a href=\"#\" data-pre=\"bus_1\">\u25b6 try it<\/a>). To find the culprit compare it with the other bus lines: on a healthy bus they all look alike.<\/p><\/div>\n\n      <h4 class=\"h4\">DRAM: \/RAS, \/CAS <span data-l=\"it\">e uscita<\/span><span data-l=\"en\">and output<\/span><\/h4>\n      <div class=\"txt\" data-l=\"it\">\n        <p>Nel C64 le otto 4164 (64K \u00d7 1 bit) sono comandate dal VIC-II, che genera <b>\/RAS<\/b> e <b>\/CAS<\/b> (piedini 18 e 19). In ogni ciclo di \u03a62 ci sono <b>due accessi<\/b>: con \u03a62 basso legge il VIC-II, con \u03a62 alto la CPU. Quindi \/RAS scende due volte per ciclo, e \/CAS lo segue poco dopo. Il \/CAS che arriva alle RAM passa dalla PLA (segnale CASRAM): quando la CPU legge ROM o I\/O manca. Sulle RAM: \/RAS piedino 4, \/CAS piedino 15, ingresso D piedino 2, uscita Q piedino 14.<\/p>\n      <\/div>\n      <div class=\"txt\" data-l=\"en\">\n        <p>In the C64 the eight 4164s (64K \u00d7 1 bit) are driven by the VIC-II, which makes <b>\/RAS<\/b> and <b>\/CAS<\/b> (pins 18 and 19). Each \u03a62 cycle has <b>two accesses<\/b>: the VIC-II reads while \u03a62 is low, the CPU while it is high. So \/RAS falls twice per cycle and \/CAS follows shortly after. The \/CAS reaching the RAMs goes through the PLA (the CASRAM signal): it is missing when the CPU reads ROM or I\/O. On the RAMs: \/RAS pin 4, \/CAS pin 15, D input pin 2, Q output pin 14.<\/p>\n      <\/div>\n      <div class=\"minis m3\">\n        <figure class=\"mini\"><canvas data-pre=\"ras\" data-k=\"5\"><\/canvas><figcaption><span data-l=\"it\">\/RAS (CH1) e \u03a62 (CH2): due impulsi bassi per ciclo.<\/span><span data-l=\"en\">\/RAS (CH1) and \u03a62 (CH2): two low pulses per cycle.<\/span><\/figcaption><button class=\"b try\" data-pre=\"ras\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"cas\" data-k=\"7\"><\/canvas><figcaption><span data-l=\"it\">\/CAS (CH1) dopo \/RAS (CH2): nei cicli su ROM o I\/O manca.<\/span><span data-l=\"en\">\/CAS (CH1) after \/RAS (CH2): missing on ROM or I\/O cycles.<\/span><\/figcaption><button class=\"b try\" data-pre=\"cas\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"ram_dead\" data-k=\"7\"><\/canvas><figcaption><span data-l=\"it\"><b>RAM morta<\/b>: livello a met\u00e0 quando dovrebbe rispondere lei.<\/span><span data-l=\"en\"><b>Dead RAM<\/b>: an in-between level when it should answer.<\/span><\/figcaption><button class=\"b try\" data-pre=\"ram_dead\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n      <\/div>\n\n      <h4 class=\"h4\">Reset<\/h4>\n      <div class=\"txt\" data-l=\"it\"><p>All'accensione il circuito di reset (nel C64 un timer 556) tiene <b>\/RESET<\/b> basso per una frazione di secondo, finch\u00e9 l'alimentazione \u00e8 stabile, poi lo porta a 5 V e lo lascia l\u00ec. Si misura sul piedino 40 del 6510 con una base dei tempi lenta (100 ms\/div), trigger NORMAL o SINGLE sul fronte di salita, poi spegni e riaccendi. Se resta basso la CPU non parte mai: schermo nero.<\/p><\/div>\n      <div class=\"txt\" data-l=\"en\"><p>At power-on the reset circuit (a 556 timer in the C64) holds <b>\/RESET<\/b> low for a fraction of a second, until the supply is stable, then takes it to 5 V and leaves it there. Measure it on pin 40 of the 6510 with a slow timebase (100 ms\/div), NORMAL or SINGLE trigger on the rising edge, then power-cycle. If it stays low the CPU never starts: black screen.<\/p><\/div>\n      <div class=\"minis m2\">\n        <figure class=\"mini\"><canvas data-pre=\"reset\" data-k=\"1\"><\/canvas><figcaption><span data-l=\"it\"><b>Sano<\/b>: sale pulito dopo l'accensione.<\/span><span data-l=\"en\"><b>Healthy<\/b>: rises cleanly after power-on.<\/span><\/figcaption><button class=\"b try\" data-pre=\"reset\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"reset_stuck\" data-k=\"1\"><\/canvas><figcaption><span data-l=\"it\"><b>Bloccato basso<\/b>: il trigger non scatta mai.<\/span><span data-l=\"en\"><b>Stuck low<\/b>: the trigger never fires.<\/span><\/figcaption><button class=\"b try\" data-pre=\"reset_stuck\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n      <\/div>\n\n      <h4 class=\"h4\"><span data-l=\"it\">Video composito<\/span><span data-l=\"en\">Composite video<\/span><\/h4>\n      <div class=\"txt\" data-l=\"it\"><p>Con il monitor collegato (75 \u03a9 di carico) una riga PAL dura <b>64 \u00b5s<\/b> (il VIC-II 6569 fa 63 cicli, 63,94 \u00b5s). Comincia con l'<b>impulso di sincronismo<\/b> da 0 V, lungo circa 4,7 \u00b5s, poi il livello del nero a 0,3 V con il <b>burst di colore<\/b> a 4,43 MHz, poi l'immagine fino a circa 1 V per il bianco. Trigger sul fronte di discesa del sincronismo, livello a 0,15 V. Senza carico le ampiezze raddoppiano.<\/p><\/div>\n      <div class=\"txt\" data-l=\"en\"><p>With the monitor connected (75 \u03a9 load) a PAL line lasts <b>64 \u00b5s<\/b> (the 6569 VIC-II does 63 cycles, 63.94 \u00b5s). It starts with the <b>sync pulse<\/b> at 0 V, about 4.7 \u00b5s long, then black level at 0.3 V with the 4.43 MHz <b>colour burst<\/b>, then the picture up to about 1 V for white. Trigger on the falling edge of sync, level 0.15 V. Without a load, amplitudes double.<\/p><\/div>\n      <div class=\"minis m3\">\n        <figure class=\"mini\"><canvas data-pre=\"video\" data-k=\"4\"><\/canvas><figcaption><span data-l=\"it\"><b>Riga sana<\/b>: sincronismo, burst, bordo, caratteri, bordo.<\/span><span data-l=\"en\"><b>Healthy line<\/b>: sync, burst, border, characters, border.<\/span><\/figcaption><button class=\"b try\" data-pre=\"video\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"video_zoom\" data-k=\"3\"><\/canvas><figcaption><span data-l=\"it\">Zoom a 1 \u00b5s\/div: sincronismo e burst di colore.<\/span><span data-l=\"en\">Zoomed to 1 \u00b5s\/div: sync and colour burst.<\/span><\/figcaption><button class=\"b try\" data-pre=\"video_zoom\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"video_black\" data-k=\"4\"><\/canvas><figcaption><span data-l=\"it\"><b>Solo sincronismi<\/b>: il VIC-II va ma nessuno lo programma.<\/span><span data-l=\"en\"><b>Sync only<\/b>: the VIC-II runs but nobody programs it.<\/span><\/figcaption><button class=\"b try\" data-pre=\"video_black\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n      <\/div>\n\n      <h4 class=\"h4\"><span data-l=\"it\">Audio del SID<\/span><span data-l=\"en\">SID audio<\/span><\/h4>\n      <div class=\"txt\" data-l=\"it\"><p>L'uscita audio del SID (piedino 27) porta il suono sopra una tensione continua di alcuni volt. In DC a 2 V\/div vedi una riga spessa in alto; passa in <b>AC<\/b> a 0,2 V\/div e appare la forma d'onda. Un SID muto mostra solo la continua: confronta con il segnale all'uscita audio della presa A\/V per capire se il problema \u00e8 nel SID o dopo.<\/p><\/div>\n      <div class=\"txt\" data-l=\"en\"><p>The SID audio output (pin 27) carries the sound on top of a few volts of DC. In DC at 2 V\/div you see a thick line near the top; switch to <b>AC<\/b> at 0.2 V\/div and the waveform appears. A silent SID shows only DC: compare with the audio pin of the A\/V socket to tell whether the problem is in the SID or after it.<\/p><\/div>\n      <div class=\"minis m3\">\n        <figure class=\"mini\"><canvas data-pre=\"sid\" data-k=\"3\"><\/canvas><figcaption><span data-l=\"it\">In <b>DC<\/b>: suono schiacciato sopra 5 V.<\/span><span data-l=\"en\">In <b>DC<\/b>: sound squashed on top of 5 V.<\/span><\/figcaption><button class=\"b try\" data-pre=\"sid\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"sid_ac\" data-k=\"3\"><\/canvas><figcaption><span data-l=\"it\">In <b>AC<\/b>: dente di sega pi\u00f9 impulso.<\/span><span data-l=\"en\">In <b>AC<\/b>: sawtooth plus pulse.<\/span><\/figcaption><button class=\"b try\" data-pre=\"sid_ac\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n        <figure class=\"mini\"><canvas data-pre=\"sid_dead\" data-k=\"3\"><\/canvas><figcaption><span data-l=\"it\"><b>SID muto<\/b>: niente oltre al rumore.<\/span><span data-l=\"en\"><b>Silent SID<\/b>: nothing but noise.<\/span><\/figcaption><button class=\"b try\" data-pre=\"sid_dead\">\u25b6 <span data-l=\"it\">Prova<\/span><span data-l=\"en\">Try it<\/span><\/button><\/figure>\n      <\/div>\n    <\/section>\n\n    <!-- ===================================================== 5 schermo nero -->\n    <section id=\"os-nero\">\n      <span class=\"kicker\">05<\/span>\n      <h3 class=\"h3\"><span data-l=\"it\">Caso pratico: C64 a schermo nero<\/span><span data-l=\"en\">Case study: C64 with a black screen<\/span><\/h3>\n      <div class=\"txt\" data-l=\"it\">\n        <p>Uno schermo nero vuol dire solo \"la CPU non arriva a disegnare la schermata di avvio\". Con l'oscilloscopio si va in ordine, dalla base verso l'alto: ogni misura esclude un blocco intero.<\/p>\n        <ol>\n          <li><b>Alimentazione<\/b>. Prima con il tester: +5 V tra 4,75 e 5,25 V, 9 V alternata presente. Poi con l'oscilloscopio in AC sul +5 V: qualche decina di mV di ripple \u00e8 normale, centinaia di mV o picchi no. Vedi anche la guida <a href=\"\/alimentatori\/\">Alimentatori<\/a>.<\/li>\n          <li><b>\/RESET<\/b> sul piedino 40 del 6510: deve salire a 5 V poco dopo l'accensione e restarci. Se resta basso, guarda il circuito del 556 e i chip sulla linea.<\/li>\n          <li><b>Clock<\/b>: \u03a62 sul piedino 39 del 6510 deve essere una quadra pulita a 0,985 MHz (PAL), \u03a60 sul piedino 1 uguale. Se manca, risali: \u03a60 esce dal VIC-II (piedino 17), che riceve il dot clock (piedino 22) dal generatore di clock (8701 nelle schede pi\u00f9 recenti, oscillatore discreto nelle prime).<\/li>\n          <li><b>Video<\/b>: all'uscita composita ci sono i sincronismi ogni 64 \u00b5s? Se s\u00ec il VIC-II vive; se l'immagine \u00e8 nera, il VIC-II non \u00e8 stato programmato e il problema \u00e8 la CPU o quello che legge.<\/li>\n          <li><b>Bus indirizzi e dati<\/b>: trigger su \u03a62 (CH2), sonda sulle linee una alla volta (D0\u2013D7 sui piedini 37\u201330 del 6510, A0\u2013A15 sui piedini 7\u201320, 22 e 23). Cerca linee ferme, a livello intermedio o con un aspetto diverso dalle sorelle. Un bus fermo del tutto con \/RESET e \u03a62 buoni fa pensare a CPU, ROM o PLA.<\/li>\n          <li><b>RAM<\/b>: \/RAS e \/CAS arrivano a tutte e otto? Poi l'uscita Q (piedino 14) di ognuna: quella con il livello intermedio o ferma \u00e8 la candidata. Le RAM e la PLA sono tra i guasti pi\u00f9 frequenti del C64.<\/li>\n        <\/ol>\n        <p>Una cartuccia di diagnostica (Dead Test) aiuta molto, ma funziona solo se reset, clock e bus sono almeno vivi: \u00e8 proprio quello che verifichi con questi passi.<\/p>\n      <\/div>\n      <div class=\"txt\" data-l=\"en\">\n        <p>A black screen only means \"the CPU never gets to draw the start-up screen\". With the scope you go in order, from the bottom up: every measurement rules out a whole block.<\/p>\n        <ol>\n          <li><b>Power<\/b>. Multimeter first: +5 V between 4.75 and 5.25 V, 9 V AC present. Then the scope in AC on +5 V: a few tens of mV of ripple are normal, hundreds of mV or spikes are not. See also the <a href=\"\/en\/alimentatori\/\">Power supplies<\/a> guide.<\/li>\n          <li><b>\/RESET<\/b> on pin 40 of the 6510: it must rise to 5 V shortly after power-on and stay there. If it stays low, look at the 556 circuit and the chips on that line.<\/li>\n          <li><b>Clock<\/b>: \u03a62 on pin 39 of the 6510 must be a clean 0.985 MHz square (PAL), \u03a60 on pin 1 the same. If it's missing, work backwards: \u03a60 comes from the VIC-II (pin 17), which gets the dot clock (pin 22) from the clock generator (an 8701 on later boards, a discrete oscillator on early ones).<\/li>\n          <li><b>Video<\/b>: are there sync pulses every 64 \u00b5s at the composite output? If so the VIC-II is alive; if the picture is black, nobody programmed the VIC-II and the problem is the CPU or whatever it reads.<\/li>\n          <li><b>Address and data bus<\/b>: trigger on \u03a62 (CH2), probe the lines one at a time (D0\u2013D7 on 6510 pins 37\u201330, A0\u2013A15 on pins 7\u201320, 22 and 23). Look for lines that are frozen, at an in-between level or different from their siblings. A completely frozen bus with good \/RESET and \u03a62 points to the CPU, ROMs or PLA.<\/li>\n          <li><b>RAM<\/b>: do \/RAS and \/CAS reach all eight? Then the Q output (pin 14) of each: the one with an in-between or frozen level is the suspect. RAMs and the PLA are among the most common C64 failures.<\/li>\n        <\/ol>\n        <p>A diagnostic cartridge (Dead Test) helps a lot, but only works if reset, clock and bus are at least alive: exactly what these steps check.<\/p>\n      <\/div>\n      <div class=\"btns\">\n        <button class=\"b\" data-pre=\"clk_ok\">\u25b6 \u03a62<\/button>\n        <button class=\"b\" data-pre=\"reset\">\u25b6 \/RESET<\/button>\n        <button class=\"b\" data-pre=\"video_black\">\u25b6 <span data-l=\"it\">Video nero<\/span><span data-l=\"en\">Black video<\/span><\/button>\n        <button class=\"b\" data-pre=\"ram_dead\">\u25b6 <span data-l=\"it\">RAM morta<\/span><span data-l=\"en\">Dead RAM<\/span><\/button>\n        <button class=\"b\" data-pre=\"ac\">\u25b6 <span data-l=\"it\">Ripple +5 V<\/span><span data-l=\"en\">+5 V ripple<\/span><\/button>\n      <\/div>\n    <\/section>\n\n    <!-- ===================================================== 6 sicurezza -->\n    <section id=\"os-sic\">\n      <span class=\"kicker\">06<\/span>\n      <h3 class=\"h3\"><span data-l=\"it\">Sicurezza: la massa della sonda \u00e8 la terra<\/span><span data-l=\"en\">Safety: the probe ground is earth<\/span><\/h3>\n      <div class=\"alert red\">\n        <span class=\"ico\">&#9889;<\/span>\n        <div data-l=\"it\">\n          <p><b>Il coccodrillo di massa della sonda \u00e8 collegato, attraverso l'oscilloscopio, al filo di terra della presa.<\/b> Se lo agganci a un punto che non \u00e8 a potenziale di terra crei un corto circuito attraverso la sonda: scintille, piste bruciate, sonda e oscilloscopio danneggiati, e rischio per te.<\/p>\n          <p><b>Mai<\/b> collegare la massa della sonda al <b>primario di un alimentatore switching<\/b> (la parte dopo il ponte raddrizzatore e il condensatore grosso \u00e8 a tensione di rete raddrizzata, oltre 300 V) n\u00e9 al telaio di un <b>monitor a tubo o di un televisore<\/b> che non ha un trasformatore di isolamento: molti monitor arcade e TV hanno il telaio \"caldo\".<\/p>\n        <\/div>\n        <div data-l=\"en\">\n          <p><b>The probe's ground clip is connected, through the scope, to the mains earth wire.<\/b> Clip it to a point that isn't at earth potential and you create a short circuit through the probe: sparks, burnt traces, a damaged probe and scope, and danger to you.<\/p>\n          <p><b>Never<\/b> connect the probe ground to the <b>primary side of a switching supply<\/b> (everything after the bridge rectifier and the big capacitor sits at rectified mains, over 300 V) or to the chassis of a <b>CRT monitor or TV<\/b> without an isolation transformer: many arcade monitors and TVs have a \"hot\" chassis.<\/p>\n        <\/div>\n      <\/div>\n      <div class=\"txt\" data-l=\"it\">\n        <ul>\n          <li>Per misurare su circuiti collegati alla rete usa un <b>trasformatore di isolamento sull'apparecchio in prova<\/b> oppure una <b>sonda differenziale<\/b>.<\/li>\n          <li><b>Mai togliere la terra all'oscilloscopio<\/b> (adattatori senza terra, spinotto tagliato): l'involucro e tutte le masse delle sonde potrebbero andare in tensione.<\/li>\n          <li>Le masse dei due canali sono collegate tra loro: entrambe vanno sullo stesso punto, mai su due punti diversi.<\/li>\n          <li>Controlla la tensione massima della sonda e dell'ingresso (scritta sulla sonda e sul pannello): una sonda 10x comune regge qualche centinaio di volt, una 1x molto meno.<\/li>\n          <li>Non misurare l'alta tensione del tubo (anodo, focus): servono sonde apposite. Scarica i condensatori grossi prima di toccare.<\/li>\n          <li>Su computer e schede arcade alimentati a bassa tensione (C64, Amiga, JAMMA) la massa del circuito \u00e8 gi\u00e0 a terra o flottante: l\u00ec il coccodrillo sulla massa della scheda \u00e8 sicuro.<\/li>\n        <\/ul>\n      <\/div>\n      <div class=\"txt\" data-l=\"en\">\n        <ul>\n          <li>To measure on mains-connected circuits use an <b>isolation transformer on the device under test<\/b> or a <b>differential probe<\/b>.<\/li>\n          <li><b>Never remove the scope's earth<\/b> (cheater plugs, cut pins): the case and every probe ground could become live.<\/li>\n          <li>The two channels' grounds are tied together: both go to the same point, never to two different ones.<\/li>\n          <li>Check the probe and input voltage ratings (printed on the probe and on the panel): a common 10x probe handles a few hundred volts, a 1x much less.<\/li>\n          <li>Don't measure CRT high voltage (anode, focus): it needs dedicated probes. Discharge big capacitors before touching.<\/li>\n          <li>On low-voltage computers and arcade boards (C64, Amiga, JAMMA) the circuit ground is already earthed or floating: there the clip on the board ground is safe.<\/li>\n        <\/ul>\n      <\/div>\n    <\/section>\n\n    <div class=\"foot\">\n      <div data-l=\"it\"><p>Frequenze verificate: C64 PAL con quarzo colore da 17,734475 MHz, \u03a62 = quarzo \/ 18 = 0,985248 MHz e dot clock = 8 \u00d7 \u03a62 (C64 Wiki, articolo sul VIC-II di Christian Bauer); Amiga PAL 28,37516 MHz \/ 4 = 7,09379 MHz, NTSC 7,15909 MHz (Amiga Hardware Reference Manual). Piedinature di 6510, 6569, 6581, 8701 e 4164 come nella pagina <a href=\"\/pinout-chip\/\">Pinout chip<\/a>. Le forme d'onda del simulatore sono modelli semplificati per imparare: confronta sempre con lo schema della tua scheda. Vedi anche <a href=\"\/alimentatori\/\">Alimentatori<\/a> e <a href=\"\/connettori-video\/\">Connettori video<\/a>.<\/p><\/div>\n      <div data-l=\"en\"><p>Frequencies checked: PAL C64 with a 17.734475 MHz colour crystal, \u03a62 = crystal \/ 18 = 0.985248 MHz and dot clock = 8 \u00d7 \u03a62 (C64 Wiki, Christian Bauer's VIC-II article); PAL Amiga 28.37516 MHz \/ 4 = 7.09379 MHz, NTSC 7.15909 MHz (Amiga Hardware Reference Manual). Pinouts of the 6510, 6569, 6581, 8701 and 4164 as on the <a href=\"\/en\/pinout-chip\/\">Chip pinouts<\/a> page. The simulator waveforms are simplified models for learning: always compare with your board's schematic. See also <a href=\"\/en\/alimentatori\/\">Power supplies<\/a> and <a href=\"\/en\/connettori-video\/\">Video connectors<\/a>.<\/p><\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n\/* RetroFixer \u00b7 Oscilloscopio \u00b7 simulatore a 2 canali *\/\n(function () {\n'use strict';\nvar root = document.getElementById('rfos');\nif (!root) return;\nvar EN = \/^en\/i.test(document.documentElement.lang || '');\nif (EN) root.classList.add('en');\nfunction L(it, en) { return EN ? en : it; }\nfunction $(id) { return document.getElementById(id); }\nfunction qa(sel, el) { return Array.prototype.slice.call((el || root).querySelectorAll(sel)); }\n\n\/* ---------- numeri ---------- *\/\nfunction fnum(x, d) { return x.toLocaleString(EN ? 'en-GB' : 'it-IT', { minimumFractionDigits: d, maximumFractionDigits: d, useGrouping: false }); }\nfunction trimz(s) { return \/[.,]\/.test(s) ? s.replace(\/0+$\/, '').replace(\/[.,]$\/, '') : s; }\nvar PFX = [[1e6, 'M'], [1e3, 'k'], [1, ''], [1e-3, 'm'], [1e-6, '\u00b5'], [1e-9, 'n']];\nfunction eng(x, u) {\n  if (!isFinite(x)) return '\u2014';\n  if (Math.abs(x) < 1e-12) return '0 ' + u;\n  var a = Math.abs(x), p = PFX[PFX.length - 1];\n  for (var i = 0; i < PFX.length; i++) if (a >= PFX[ i][0] * 0.9995) { p = PFX[ i]; break; }\n  var v = x \/ p[0], av = Math.abs(v);\n  var d = av >= 99.95 ? 0 : av >= 9.995 ? 1 : 2;\n  return trimz(fnum(v, d)).replace('-', '\u2212') + ' ' + p[1] + u;\n}\n\n\/* ---------- casuale ---------- *\/\nfunction mulberry(s) {\n  return function () {\n    s = s + 0x6D2B79F5 | 0;\n    var t = Math.imul(s ^ s >>> 15, 1 | s);\n    t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t;\n    return ((t ^ t >>> 14) >>> 0) \/ 4294967296;\n  };\n}\nvar rnd = Math.random;\nfunction hh(n) { var x = Math.sin(n * 12.9898 + 78.233) * 43758.5453; return x - Math.floor(x); }\nfunction md(t, P) { var p = t % P; return p < 0 ? p + P : p; }\nfunction ss(x) { return x <= 0 ? 0 : x >= 1 ? 1 : x * x * (3 - 2 * x); }\n\n\/* ---------- tempi veri (PAL) ----------\n   quarzo colore 17,734475 MHz \/ 18 = \u03a62 0,985248 MHz; dot clock = 8 \u00d7 \u03a62 = 7,881984 MHz\n   riga PAL del VIC-II 6569: 63 cicli = 63,94 \u00b5s; Amiga PAL 28,37516 MHz \/ 4 = 7,09379 MHz *\/\nvar FCOL = 17734475, PHI = FCOL \/ 18, TP = 1 \/ PHI, TH = TP \/ 2, TDOT = TP \/ 8;\nvar TLINE = 63 * TP, FSC = 4433618.75, TAMI = 4 \/ 28375160;\nvar EV = { tOn: -1e9 };\n\nfunction sq(p, w, lo, hi, tr) {\n  var u = p < w ? ss(p \/ tr) : 1 - ss((p - w) \/ tr);\n  return lo + (hi - lo) * u;\n}\nfunction rcsq(p, P, lo, hi, tau) {\n  var half = P \/ 2, a = Math.exp(-half \/ tau), v0 = a \/ (1 + a), u;\n  if (p < half) u = 1 - (1 - v0) * Math.exp(-p \/ tau);\n  else u = (1 - (1 - v0) * a) * Math.exp(-(p - half) \/ tau);\n  return lo + (hi - lo) * u;\n}\n\n\/* bus dati: ogni mezzo ciclo di \u03a62 (prima met\u00e0 alta = CPU, seconda bassa = VIC-II) porta un nuovo bit *\/\nfunction bitv(k) { return hh(k * 1.731 + 0.5) > 0.5; }\nfunction tcK(k) { return 9e-8 + 7e-8 * hh(k * 3.17); }\nfunction lv(b) { return b ? 3.9 : 0.25; }\nfunction cpuHalf(k) { return md(k, 2) < 0.5; }\nfunction isFloat(k, m) { return m === 'f' || (m === 'r' && (!cpuHalf(k) || hh(k * 2.21) < 0.25)); }\nfunction fbase(k) { return 1.3 + 0.55 * hh(k * 2.71); }\nfunction conflict(k) { return cpuHalf(k) && hh(k * 7.73) < 0.45; }\nfunction drv(k, m) { return m === 'c' && conflict(k) ? 2.05 + 0.3 * hh(k * 4.4) : lv(bitv(k)); }\nfunction endv(k, m) { return isFloat(k, m) ? fbase(k) : drv(k, m); }\nfunction bus(t, m) {\n  var k = Math.floor(t \/ TH), p = t - k * TH, c = tcK(k), sp = p > c ? Math.exp(-(p - c) \/ 2e-8) : 0;\n  if (m === '0') return 0.18 + 0.22 * hh(k * 1.3) * sp;\n  if (m === '1') return 4.35 - 0.3 * hh(k * 1.3) * sp;\n  var pv = endv(k - 1, m);\n  if (isFloat(k, m)) {\n    var b = fbase(k);\n    return b + (pv - b) * Math.exp(-p \/ 1.2e-7) + (hh(k * 9.1) - 0.5) * 0.7 * sp;\n  }\n  var nv = drv(k, m);\n  return pv + (nv - pv) * ss((p - c) \/ 1.4e-8);\n}\n\n\/* glitch su \/NMI: un impulso di circa 50 ns ogni tanto *\/\nvar GSL = 0.6;\nfunction gtime(s) { return hh(s * 9.13 + 1) < 0.75 ? s * GSL + 0.05 + 0.5 * hh(s * 3.37) : null; }\nfunction glitch(t) {\n  var s = Math.floor(t \/ GSL), g = gtime(s), v = 4.7 + 0.06 * Math.exp(-md(t, TH) \/ 1.5e-8);\n  if (g !== null) { var d = t - g; if (d > -2e-8 && d < 1e-7) v -= 4.15 * (ss(d \/ 8e-9) - ss((d - 4.5e-8) \/ 1.2e-8)); }\n  return v;\n}\nfunction glRare(t0, t1) {\n  var out = [];\n  for (var s = Math.floor(t0 \/ GSL); s <= Math.floor(t1 \/ GSL); s++) { var g = gtime(s); if (g !== null && g > t0 && g <= t1) out.push(g); }\n  return out;\n}\n\n\/* video composito su 75 \u03a9: sincronismo 0 V, nero 0,3 V, bianco 1 V *\/\nfunction video(t, m) {\n  if (m === 'n') return 0.012 * Math.sin(t * 3.1e5);\n  var n = Math.floor(t \/ TLINE), p = t - n * TLINE, v = 0.3;\n  v -= 0.3 * (ss(p \/ 1.5e-7) - ss((p - 4.7e-6) \/ 1.5e-7));\n  if (p > 5.6e-6 && p < 7.9e-6) v += 0.14 * Math.sin(2 * Math.PI * FSC * t) * ss((p - 5.6e-6) \/ 3e-7) * (1 - ss((p - 7.6e-6) \/ 3e-7));\n  if (m === 'b' || p < 1.05e-5 || p > 6.2e-5) return v;\n  var row = Math.floor(n \/ 8), inner = p > 1.7e-5 && p < 5.7e-5 && hh(row * 0.917) > 0.18, luma = 0.66, ph = 0.9;\n  if (inner) {\n    luma = 0.45; ph = 2.4;\n    var q = (p - 1.7e-5) \/ 1e-6, ci = Math.floor(q), px = Math.floor((q - ci) * 8);\n    if (hh(ci * 0.37 + row * 0.0131) > 0.55 && hh(ci * 1.9 + px * 0.77 + md(n, 8) * 3.1) > 0.45) luma = 0.68;\n  }\n  return luma + 0.07 * Math.sin(2 * Math.PI * FSC * t + ph);\n}\n\n\/* \/RESET: spegni e riaccendi (EV.tOn); resta basso per una frazione di secondo, poi sale *\/\nfunction reset(t) {\n  var d = t - EV.tOn;\n  if (d < 0) return 4.8;\n  if (d < 0.25) return 4.8 * Math.exp(-d \/ 0.03);\n  d -= 0.25;\n  var vcc = 4.8 * (1 - Math.exp(-d \/ 0.008));\n  return d < 0.18 ? Math.min(0.25, vcc) : vcc;\n}\nfunction rsRare(t0, t1) { return [EV.tOn, EV.tOn + 0.43].filter(function (x) { return x > t0 && x <= t1; }); }\n\n\/* ---------- elenco dei segnali ---------- *\/\nvar SIG = {}, GROUPS = [];\nfunction grp(it, en) { GROUPS.push({ n: L(it, en), ids: [] }); }\nfunction def(id, it, en, v, step, x) {\n  var s = { id: id, n: L(it, en), v: v, step: step };\n  for (var k in x || {}) s[ k] = x[ k];\n  SIG[ id] = s; GROUPS[GROUPS.length - 1].ids.push(id);\n}\ngrp('Calibrazione e alimentazione', 'Calibration and power');\ndef('cal', 'Calibratore della sonda (1 kHz)', 'Probe calibrator (1 kHz)', function (t) { return sq(md(t, 1e-3), 5e-4, 0, 3, 5e-9); }, 4e-6, { dc: 1.5 });\ndef('p5', '+5 V del C64 (con ripple)', 'C64 +5 V rail (with ripple)', function (t) { return 5.02 + 0.025 * (Math.abs(Math.sin(2 * Math.PI * 50 * t)) - 0.637) + 0.004 * Math.sin(t * 2.1e6); }, 1e-4, { dc: 5.02 });\ngrp('Clock', 'Clocks');\ndef('phi2', 'C64 \u03a62 sano (0,985 MHz)', 'C64 \u03a62, healthy (0.985 MHz)', function (t) { return sq(md(t, TP), TH, 0.2, 4.6, 9e-9); }, 2.5e-8);\ndef('phi2r', 'C64 \u03a62 arrotondato', 'C64 \u03a62, rounded', function (t) { return rcsq(md(t, TP), TP, 0.4, 4.1, 1.1e-7); }, 2.5e-8);\ndef('phi2l', 'C64 \u03a62 con ampiezza bassa', 'C64 \u03a62, low amplitude', function (t) { return rcsq(md(t, TP), TP, 0.25, 1.65, 7e-8); }, 2.5e-8);\ndef('phi2x', 'C64 \u03a62 assente', 'C64 \u03a62, missing', function (t) { return 0.03 + 0.01 * Math.sin(t * 4.1e5); }, 2.5e-8);\ndef('dot', 'C64 dot clock (7,88 MHz)', 'C64 dot clock (7.88 MHz)', function (t) { return sq(md(t, TDOT), TDOT \/ 2, 0.35, 4.3, 5e-9); }, 5e-9);\ndef('ama', 'Amiga clock CPU (7,09 MHz)', 'Amiga CPU clock (7.09 MHz)', function (t) { return sq(md(t, TAMI), TAMI \/ 2, 0.3, 4.5, 5e-9); }, 5e-9);\ngrp('DRAM e bus dati', 'DRAM and data bus');\ndef('ras', 'C64 \/RAS', 'C64 \/RAS', function (t) { var p = md(t, TH); return 4.5 - 4.3 * (ss((p - 1.6e-7) \/ 8e-9) - ss((p - 4.75e-7) \/ 8e-9)); }, 1.5e-8);\ndef('cas', 'C64 \/CAS (CASRAM)', 'C64 \/CAS (CASRAM)', function (t) {\n  var k = Math.floor(t \/ TH), p = t - k * TH;\n  if (cpuHalf(k) && hh(k * 5.31) < 0.3) return 4.5;\n  return 4.5 - 4.3 * (ss((p - 2.7e-7) \/ 8e-9) - ss((p - 4.8e-7) \/ 8e-9));\n}, 1.5e-8);\ndef('db', 'Linea dati sana', 'Data line, healthy', function (t) { return bus(t, 'ok'); }, 1.5e-8);\ndef('dbf', 'Linea dati flottante', 'Data line, floating', function (t) { return bus(t, 'f'); }, 1.5e-8);\ndef('dbc', 'Linea dati in conflitto', 'Data line, bus contention', function (t) { return bus(t, 'c'); }, 1.5e-8);\ndef('db0', 'Linea dati bloccata a 0', 'Data line stuck at 0', function (t) { return bus(t, '0'); }, 1.5e-8);\ndef('db1', 'Linea dati bloccata a 1', 'Data line stuck at 1', function (t) { return bus(t, '1'); }, 1.5e-8);\ndef('dbr', 'Linea dati con una RAM morta', 'Data line with a dead RAM', function (t) { return bus(t, 'r'); }, 1.5e-8);\ngrp('Video e audio', 'Video and audio');\ndef('vid', 'Video composito: riga sana', 'Composite video: healthy line', function (t) { return video(t, 'ok'); }, 4e-8);\ndef('vidb', 'Video: solo sincronismi (schermo nero)', 'Video: sync only (black screen)', function (t) { return video(t, 'b'); }, 4e-8);\ndef('vidn', 'Video: nessun segnale', 'Video: no signal', function (t) { return video(t, 'n'); }, 4e-8, { dc: 0 });\ndef('sid', 'Audio del SID (piedino 27)', 'SID audio (pin 27)', function (t) { return 5 + 0.55 * (2 * md(t * 220, 1) - 1) + 0.3 * (md(t * 330, 1) < 0.3 ? 1 : -0.43); }, 1e-5, { dc: 5 });\ndef('sidx', 'Audio del SID muto', 'SID audio, silent', function (t) { return 5 + 0.004 * Math.sin(t * 7.3e5); }, 1e-5, { dc: 5 });\ngrp('Reset ed eventi rari', 'Reset and rare events');\ndef('rst', '\/RESET all\\'accensione', '\/RESET at power-on', reset, 1e-4, { dc: 4.8, rare: rsRare, rw: 0.06 });\ndef('rstx', '\/RESET bloccato basso', '\/RESET stuck low', function (t) { return 0.35 + 0.01 * Math.sin(t * 2e5); }, 1e-4, { dc: 0.35 });\ndef('gl', '\/NMI con un glitch ogni tanto', '\/NMI with an occasional glitch', glitch, 2e-8, { dc: 4.7, rare: glRare, rw: 4e-7 });\ndef('bu', 'Raffiche di impulsi (holdoff)', 'Pulse bursts (holdoff)', function (t) {\n  var p = md(t, 1e-5);\n  return p >= 5e-6 ? 0.2 : sq(md(p, 1e-6), 5e-7, 0.2, 4.6, 1e-8);\n}, 2e-8);\n\nvar MEANS = {};\nfunction meanOf(id) {\n  if (id in MEANS) return MEANS[ id];\n  var s = SIG[ id], m = s.dc;\n  if (m === undefined) { var a = 0, N = 4000; for (var i = 0; i < N; i++) a += s.v(37 + i * 5.0137e-8); m = a \/ N; }\n  return (MEANS[ id] = m);\n}\n\n\/* ---------- configurazione ---------- *\/\nvar VD = [0.002, 0.005, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10];\nvar TD = [5e-9, 1e-8, 2e-8, 5e-8, 1e-7, 2e-7, 5e-7, 1e-6, 2e-6, 5e-6, 1e-5, 2e-5, 5e-5, 1e-4, 2e-4, 5e-4, 1e-3, 2e-3, 5e-3, 1e-2, 2e-2, 5e-2, 0.1, 0.2];\nfunction chd(o) {\n  var c = { on: true, sig: 'phi2', vdiv: 1, pos: 0, cpl: 'dc', probe: 10, menu: 10, comp: 0, gnd: 'short', hid: false };\n  for (var k in o || {}) c[ k] = o[ k];\n  return c;\n}\nfunction mk(o) {\n  var tr = { src: 0, slope: 1, level: 1.5, mode: 'auto', hold: 0 };\n  for (var k in o.tr || {}) tr[ k] = o.tr[ k];\n  return { ch: [chd(o.c1), chd(o.c2 || { on: false, pos: -2 })], tdiv: o.tdiv || 1e-6, hpos: o.hpos || 0, trig: tr };\n}\nfunction clone(c) { return JSON.parse(JSON.stringify(c)); }\n\nvar CLK = { c1: { sig: 'phi2', vdiv: 1, pos: -2.4 }, tdiv: 5e-7, tr: { level: 2.3 } };\nfunction bus2(sig, x) {\n  var o = { c1: { sig: sig, vdiv: 2, pos: 0.6 }, c2: { sig: 'phi2', vdiv: 2, pos: -3.4 }, tdiv: 2e-7, tr: { src: 1, level: 2.3 } };\n  for (var k in x || {}) o[ k] = x[ k];\n  return o;\n}\nfunction ext(base, add) {\n  var o = clone(base);\n  for (var k in add) {\n    if (add[ k] && typeof add[ k] === 'object' && o[ k]) { for (var j in add[ k]) o[ k][ j] = add[ k][ j]; }\n    else o[ k] = add[ k];\n  }\n  return o;\n}\nvar CALB = { c1: { sig: 'cal', vdiv: 1, pos: -1.5 }, tdiv: 2e-4, tr: { level: 1.5 } };\nvar DOTB = { c1: { sig: 'dot', vdiv: 1, pos: -2.2 }, tdiv: 2e-8, tr: { level: 2.3 } };\nvar PRE = {\n  start: ext(CALB, { c1: { comp: 0.3 } }),\n  comp_under: ext(CALB, { c1: { comp: -0.3 } }),\n  comp_ok: CALB,\n  comp_over: ext(CALB, { c1: { comp: 0.3 } }),\n  gnd_short: DOTB,\n  gnd_long: ext(DOTB, { c1: { gnd: 'long' } }),\n  probe1x: ext(DOTB, { c1: { probe: 1, menu: 1 } }),\n  mismatch: ext(CLK, { c1: { menu: 1 }, tr: { level: 0.23 } }),\n  dc: { c1: { sig: 'p5', vdiv: 1, pos: -3 }, tdiv: 5e-3, tr: { level: 5 } },\n  ac: { c1: { sig: 'p5', vdiv: 0.01, cpl: 'ac', pos: 0 }, tdiv: 5e-3, tr: { level: 0 } },\n  trig_off: ext(CLK, { tr: { level: 6 } }),\n  trig_ok: CLK,\n  trig_fall: ext(CLK, { tr: { slope: -1 } }),\n  single: { c1: { sig: 'gl', vdiv: 2, pos: -2.5 }, tdiv: 5e-8, tr: { slope: -1, level: 2.5, mode: 'single' } },\n  hold_off: { c1: { sig: 'bu', vdiv: 2, pos: -1.2 }, tdiv: 1e-6, tr: { level: 2.3 } },\n  hold_on: { c1: { sig: 'bu', vdiv: 2, pos: -1.2 }, tdiv: 1e-6, tr: { level: 2.3, hold: 7e-6 } },\n  bus_self: bus2('db', { tr: { src: 0, level: 2 } }),\n  bus_ok: bus2('db'),\n  clk_ok: CLK,\n  clk_round: ext(CLK, { c1: { sig: 'phi2r' } }),\n  clk_low: ext(CLK, { c1: { sig: 'phi2l' }, tr: { level: 0.9 } }),\n  clk_dead: ext(CLK, { c1: { sig: 'phi2x' }, tr: { level: 0.9 } }),\n  dot2: { c1: { sig: 'dot', vdiv: 2, pos: 0.6 }, c2: { sig: 'phi2', vdiv: 2, pos: -3.4 }, tdiv: 2e-7, tr: { src: 1, level: 2.3 } },\n  amiga: { c1: { sig: 'ama', vdiv: 1, pos: -2.2 }, tdiv: 5e-8, tr: { level: 2.3 } },\n  bus_float: bus2('dbf'),\n  bus_conf: bus2('dbc'),\n  bus_0: bus2('db0'),\n  bus_1: bus2('db1'),\n  ras: bus2('ras'),\n  cas: { c1: { sig: 'cas', vdiv: 2, pos: 0.6 }, c2: { sig: 'ras', vdiv: 2, pos: -3.4 }, tdiv: 2e-7, tr: { src: 1, slope: -1, level: 2.3 } },\n  ram_dead: bus2('dbr'),\n  reset: { c1: { sig: 'rst', vdiv: 2, pos: -3 }, tdiv: 0.1, tr: { level: 2.5, mode: 'norm' } },\n  reset_stuck: { c1: { sig: 'rstx', vdiv: 2, pos: -3 }, tdiv: 0.1, tr: { level: 2.5, mode: 'norm' } },\n  video: { c1: { sig: 'vid', vdiv: 0.2, pos: -2.5 }, tdiv: 1e-5, tr: { slope: -1, level: 0.15 } },\n  video_zoom: { c1: { sig: 'vid', vdiv: 0.1, pos: -3 }, tdiv: 1e-6, hpos: -3.5, tr: { slope: -1, level: 0.15 } },\n  video_black: { c1: { sig: 'vidb', vdiv: 0.2, pos: -2.5 }, tdiv: 1e-5, tr: { slope: -1, level: 0.15 } },\n  video_none: { c1: { sig: 'vidn', vdiv: 0.2, pos: -2.5 }, tdiv: 1e-5, tr: { slope: -1, level: 0.15 } },\n  sid: { c1: { sig: 'sid', vdiv: 2, pos: -3.5 }, tdiv: 2e-3, tr: { level: 5 } },\n  sid_ac: { c1: { sig: 'sid', vdiv: 0.2, cpl: 'ac', pos: 0 }, tdiv: 2e-3, tr: { level: 0 } },\n  sid_dead: { c1: { sig: 'sidx', vdiv: 0.2, cpl: 'ac', pos: 0 }, tdiv: 2e-3, tr: { level: 0 } }\n};\n\n\/* ---------- acquisizione ---------- *\/\nfunction rawv(c, s, m, t) { return (s.v(t) - (c.cpl === 'ac' ? m : 0)) * c.menu \/ c.probe; }\nfunction cross(c, from, n, lvl, slope, step) {\n  if (c.cpl === 'gnd') return null;\n  var s = SIG[c.sig], m = meanOf(c.sig), a = rawv(c, s, m, from), b, t;\n  for (var i = 1; i <= n; i++) {\n    t = from + i * step; b = rawv(c, s, m, t);\n    if (slope > 0 ? (a < lvl && b >= lvl) : (a > lvl && b <= lvl)) {\n      var lo = t - step, hi = t;\n      for (var j = 0; j < 16; j++) {\n        var mid = (lo + hi) \/ 2, vm = rawv(c, s, m, mid);\n        if (slope > 0 ? vm >= lvl : vm <= lvl) hi = mid; else lo = mid;\n      }\n      return hi;\n    }\n    a = b;\n  }\n  return null;\n}\nfunction findTrig(cfg, ts) {\n  var tr = cfg.trig, c = cfg.ch[tr.src], st = SIG[c.sig].step, H = tr.hold, N = 5000;\n  if (!(H > 0)) return cross(c, ts, N, tr.level, tr.slope, st);\n  var a = ts - Math.min(25 * H, 2), t = null;\n  for (var it = 0; it < 60; it++) {\n    t = cross(c, a, N, tr.level, tr.slope, st);\n    if (t === null || t >= ts) return t;\n    a = t + H;\n  }\n  return t;\n}\nfunction rareTrig(cfg, t0, t1) {\n  var tr = cfg.trig, c = cfg.ch[tr.src], s = SIG[c.sig];\n  if (!s.rare) return null;\n  var ev = s.rare(t0, t1);\n  for (var i = 0; i < ev.length; i++) {\n    var t = cross(c, ev[ i] - s.rw \/ 4, 600, tr.level, tr.slope, s.rw \/ 600);\n    if (t !== null) return t;\n  }\n  return null;\n}\nvar WR = 2 * Math.PI * 95e6, ZR = 0.12, T1X = 1 \/ (2 * Math.PI * 7e6), TBW = 1 \/ (2 * Math.PI * 70e6), TC = 1e-4;\nfunction acquire(cfg, ci, t0, n) {\n  var c = cfg.ch[ ci], out = new Float32Array(n), span = 10 * cfg.tdiv, step = span \/ (n - 1), i;\n  var nz = 0.022 * c.vdiv;\n  if (c.cpl === 'gnd') { for (i = 0; i < n; i++) out[ i] = (rnd() + rnd() + rnd() - 1.5) * nz; return out; }\n  var s = SIG[c.sig], m = meanOf(c.sig), fac = c.menu \/ c.probe;\n  var ring = c.gnd === 'long' && step < 2.6e-9, p1 = c.probe === 1, k = c.probe === 10 ? c.comp : 0;\n  var comp = Math.abs(k) > 1e-3, exact = comp && step >= 2.6e-8, bw = step < 2e-8;\n  var pre = Math.max(ring ? 5 \/ (ZR * WR) : 0, p1 ? 5 * T1X : 0, bw ? 5 * TBW : 0, exact ? 4 * TC : 0);\n  var np = Math.min(16000, Math.ceil(pre \/ step));\n  var x0 = s.v(t0 - np * step);\n  var yr = x0, yd = 0, l1 = x0, lc = exact ? m : x0, lb = x0;\n  var a1 = 1 - Math.exp(-step \/ T1X), ac = 1 - Math.exp(-step \/ TC), ab = 1 - Math.exp(-step \/ TBW);\n  var sub = ring ? Math.max(1, Math.ceil(WR * step \/ 0.25)) : 1, hs = step \/ sub, sh = c.cpl === 'ac' ? m : 0;\n  for (i = -np; i < n; i++) {\n    var x = s.v(t0 + i * step);\n    if (ring) { for (var j = 0; j < sub; j++) { var acc = WR * WR * (x - yr) - 2 * ZR * WR * yd; yd += acc * hs; yr += yd * hs; } x = yr; }\n    if (p1) { l1 += a1 * (x - l1); x = l1; }\n    if (comp) { if (exact) { lc += ac * (x - lc); x = x + k * (x - lc); } else x = x + k * (x - m); }\n    if (bw) { lb += ab * (x - lb); x = lb; }\n    if (i >= 0) out[ i] = (x - sh) * fac + (rnd() + rnd() + rnd() - 1.5) * nz;\n  }\n  return out;\n}\nfunction record(cfg, t0, n, trig) {\n  return { a: [cfg.ch[0].on ? acquire(cfg, 0, t0, n) : null, cfg.ch[1].on ? acquire(cfg, 1, t0, n) : null], t: trig };\n}\n\n\/* ---------- disegno ---------- *\/\nvar COL = ['#ffd23f', '#3fd8ff'];\nfunction drawGrid(ctx, W, H, d) {\n  ctx.fillStyle = '#05070f'; ctx.fillRect(0, 0, W, H);\n  var dx = W \/ 10, dy = H \/ 8, i, j;\n  ctx.lineWidth = Math.max(1, d * 0.8);\n  ctx.strokeStyle = 'rgba(130,150,210,.20)';\n  ctx.beginPath();\n  for (i = 1; i < 10; i++) { var x = Math.round(i * dx) + 0.5; ctx.moveTo(x, 0); ctx.lineTo(x, H); }\n  for (j = 1; j < 8; j++) { var y = Math.round(j * dy) + 0.5; ctx.moveTo(0, y); ctx.lineTo(W, y); }\n  ctx.stroke();\n  ctx.strokeStyle = 'rgba(160,180,240,.42)';\n  ctx.beginPath();\n  var cx = Math.round(W \/ 2) + 0.5, cy = Math.round(H \/ 2) + 0.5, tk = 4 * d;\n  ctx.moveTo(cx, 0); ctx.lineTo(cx, H); ctx.moveTo(0, cy); ctx.lineTo(W, cy);\n  for (i = 0; i <= 50; i++) { var xx = Math.round(i * dx \/ 5) + 0.5; ctx.moveTo(xx, cy - tk); ctx.lineTo(xx, cy + tk); }\n  for (j = 0; j <= 40; j++) { var yy = Math.round(j * dy \/ 5) + 0.5; ctx.moveTo(cx - tk, yy); ctx.lineTo(cx + tk, yy); }\n  ctx.stroke();\n  ctx.strokeStyle = 'rgba(130,150,210,.35)'; ctx.strokeRect(0.5, 0.5, W - 1, H - 1);\n}\nfunction drawTraces(ctx, W, H, d, cfg, recs, flat) {\n  var dy = H \/ 8;\n  ctx.lineJoin = 'round'; ctx.lineWidth = 1.6 * d;\n  for (var r = 0; r < recs.length; r++) {\n    ctx.globalAlpha = recs.length === 1 ? 1 : flat ? 0.55 : 0.16 + 0.84 * Math.pow((r + 1) \/ recs.length, 2);\n    for (var ch = 0; ch < 2; ch++) {\n      var c = cfg.ch[ ch], a = recs[ r].a[ ch];\n      if (!c.on || !a) continue;\n      ctx.strokeStyle = COL[ ch]; ctx.beginPath();\n      var n = a.length, sx = W \/ (n - 1);\n      for (var i = 0; i < n; i++) {\n        var y = H \/ 2 - (a[ i] \/ c.vdiv + c.pos) * dy;\n        if (y < -4 * d) y = -4 * d; else if (y > H + 4 * d) y = H + 4 * d;\n        if (i) ctx.lineTo(i * sx, y); else ctx.moveTo(0, y);\n      }\n      ctx.stroke();\n    }\n  }\n  ctx.globalAlpha = 1;\n}\nfunction tri(ctx, x, y, s, dir, col, txt, d) {\n  ctx.fillStyle = col; ctx.beginPath();\n  if (dir === 'r') { ctx.moveTo(x, y - s); ctx.lineTo(x + s * 1.6, y); ctx.lineTo(x, y + s); }\n  else if (dir === 'l') { ctx.moveTo(x, y - s); ctx.lineTo(x - s * 1.6, y); ctx.lineTo(x, y + s); }\n  else { ctx.moveTo(x - s, y); ctx.lineTo(x + s, y); ctx.lineTo(x, y + s * 1.6); }\n  ctx.closePath(); ctx.fill();\n  if (txt) {\n    ctx.fillStyle = '#05070f'; ctx.font = 'bold ' + Math.round(9 * d) + 'px Inter,sans-serif';\n    ctx.textAlign = 'center'; ctx.textBaseline = 'middle';\n    ctx.fillText(txt, dir === 'r' ? x + s * 0.55 : dir === 'l' ? x - s * 0.55 : x, dir === 'd' ? y + s * 0.6 : y + 0.5 * d);\n  }\n}\nfunction drawMarks(ctx, W, H, d, cfg) {\n  var dy = H \/ 8, s = 7 * d;\n  for (var ch = 0; ch < 2; ch++) {\n    var c = cfg.ch[ ch];\n    if (!c.on) continue;\n    var y = Math.max(s, Math.min(H - s, H \/ 2 - c.pos * dy));\n    tri(ctx, 0, y, s, 'r', COL[ ch], String(ch + 1), d);\n  }\n  var tc = cfg.ch[cfg.trig.src], ty = H \/ 2 - (cfg.trig.level \/ tc.vdiv + tc.pos) * dy;\n  ty = Math.max(s, Math.min(H - s, ty));\n  tri(ctx, W, ty, s, 'l', '#ff8c3f', 'T', d);\n  var tx = (5 + cfg.hpos) * W \/ 10;\n  tri(ctx, Math.max(s, Math.min(W - s, tx)), 0, s, 'd', '#ff8c3f', '', d);\n}\n\n\/* ---------- figure statiche (anteprime nel testo) ---------- *\/\nfunction snapRecs(cfg, opt) {\n  var save = rnd, son = EV.tOn, recs = [], K = opt.k || 6, n = 520;\n  rnd = mulberry(opt.seed || 12345);\n  if (opt.ev) EV.tOn = opt.ev;\n  for (var j = 0; j < K; j++) {\n    var ts = (opt.t || 50) + j * 0.01373 + rnd() * 1e-3;\n    var t = findTrig(cfg, ts);\n    if (t === null) t = rareTrig(cfg, ts, ts + 5);\n    var start = t === null ? ts : t - (5 + cfg.hpos) * cfg.tdiv;\n    if (t === null && cfg.trig.mode !== 'auto') continue;\n    recs.push(record(cfg, start, n, t !== null));\n  }\n  rnd = save; EV.tOn = son;\n  return recs;\n}\nfunction scaleTxt(cfg) {\n  var out = [];\n  cfg.ch.forEach(function (c, i) {\n    if (c.on) out.push('<span class=\"c' + (i + 1) + '\">CH' + (i + 1) + ' ' + eng(c.vdiv, 'V') + '\/div' + (c.cpl !== 'dc' ? ' ' + c.cpl.toUpperCase() : '') + '<\/span>');\n  });\n  out.push('<span>' + eng(cfg.tdiv, 's') + '\/div<\/span>');\n  return out.join(' \u00b7 ');\n}\nvar MINIS = [];\nfunction drawMini(m) {\n  var cv = m.cv, d = Math.min(2, window.devicePixelRatio || 1), w = cv.clientWidth;\n  if (!w || w === m.w) return;\n  m.w = w;\n  var W = cv.width = Math.round(w * d), H = cv.height = Math.round(w * 0.8 * d), ctx = cv.getContext('2d');\n  drawGrid(ctx, W, H, d);\n  drawTraces(ctx, W, H, d, m.cfg, m.recs, true);\n  drawMarks(ctx, W, H, d, m.cfg);\n}\nfunction initMinis() {\n  qa('canvas[data-pre]').forEach(function (cv) {\n    var name = cv.getAttribute('data-pre'), cfg = mk(PRE[ name]);\n    var opt = { k: +(cv.getAttribute('data-k') || 6), seed: +(cv.getAttribute('data-seed') || 12345) };\n    if (name === 'reset') { opt.ev = 50; opt.t = 49.99; opt.k = 1; }\n    var m = { cv: cv, cfg: cfg, recs: snapRecs(cfg, opt), w: 0 };\n    MINIS.push(m);\n    var cap = document.createElement('div');\n    cap.className = 'sc'; cap.innerHTML = scaleTxt(cfg);\n    cv.parentNode.insertBefore(cap, cv.nextSibling);\n    drawMini(m);\n  });\n}\n\n\/* ---------- simulatore dal vivo ---------- *\/\nvar S = mk(PRE.start), recs = [], running = true, status = 'AUTO', pend = null, scanT = 0, lastTrigT = -1e9, lastRare = 0;\nvar NREC = 5, T0 = performance.now(), lastNow = 0, visible = true, dirty = true;\nfunction now() { return (performance.now() - T0) \/ 1000 + 10; }\nvar gcv = $('os-grid'), tcv = $('os-tr'), gctx = gcv.getContext('2d'), tctx = tcv.getContext('2d'), DPR = 1, GW = 0, GH = 0;\nfunction sizeMain() {\n  var w = tcv.clientWidth, h = tcv.clientHeight;\n  DPR = Math.min(2, window.devicePixelRatio || 1);\n  if (!w || (Math.round(w * DPR) === GW && Math.round(h * DPR) === GH)) return;\n  GW = gcv.width = tcv.width = Math.round(w * DPR); GH = gcv.height = tcv.height = Math.round(h * DPR);\n  drawGrid(gctx, GW, GH, DPR);\n}\nfunction push(r) { recs.push(r); if (recs.length > NREC) recs.shift(); }\nfunction step() {\n  var t = now(), dt = Math.min(0.1, Math.max(0.004, t - lastNow));\n  lastNow = t;\n  if (!running) return;\n  var span = 10 * S.tdiv, tr = S.trig, mode = tr.mode;\n  if (span <= 0.05) {\n    var got = false;\n    for (var j = 0; j < 2 && !got; j++) {\n      var ts = t - rnd() * dt, tt = findTrig(S, ts);\n      if (tt === null) tt = rareTrig(S, lastRare, t);\n      if (tt !== null) {\n        push(record(S, tt - (5 + S.hpos) * S.tdiv, 700, true));\n        status = 'TD'; got = true;\n        if (mode === 'single') { running = false; status = 'STOP'; }\n      } else if (mode === 'auto') { push(record(S, ts, 700, false)); status = 'AUTO'; }\n      else status = 'WAIT';\n    }\n    lastRare = t;\n    return;\n  }\n  if (mode === 'auto') { recs = [record(S, t - span, 700, false)]; status = 'ROLL'; pend = null; scanT = t; return; }\n  if (pend === null) {\n    var from = Math.max(scanT, lastTrigT + tr.hold), stp = span \/ 1500, c = S.ch[tr.src];\n    if (from < t) pend = cross(c, from, Math.ceil((t - from) \/ stp) + 1, tr.level, tr.slope, stp);\n    scanT = t;\n    if (pend !== null && pend > t) pend = null;\n  }\n  if (pend !== null) {\n    var end = pend + (5 - S.hpos) * S.tdiv;\n    if (t >= end) {\n      recs = [record(S, pend - (5 + S.hpos) * S.tdiv, 700, true)];\n      lastTrigT = pend; pend = null; status = 'TD';\n      if (mode === 'single') { running = false; status = 'STOP'; }\n    } else status = 'ACQ';\n  } else status = 'WAIT';\n}\nvar lastRead = 0;\nfunction frame() {\n  if (visible) {\n    sizeMain();\n    step();\n    tctx.clearRect(0, 0, GW, GH);\n    drawTraces(tctx, GW, GH, DPR, S, recs);\n    drawMarks(tctx, GW, GH, DPR, S);\n    var t = performance.now();\n    if (t - lastRead > 220 || dirty) { lastRead = t; readout(); dirty = false; }\n  }\n  requestAnimationFrame(frame);\n}\n\n\/* ---------- letture e misure ---------- *\/\nvar STX = {\n  TD: ['T\\'D', 'ok', L('Trigger agganciato', 'Triggered')],\n  AUTO: ['AUTO', 'au', L('Nessun trigger: traccia libera', 'No trigger: free running')],\n  WAIT: ['WAIT', 'wt', L('In attesa del trigger', 'Waiting for trigger')],\n  STOP: ['STOP', 'st', L('Fermo: premi RUN', 'Stopped: press RUN')],\n  ROLL: ['ROLL', 'au', L('Scorrimento lento (roll)', 'Slow roll mode')],\n  ACQ: ['TRIG\u2026', 'ok', L('Trigger trovato, acquisizione in corso', 'Triggered, acquiring')]\n};\nfunction meas(a, vdiv) {\n  var mx = -1e9, mn = 1e9, n = a.length, i;\n  for (i = 0; i < n; i++) { if (a[ i] > mx) mx = a[ i]; if (a[ i] < mn) mn = a[ i]; }\n  var pp = mx - mn, f = NaN;\n  if (pp > 0.4 * vdiv) {\n    var mid = (mx + mn) \/ 2, hy = pp * 0.1, st = 0, first = -1, last = -1, cnt = 0;\n    for (i = 0; i < n; i++) {\n      if (st <= 0 && a[ i] > mid + hy) { if (st < 0) { if (first < 0) first = i; last = i; cnt++; } st = 1; }\n      else if (st >= 0 && a[ i] < mid - hy) st = -1;\n    }\n    if (cnt >= 2) f = (cnt - 1) \/ ((last - first) \/ (n - 1) * 10 * S.tdiv);\n  }\n  return { mx: mx, mn: mn, pp: pp, f: f };\n}\nfunction readout() {\n  var st = STX[ status] || STX.AUTO;\n  var h = '<span class=\"pill ' + st[1] + '\" title=\"' + st[2] + '\">' + st[0] + '<\/span>';\n  S.ch.forEach(function (c, i) {\n    if (!c.on) return;\n    h += '<span class=\"c' + (i + 1) + '\"><b>' + (i + 1) + '<\/b> ' + eng(c.vdiv, 'V') + '\/div ' + c.cpl.toUpperCase() + ' ' + c.menu + 'x<\/span>';\n  });\n  h += '<span><b>H<\/b> ' + eng(S.tdiv, 's') + '\/div<\/span>';\n  var tc = S.trig;\n  h += '<span class=\"tg\"><b>T<\/b> CH' + (tc.src + 1) + ' ' + (tc.slope > 0 ? '\u2191' : '\u2193') + ' ' + eng(tc.level, 'V') + ' ' + { auto: 'AUTO', norm: 'NORMAL', single: 'SINGLE' }[tc.mode] + '<\/span>';\n  $('os-rd').innerHTML = h;\n  var r = recs[recs.length - 1], mh = '';\n  S.ch.forEach(function (c, i) {\n    if (!c.on) return;\n    var a = r && r.a[ i];\n    if (!a) { mh += '<div class=\"c' + (i + 1) + '\"><b>CH' + (i + 1) + '<\/b> \u2014<\/div>'; return; }\n    var m = meas(a, c.vdiv);\n    mh += '<div class=\"c' + (i + 1) + '\"><b>CH' + (i + 1) + '<\/b> <span>Vpp <i>' + eng(m.pp, 'V') + '<\/i><\/span><span>max <i>' + eng(m.mx, 'V') + '<\/i><\/span><span>min <i>' + eng(m.mn, 'V') + '<\/i><\/span><span>' + L('freq', 'freq') + ' <i>' + (isFinite(m.f) ? eng(m.f, 'Hz') : '\u2014') + '<\/i><\/span><\/div>';\n  });\n  $('os-ms').innerHTML = mh;\n  $('os-run').textContent = running ? 'STOP' : 'RUN';\n  $('os-run').classList.toggle('y', !running);\n}\n\n\/* ---------- comandi ---------- *\/\nfunction nearestIdx(list, v) { var b = 0; list.forEach(function (x, i) { if (Math.abs(Math.log(x \/ v)) < Math.abs(Math.log(list[ b] \/ v))) b = i; }); return b; }\nfunction holdFromSlider(v) { return v <= 0 ? 0 : 1e-7 * Math.pow(10, (v - 1) \/ 99 * 5); }\nfunction sliderFromHold(h) { return h <= 0 ? 0 : Math.round(1 + Math.log10(h \/ 1e-7) \/ 5 * 99); }\nfunction clearRecs() { recs = []; pend = null; scanT = now(); }\nfunction rearm() { running = true; clearRecs(); status = 'WAIT'; lastRare = now(); }\n\nfunction fillSelects() {\n  [0, 1].forEach(function (ch) {\n    var sel = $('os-s' + ch), h = '';\n    GROUPS.forEach(function (g) {\n      h += '<optgroup label=\"' + g.n + '\">';\n      g.ids.forEach(function (id) { h += '<option value=\"' + id + '\">' + SIG[ id].n + '<\/option>'; });\n      h += '<\/optgroup>';\n    });\n    h += '<option value=\"?\" hidden>' + L('\u2753 Segnale dell\\'esercizio', '\u2753 Exercise signal') + '<\/option>';\n    sel.innerHTML = h;\n    sel.addEventListener('change', function () {\n      if (sel.value === '?') return;\n      S.ch[ ch].sig = sel.value; S.ch[ ch].hid = false; clearRecs(); ui();\n    });\n  });\n}\nfunction setVal(key, ch, v) {\n  var c = ch === null ? null : S.ch[ ch];\n  switch (key) {\n    case 'cpl': case 'gnd': c[ key] = v; break;\n    case 'probe': case 'menu': c[ key] = +v; break;\n    case 'src': S.trig.src = +v; break;\n    case 'slope': S.trig.slope = +v; break;\n    case 'mode': S.trig.mode = v; rearm(); break;\n  }\n  if (key !== 'mode') { recs = recs.slice(-1); pend = null; }\n  ui();\n}\nfunction bind() {\n  qa('[data-seg]').forEach(function (g) {\n    var p = g.getAttribute('data-seg').split(':'), ch = p.length > 1 ? +p[1] : null;\n    qa('button', g).forEach(function (b) { b.addEventListener('click', function () { setVal(p[0], ch, b.getAttribute('data-v')); }); });\n  });\n  qa('[data-step]').forEach(function (b) {\n    var p = b.getAttribute('data-step').split(':');\n    b.addEventListener('click', function () {\n      var dir = +p[p.length - 1];\n      if (p[0] === 'vdiv') {\n        var c = S.ch[+p[1]], i = nearestIdx(VD, c.vdiv);\n        c.vdiv = VD[Math.max(0, Math.min(VD.length - 1, i + dir))];\n      } else {\n        var j = nearestIdx(TD, S.tdiv);\n        S.tdiv = TD[Math.max(0, Math.min(TD.length - 1, j + dir))];\n        clearRecs();\n      }\n      ui();\n    });\n  });\n  qa('[data-rng]').forEach(function (r) {\n    var p = r.getAttribute('data-rng').split(':'), ch = p.length > 1 ? +p[1] : null;\n    r.addEventListener('input', function () {\n      var v = +r.value;\n      if (p[0] === 'pos') S.ch[ ch].pos = v \/ 10;\n      else if (p[0] === 'comp') S.ch[ ch].comp = v \/ 250;\n      else if (p[0] === 'hpos') { S.hpos = v \/ 10; clearRecs(); }\n      else if (p[0] === 'level') { var c = S.ch[S.trig.src]; S.trig.level = (v \/ 100 - c.pos) * c.vdiv; }\n      else if (p[0] === 'hold') S.trig.hold = holdFromSlider(v);\n      ui(true);\n    });\n  });\n  qa('[data-tog]').forEach(function (b) {\n    b.addEventListener('click', function () { var c = S.ch[+b.getAttribute('data-tog')]; c.on = !c.on; ui(); });\n  });\n  qa('[data-zero]').forEach(function (b) {\n    b.addEventListener('click', function () { var p = b.getAttribute('data-zero').split(':'); if (p[0] === 'pos') S.ch[+p[1]].pos = 0; else S.hpos = 0; clearRecs(); ui(); });\n  });\n  $('os-l50').addEventListener('click', function () {\n    var r = recs[recs.length - 1], i = S.trig.src, a = r && r.a[ i];\n    if (a) { var m = meas(a, S.ch[ i].vdiv); S.trig.level = (m.mx + m.mn) \/ 2; }\n    ui();\n  });\n  $('os-run').addEventListener('click', function () { if (running) { running = false; status = 'STOP'; } else rearm(); ui(); });\n  $('os-pwr').addEventListener('click', function () { EV.tOn = now() + 0.05; ui(); });\n  qa('[data-pre]').forEach(function (b) {\n    if (b.tagName === 'CANVAS') return;\n    b.addEventListener('click', function (e) { e.preventDefault(); load(b.getAttribute('data-pre')); exClose(); $('os-sim').scrollIntoView({ behavior: 'smooth', block: 'start' }); });\n  });\n}\nfunction load(name, hide) {\n  S = mk(clone(PRE[ name]));\n  if (hide) hide.forEach(function (h, i) { if (h) S.ch[ i].hid = true; });\n  rearm(); ui();\n}\nfunction segSet(sel, v) { qa('[data-seg=\"' + sel + '\"] button').forEach(function (b) { b.classList.toggle('on', b.getAttribute('data-v') === String(v)); }); }\nfunction ui(fromRange) {\n  S.ch.forEach(function (c, i) {\n    var g = $('os-g' + i);\n    g.classList.toggle('off', !c.on);\n    qa('[data-tog=\"' + i + '\"]').forEach(function (b) { b.classList.toggle('on', c.on); b.textContent = 'CH' + (i + 1) + (c.on ? ' ON' : ' OFF'); });\n    var sel = $('os-s' + i), q = sel.querySelector('option[value=\"?\"]');\n    q.hidden = !c.hid; sel.value = c.hid ? '?' : c.sig;\n    $('os-vd' + i).textContent = eng(c.vdiv, 'V');\n    segSet('cpl:' + i, c.cpl); segSet('probe:' + i, c.probe); segSet('menu:' + i, c.menu); segSet('gnd:' + i, c.gnd);\n    var cp = $('os-cp' + i), cr = qa('[data-rng=\"comp:' + i + '\"]')[0];\n    if (!fromRange) { qa('[data-rng=\"pos:' + i + '\"]')[0].value = Math.round(c.pos * 10); cr.value = Math.round(c.comp * 250); }\n    cr.disabled = c.probe !== 10;\n    if (c.probe !== 10) { cp.textContent = L('solo in 10x', '10x only'); cp.className = 'mt'; }\n    else if (Math.abs(c.comp) < 0.02) { cp.textContent = L('corretta \u2713', 'correct \u2713'); cp.className = 'okc'; }\n    else { cp.textContent = c.comp > 0 ? L('sovracompensata', 'over-compensated') : L('sottocompensata', 'under-compensated'); cp.className = 'bad'; }\n    $('os-pw' + i).hidden = !(c.probe === 10 && c.menu === 1 || c.probe === 1 && c.menu === 10);\n  });\n  $('os-td').textContent = eng(S.tdiv, 's');\n  segSet('src', S.trig.src); segSet('slope', S.trig.slope); segSet('mode', S.trig.mode);\n  var tc = S.ch[S.trig.src];\n  if (!fromRange) {\n    qa('[data-rng=\"hpos\"]')[0].value = Math.round(S.hpos * 10);\n    qa('[data-rng=\"hold\"]')[0].value = sliderFromHold(S.trig.hold);\n  }\n  qa('[data-rng=\"level\"]')[0].value = Math.round((S.trig.level \/ tc.vdiv + tc.pos) * 100);\n  $('os-lv').textContent = eng(S.trig.level, 'V');\n  $('os-ho').textContent = S.trig.hold > 0 ? eng(S.trig.hold, 's') : 'min';\n  $('os-pwr').hidden = !S.ch.some(function (c) { return c.on && (c.sig === 'rst' || c.sig === 'rstx'); });\n  dirty = true;\n}\n\n\/* ---------- esercizi ---------- *\/\nvar EX = [\n  { t: L('Schermo nero: il clock', 'Black screen: the clock'), pre: { c1: { sig: 'phi2l', vdiv: 5, pos: -2 }, tdiv: 1e-3, tr: { level: 2.5 } }, hide: [1],\n    q: L('Un C64 d\u00e0 schermo nero. Hai messo la sonda sul piedino 39 del 6510 (\u03a62). Lo strumento \u00e8 impostato male: regola T\/div e V\/div finch\u00e9 vedi bene il segnale, poi rispondi.',\n         'A C64 shows a black screen. The probe is on pin 39 of the 6510 (\u03a62). The scope is badly set up: adjust T\/div and V\/div until you can see the signal clearly, then answer.'),\n    o: [L('Clock sano: il guasto \u00e8 altrove', 'Healthy clock: the fault is elsewhere'), L('Il clock c\\'\u00e8 ma arriva solo a circa 1,6 V', 'The clock is there but only reaches about 1.6 V'), L('Nessun clock: linea ferma a 0 V', 'No clock: the line sits at 0 V')], ok: 1,\n    w: L('La frequenza \u00e8 giusta (0,985 MHz) ma il livello alto non supera la soglia TTL di 2 V: la CPU non vede il clock. Cerca chi carica la linea: \u03a62 arriva a molti chip (SID, CIA, PLA, porta di espansione) e uno in corto la tira gi\u00f9. Prova a misurare con i chip sospetti tolti, se sono su zoccolo, o controlla l\\'uscita \u03a60 del VIC-II (piedino 17).',\n         'The frequency is right (0.985 MHz) but the high level does not reach the 2 V TTL threshold: the CPU cannot see the clock. Look for whatever loads the line: \u03a62 reaches many chips (SID, CIAs, PLA, expansion port) and a shorted one drags it down. Measure with the suspect chips removed if they are socketed, or check the VIC-II \u03a60 output (pin 17).') },\n  { t: L('Bus dati strano', 'Strange data bus'), pre: bus2('dbf', { tr: { src: 1, level: 2.3 }, tdiv: 2e-6 }), hide: [1, 0],\n    q: L('CH1 \u00e8 su una linea dati del bus, CH2 su \u03a62 e il trigger \u00e8 su CH2. Stringi la base dei tempi per vedere pochi cicli. Com\\'\u00e8 la linea dati?',\n         'CH1 is on a data bus line, CH2 on \u03a62, and the trigger is on CH2. Use a faster timebase to see a few cycles. What does the data line look like?'),\n    o: [L('Sana: commuta tra 0 e 1 a ogni mezzo ciclo', 'Healthy: it switches between 0 and 1 every half cycle'), L('Flottante: resta tra 1 e 2 V, nessuno la pilota', 'Floating: it stays between 1 and 2 V, nobody drives it'), L('Bloccata a 1', 'Stuck at 1')], ok: 1,\n    w: L('Non ci sono 0 e 1 netti: il livello vaga tra 1,3 e 1,9 V, nella zona proibita tra 0,8 e 2 V, con piccoli picchi indotti dalle linee vicine. \u00c8 una linea che nessuno pilota: pista interrotta, piedino sollevato, chip con l\\'uscita morta o buffer mai abilitato.',\n         'There are no clean 0s and 1s: the level wanders between 1.3 and 1.9 V, in the forbidden zone between 0.8 and 2 V, with small spikes coupled from nearby lines. Nobody drives this line: broken trace, lifted pin, a chip with a dead output or a buffer that is never enabled.') },\n  { t: L('Una RAM sospetta', 'A suspect RAM'), pre: bus2('dbr'), hide: [1, 0],\n    q: L('CH1 \u00e8 sull\\'uscita Q (piedino 14) di una 4164, CH2 su \u03a62. Il C64 parte con lo schermo pieno di caratteri sporchi. Cosa vedi?',\n         'CH1 is on the Q output (pin 14) of a 4164, CH2 on \u03a62. The C64 boots with a screen full of garbage characters. What do you see?'),\n    o: [L('Uscita sana', 'Healthy output'), L('Livello intermedio proprio quando la RAM dovrebbe rispondere', 'An in-between level exactly when the RAM should answer'), L('Linea in corto a massa', 'Line shorted to ground')], ok: 1,\n    w: L('Quando \u03a62 \u00e8 basso legge il VIC-II, e legge sempre dalla RAM: l\u00ec la linea resta a met\u00e0 strada invece di dare 0 o 1. Nelle met\u00e0 con \u03a62 alto, quando la CPU legge ROM o I\/O, i livelli sono buoni. \u00c8 la firma di una DRAM con l\\'uscita morta: confronta con le altre 7 RAM, la colpevole \u00e8 quella diversa.',\n         'While \u03a62 is low the VIC-II reads, always from RAM: there the line sits halfway instead of giving 0 or 1. In the \u03a62-high halves, when the CPU reads ROM or I\/O, levels are fine. That is the signature of a DRAM with a dead output: compare with the other 7 RAMs, the odd one out is the culprit.') },\n  { t: L('Si blocca ogni tanto', 'It crashes now and then'), pre: { c1: { sig: 'gl', vdiv: 2, pos: -2.5 }, tdiv: 1e-6, tr: { level: 2.5 } }, hide: [1],\n    q: L('Il C64 si blocca a caso. CH1 \u00e8 su \/NMI (piedino 4 del 6510), che dovrebbe stare fermo a 5 V. In AUTO sembra pulito: imposta il trigger su fronte di discesa, modalit\u00e0 SINGLE, e aspetta. Cosa trovi?',\n         'The C64 crashes at random. CH1 is on \/NMI (pin 4 of the 6510), which should sit at 5 V. In AUTO it looks clean: set the trigger to falling edge, SINGLE mode, and wait. What do you find?'),\n    o: [L('Niente: la linea \u00e8 pulita', 'Nothing: the line is clean'), L('Ogni tanto un impulso verso massa di poche decine di ns', 'Every so often a pulse to ground lasting a few tens of ns'), L('Un\\'onda quadra a 1 MHz', 'A 1 MHz square wave')], ok: 1,\n    w: L('Con T\/div a 50 ns l\\'impulso dura circa 50 ns e scende sotto 1 V: basta per un NMI spurio. In AUTO non si vede perch\u00e9 arriva meno di due volte al secondo. Cause tipiche: pull-up debole o mancante, cartuccia o porta utente che disturbano, CIA 2 difettoso.',\n         'At 50 ns\/div the pulse lasts about 50 ns and drops below 1 V: enough for a spurious NMI. In AUTO you miss it because it comes less than twice a second. Typical causes: a weak or missing pull-up, a cartridge or user-port device injecting noise, a faulty CIA 2.') },\n  { t: L('Niente immagine', 'No picture'), pre: { c1: { sig: 'vidb', vdiv: 0.2, pos: -2.5 }, tdiv: 1e-5, tr: { slope: -1, level: 0.15 } }, hide: [1],\n    q: L('C64 a schermo nero. CH1 \u00e8 sull\\'uscita video composita, con il monitor collegato. Cosa c\\'\u00e8?',\n         'C64 with a black screen. CH1 is on the composite video output, with the monitor connected. What is there?'),\n    o: [L('Riga video normale con immagine', 'Normal video line with a picture'), L('Sincronismi e burst presenti, ma immagine nera', 'Sync and burst are present, but the picture is black'), L('Nessun segnale', 'No signal at all')], ok: 1,\n    w: L('Ogni 64 \u00b5s c\\'\u00e8 l\\'impulso di sincronismo e dopo il burst di colore: il VIC-II \u00e8 vivo e ha il clock. Ma la parte attiva della riga resta al livello del nero, cio\u00e8 il VIC-II non \u00e8 stato programmato: la CPU non parte. Passa a reset, \u03a62, ROM, PLA e RAM.',\n         'Every 64 \u00b5s there is a sync pulse followed by the colour burst: the VIC-II is alive and clocked. But the active part of the line stays at black level, so nobody programmed the VIC-II: the CPU is not running. Move on to reset, \u03a62, ROMs, PLA and RAM.') },\n  { t: L('Linea D5', 'Line D5'), pre: bus2('db0'), hide: [1, 0],\n    q: L('CH1 \u00e8 sul piedino 32 del 6510 (D5), CH2 su \u03a62. Com\\'\u00e8 la linea?', 'CH1 is on pin 32 of the 6510 (D5), CH2 on \u03a62. How is the line?'),\n    o: [L('Sana', 'Healthy'), L('Bloccata a 0', 'Stuck at 0'), L('Flottante', 'Floating')], ok: 1,\n    w: L('Resta sotto 0,4 V con solo piccoli disturbi in corrispondenza delle commutazioni: qualcosa la tiene a massa. Sullo stesso bus ci sono CPU, RAM, ROM, VIC-II, SID, CIA e porta di espansione: misura la resistenza verso massa e togli i chip uno alla volta, o cerca quello che scalda.',\n         'It stays below 0.4 V with only small glitches when other lines switch: something holds it to ground. CPU, RAM, ROMs, VIC-II, SID, CIAs and the expansion port all share this bus: measure the resistance to ground and pull chips one at a time, or look for the one running hot.') },\n  { t: L('Clock troppo basso?', 'Clock too low?'), pre: ext(CLK, { c1: { menu: 1 }, tr: { level: 0.23 } }), hide: [0],\n    q: L('Un amico ti scrive: \"il \u03a62 del mio C64 misura meno di mezzo volt, \u00e8 guasto\". Guarda lo schermo e i comandi del canale 1. Hai ragione a preoccuparti?',\n         'A friend writes: \"the \u03a62 on my C64 measures less than half a volt, it\\'s faulty\". Look at the screen and at the channel 1 controls. Should you worry?'),\n    o: [L('S\u00ec, il clock \u00e8 troppo basso', 'Yes, the clock is too low'), L('No: la sonda \u00e8 su 10x ma il canale \u00e8 impostato su 1x', 'No: the probe is on 10x but the channel is set to 1x'), L('No: basta passare in AC', 'No: just switch to AC')], ok: 1,\n    w: L('La sonda divide per 10, ma il canale crede di avere una sonda 1x e non moltiplica: tutte le tensioni lette sono 10 volte pi\u00f9 basse. Imposta il canale a 10x (o l\\'interruttore della sonda su 1x) e il clock torna 0,2\u20134,6 V.',\n         'The probe divides by 10, but the channel thinks it has a 1x probe and does not multiply: every reading is 10 times too low. Set the channel to 10x (or the probe switch to 1x) and the clock is back to 0.2\u20134.6 V.') },\n  { t: L('Il reset', 'The reset'), pre: { c1: { sig: 'rstx', vdiv: 2, pos: -3 }, tdiv: 0.1, tr: { level: 2.5, mode: 'norm' } }, hide: [1],\n    q: L('CH1 \u00e8 su \/RESET (piedino 40 del 6510), trigger NORMAL sul fronte di salita a 2,5 V. Premi \"Spegni e riaccendi il C64\" e guarda cosa succede.',\n         'CH1 is on \/RESET (pin 40 of the 6510), NORMAL trigger on the rising edge at 2.5 V. Press \"Power-cycle the C64\" and watch.'),\n    o: [L('Reset sano: sale a 5 V poco dopo l\\'accensione', 'Healthy reset: it rises to 5 V shortly after power-on'), L('Reset bloccato basso: la CPU resta ferma', 'Reset stuck low: the CPU never starts'), L('Reset che oscilla', 'Reset oscillating')], ok: 1,\n    w: L('Il trigger non scatta mai: la linea resta a circa 0,35 V. Con \/RESET basso la CPU non esegue nulla e lo schermo resta nero. Controlla il circuito del timer 556 che genera il reset e i chip collegati alla linea (CIA, SID, porta di espansione, una cartuccia inserita).',\n         'The trigger never fires: the line stays at about 0.35 V. With \/RESET low the CPU executes nothing and the screen stays black. Check the 556 timer circuit that makes the reset and the chips on that line (CIAs, SID, expansion port, any cartridge plugged in).') }\n];\nvar exCur = -1;\nfunction exInit() {\n  var h = '';\n  EX.forEach(function (e, i) { h += '<button class=\"b\" data-ex=\"' + i + '\"><i>' + (i + 1) + '<\/i> ' + e.t + '<\/button>'; });\n  $('os-exl').innerHTML = h;\n  qa('[data-ex]').forEach(function (b) { b.addEventListener('click', function () { exOpen(+b.getAttribute('data-ex')); }); });\n}\nfunction exOpen(i) {\n  var e = EX[ i]; exCur = i;\n  S = mk(clone(e.pre));\n  e.hide.forEach(function (h, j) { if (h) S.ch[ j].hid = true; });\n  rearm(); ui();\n  qa('[data-ex]').forEach(function (b) { b.classList.toggle('y', +b.getAttribute('data-ex') === i); });\n  var h = '<p class=\"exq\"><b>' + L('Esercizio', 'Exercise') + ' ' + (i + 1) + '.<\/b> ' + e.q + '<\/p><div class=\"btns\">';\n  e.o.forEach(function (o, j) { h += '<button class=\"b\" data-ans=\"' + j + '\">' + String.fromCharCode(65 + j) + ') ' + o + '<\/button>'; });\n  h += '<\/div><div id=\"os-exr\"><\/div>';\n  var box = $('os-exp'); box.innerHTML = h; box.hidden = false;\n  var top = box.getBoundingClientRect().top;\n  if (top < 0 || top > window.innerHeight * 0.6) box.scrollIntoView({ behavior: 'smooth', block: 'start' });\n  qa('[data-ans]', box).forEach(function (b) {\n    b.addEventListener('click', function () {\n      var j = +b.getAttribute('data-ans'), good = j === e.ok;\n      b.classList.add(good ? 'good' : 'wrong');\n      if (good) qa('[data-ans]', box).forEach(function (x) { x.disabled = true; });\n      $('os-exr').innerHTML = '<div class=\"verdict ' + (good ? 'ok' : 'bad') + '\">' + (good ? '<b>' + L('Giusto!', 'Correct!') + '<\/b> ' + e.w : L('Non \u00e8 cos\u00ec: guarda meglio lo schermo e le misure, poi riprova.', 'Not quite: look again at the screen and the measurements, then try again.')) + '<\/div>';\n      if (good) { S.ch.forEach(function (c) { c.hid = false; }); ui(); }\n    });\n  });\n}\nfunction exClose() { exCur = -1; $('os-exp').hidden = true; qa('[data-ex]').forEach(function (b) { b.classList.remove('y'); }); }\n\n\/* ---------- avvio ---------- *\/\nfillSelects();\nbind();\nexInit();\nui();\ninitMinis();\nvar rt;\nwindow.addEventListener('resize', function () { clearTimeout(rt); rt = setTimeout(function () { MINIS.forEach(drawMini); }, 150); });\nif ('IntersectionObserver' in window) {\n  new IntersectionObserver(function (en) { visible = en[0].isIntersecting; if (visible) lastRare = now(); }).observe($('os-scr'));\n}\nrequestAnimationFrame(frame);\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>Guida all&#8217;oscilloscopio per chi non l&#8217;ha mai usato: sonda 1x\/10x e compensazione, trigger, AUTO\/NORMAL\/SINGLE, holdoff, forme d&#8217;onda giuste e guaste di C64 e Amiga, con simulatore a due canali ed esercizi trova il guasto.<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"categories":[],"tags":[63,6,145,167],"class_list":["post-11893","page","type-page","status-publish","hentry","tag-amiga","tag-c64","tag-commodore-64","tag-riparazione"],"_links":{"self":[{"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/pages\/11893","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=11893"}],"version-history":[{"count":6,"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/pages\/11893\/revisions"}],"predecessor-version":[{"id":11900,"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/pages\/11893\/revisions\/11900"}],"wp:attachment":[{"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/media?parent=11893"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/categories?post=11893"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/retrofixer.it\/en\/wp-json\/wp\/v2\/tags?post=11893"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}