{"id":4674,"date":"2026-11-03T16:39:21","date_gmt":"2026-11-03T16:39:21","guid":{"rendered":"https:\/\/www.chess.lumn.eu\/wordpress\/?p=4674"},"modified":"2026-11-10T09:37:53","modified_gmt":"2026-11-10T09:37:53","slug":"shahmatic-neo6502-4-9mhz","status":"publish","type":"post","link":"https:\/\/www.chess.lumn.eu\/wordpress\/2026\/11\/03\/shahmatic-neo6502-4-9mhz\/","title":{"rendered":"Shahmatic Neo6502 4.9MHz"},"content":{"rendered":"\n<!doctype html>\n<html lang=\"fr\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>ShahMatic Neo6502 \u2014 si on avait su en 1987<\/title>\n<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=DM+Serif+Display:ital@0;1&#038;family=DM+Sans:ital,opsz,wght@0,9..40,400;0,9..40,500;0,9..40,700;1,9..40,400&#038;family=JetBrains+Mono:wght@400;600&#038;display=swap\" rel=\"stylesheet\">\n<style>\n\/* ======================================================================\n   Article chess.lumn.eu \u2014 TOUT le CSS est cloisonne sous .naum-body.\n   Aucun selecteur de balise nu, aucun body{} : sinon WordPress colore\n   la page entiere et la colonne de droite (dates, Archives).\n   ====================================================================== *\/\n@import url('https:\/\/fonts.googleapis.com\/css2?family=DM+Serif+Display:ital@0;1&family=DM+Sans:ital,opsz,wght@0,9..40,400;0,9..40,500;0,9..40,700;1,9..40,400&family=JetBrains+Mono:wght@400;600&display=swap');\n.naum-body{\n  --creme:#f7f4ee; --encre:#2b2b2b; --rouge:#c0392b; --or:#b8863b;\n  --trait:#e3ddd0; --gris:#6b665c;\n  max-width:780px; margin:0 auto; padding:34px 26px 48px;\n  background:var(--creme); color:var(--encre);\n  font-family:\"DM Sans\",-apple-system,Segoe UI,Roboto,sans-serif;\n  font-size:18px; line-height:1.66; -webkit-font-smoothing:antialiased;\n}\n.naum-body *{box-sizing:border-box;}\n.naum-body .eyebrow{\n  font-family:\"JetBrains Mono\",ui-monospace,monospace; font-size:12.5px;\n  letter-spacing:.18em; text-transform:uppercase; color:var(--or);\n  margin:0 0 10px; font-weight:600;\n}\n.naum-body h1{\n  font-family:\"DM Serif Display\",Georgia,serif; font-weight:400;\n  font-size:40px; line-height:1.1; margin:0 0 6px; color:var(--encre);\n}\n.naum-body .sous-titre{\n  font-family:\"DM Serif Display\",Georgia,serif; font-style:italic;\n  font-size:22px; color:var(--gris); margin:0 0 26px;\n}\n.naum-body h2{\n  font-family:\"DM Serif Display\",Georgia,serif; font-weight:400;\n  font-size:26px; line-height:1.15; margin:40px 0 14px; color:var(--encre);\n  padding-bottom:7px; border-bottom:2px solid var(--rouge);\n}\n.naum-body h3{\n  font-family:\"DM Sans\",sans-serif; font-weight:700; font-size:18px;\n  margin:26px 0 6px; color:var(--encre);\n}\n.naum-body p{margin:0 0 16px;}\n.naum-body a{color:var(--rouge); text-decoration:none; border-bottom:1px solid rgba(192,57,43,.35);}\n.naum-body a:hover{border-bottom-color:var(--rouge);}\n.naum-body strong{font-weight:700;}\n.naum-body em{font-style:italic;}\n.naum-body ul{margin:0 0 16px; padding-left:22px;}\n.naum-body li{margin:0 0 7px;}\n.naum-body code,.naum-body .mono{\n  font-family:\"JetBrains Mono\",ui-monospace,monospace; font-size:.9em;\n  background:#efe9dd; padding:1px 5px; border-radius:3px;\n}\n.naum-body .chapo{font-size:19.5px; color:#3a3a3a;}\n.naum-body .chapo:first-letter{\n  font-family:\"DM Serif Display\",Georgia,serif; font-size:3.2em; float:left;\n  line-height:.78; padding:6px 10px 0 0; color:var(--rouge);\n}\n.naum-body figure{margin:0 0 20px;}\n.naum-body table{\n  width:100%; border-collapse:collapse; margin:10px 0 22px; font-size:15.5px;\n}\n.naum-body th,.naum-body td{\n  text-align:left; padding:8px 10px; border-bottom:1px solid var(--trait);\n  vertical-align:top;\n}\n.naum-body thead th{\n  font-family:\"JetBrains Mono\",monospace; font-size:12px; letter-spacing:.06em;\n  text-transform:uppercase; color:var(--gris); border-bottom:2px solid var(--trait);\n}\n.naum-body td.v{font-family:\"JetBrains Mono\",monospace; font-weight:600; white-space:nowrap;}\n.naum-body td.gain{font-family:\"JetBrains Mono\",monospace; color:var(--rouge); white-space:nowrap;}\n.naum-body .encadre{\n  background:#fffdf8; border:1px solid var(--trait); border-left:4px solid var(--or);\n  padding:16px 20px; margin:24px 0; border-radius:4px;\n}\n.naum-body .encadre h3{margin-top:0;}\n.naum-body .chiffres{\n  display:flex; flex-wrap:wrap; gap:0; margin:24px 0; border:1px solid var(--trait);\n  border-radius:4px; overflow:hidden; background:#fffdf8;\n}\n.naum-body .chiffres div{\n  flex:1 1 150px; padding:14px 16px; border-right:1px solid var(--trait);\n}\n.naum-body .chiffres div:last-child{border-right:none;}\n.naum-body .chiffres .n{\n  font-family:\"DM Serif Display\",Georgia,serif; font-size:30px; color:var(--rouge);\n  line-height:1;\n}\n.naum-body .chiffres .l{\n  font-family:\"JetBrains Mono\",monospace; font-size:11px; letter-spacing:.08em;\n  text-transform:uppercase; color:var(--gris); margin-top:6px;\n}\n.naum-body hr{border:none; border-top:1px solid var(--trait); margin:34px 0;}\n.naum-body .note{font-size:14.5px; color:var(--gris);}\n.naum-body .signature{\n  font-family:\"JetBrains Mono\",monospace; font-size:12.5px; color:var(--gris);\n  margin-top:40px; padding-top:16px; border-top:1px solid var(--trait);\n}\n@media (max-width:560px){\n  .naum-body{font-size:17px; padding:24px 18px 36px;}\n  .naum-body h1{font-size:31px;}\n  .naum-body h2{font-size:22px;}\n  .naum-body .chiffres div{flex:1 1 50%;}\n}\n<\/style>\n<\/head>\n<body>\n<article class=\"naum-body\">\n  <p class=\"eyebrow\">\u00c9checs sur silicium \u00b7 65C02 \u00b7 4,9152 MHz<\/p>\n  <h1>ShahMatic Neo6502<\/h1>\n  <p class=\"sous-titre\">Si on avait su en 1987\u2026<\/p>\n  <p class=\"chapo\">La question de ShahMatic Neo6502 tient en une phrase : qu&#8217;est-ce que les algorithmes <em>modernes<\/em> peuvent apporter \u00e0 une machine d&#8217;\u00e9checs d\u00e9di\u00e9e sur le <em>vieux<\/em> mat\u00e9riel qui l&#8217;a vue na\u00eetre ? Autrement dit, sans d\u00e9tour : un \u00ab Stockfish sur 6502 \u00bb bat-il un Novag Super Expert C \u2014 sur le m\u00eame 6502 ? Pour y r\u00e9pondre, on prend un moteur aux standards de 2026 et on le comprime dans le silicium d&#8217;un Mephisto modulaire de 1987, pour le coter contre les programmes d&#8217;\u00e9poque sur exactement ce mat\u00e9riel.<\/p>\n  <div class=\"encadre\">\n    <h3>T\u00e9l\u00e9charger Shahmatic Neo6502 v16<\/h3>\n    <p>Le programme complet pour Windows 64 bits, pr\u00eat \u00e0 jouer, sans rien installer : la ROM Neo65 v16 et son module d&#8217;ouvertures HG440, dans MessChess (MAME 0.220 de Franz Huber), avec la fa\u00e7ade de la page en ligne.<\/p>\n    <p><a href=\"https:\/\/www.chess.lumn.eu\/neo6502\/Shahmatic_Neo_v16.zip\"><strong>Shahmatic_Neo_v16.zip<\/strong><\/a> (13 Mo). D\u00e9zippez le dossier o\u00f9 vous voulez, cl\u00e9 USB comprise, puis double-cliquez sur <code>Shahmatic Neo.bat<\/code>.<\/p>\n    <p class=\"note\">MAME peut signaler que le CRC de la ROM ne correspond pas \u00e0 celle du Mephisto Rebel dont on emprunte le pilote : c&#8217;est normal, appuyez sur une touche. Pour jouer sans rien t\u00e9l\u00e9charger : <a href=\"https:\/\/www.chess.lumn.eu\/neo6502\/\">Shahmatic Neo6502 en ligne<\/a>, la m\u00eame ROM dans le navigateur.<\/p>\n  <\/div>\n  <h2>Ce que fait Shahmatic Neo v16<\/h2>\n  <ul>\n    <li><strong>Le vrai code, instruction par instruction.<\/strong> La ROM de 32 Ko et le module d&#8217;ouvertures HG440 (2 603 positions) tournent sur le 65C02 \u00e9mul\u00e9 du Mephisto MM IV, \u00e0 4,9152 MHz avec 8 Ko de RAM, exactement comme ils tourneraient sur la machine.<\/li>\n    <li><strong>Jouer \u00e0 la souris.<\/strong> Cliquez la pi\u00e8ce puis la case d&#8217;arriv\u00e9e. Neo r\u00e9fl\u00e9chit, montre son coup par les diodes et le joue lui-m\u00eame sur l&#8217;\u00e9chiquier.<\/li>\n    <li><strong>ENT<\/strong> fait jouer Neo pour le camp au trait (pour lui laisser les Blancs) ; pendant sa r\u00e9flexion, il le fait jouer tout de suite.<\/li>\n    <li><strong>Niveaux<\/strong> : LEV, un chiffre (case A1 = 1 \u2026 H8 = 8, 9 = analyse), puis ENT : de 1 s \u00e0 60 s par coup.<\/li>\n    <li><strong>Reprise du dernier coup<\/strong>, <strong>nouvelle partie<\/strong> avec les pi\u00e8ces remises en place, <strong>mise en place d&#8217;une position<\/strong> (vider l&#8217;\u00e9chiquier, POS, r\u00e9serve de pi\u00e8ces), promotion au choix.<\/li>\n    <li><strong>Afficheur de 4 \u00d7 20 caract\u00e8res<\/strong> : coup envisag\u00e9 et \u00e9valuation, niveau, et deux pendules par camp (coup en cours, temps total) en temps de la machine \u00e9mul\u00e9e. Un panneau donne la profondeur, l&#8217;\u00e9valuation, le temps du coup, les n\u0153uds, les n\u0153uds par seconde et la variante principale.<\/li>\n    <li><strong>Vue Noirs en bas<\/strong> (Tab, Video Options) et commandes au clavier (Suppr = CL, P = POS, L = LEV, Entr\u00e9e = ENT\u2026).<\/li>\n  <\/ul>\n  <h2>Performances et \u00e9volution, en bref<\/h2>\n  <div class=\"chiffres\">\n    <div><div class=\"n\">1848<\/div><div class=\"l\">Perf v16 \u00b7 423 parties (\u00b118)<\/div><\/div>\n    <div><div class=\"n\">+146<\/div><div class=\"l\">de la v10 \u00e0 la v16, en trois jours<\/div><\/div>\n    <div><div class=\"n\">\u2248&nbsp;+550<\/div><div class=\"l\">depuis la v1 (\u2248 1 300)<\/div><\/div>\n    <div><div class=\"n\">4,9&nbsp;MHz<\/div><div class=\"l\">65C02, sans turbo<\/div><\/div>\n  <\/div>\n  <p>Chaque version est mesur\u00e9e en gauntlet contre les m\u00eames huit machines d\u00e9di\u00e9es de 1986-1990, \u00e9mul\u00e9es \u00e0 leur fr\u00e9quence d&#8217;origine : Super Expert C (1880), MM V (1822), Forte A (1803), MM IV (1787), Simultano (1747), Par Excellence (1725), Prisma (1724), Turbo 16K (1437).<\/p>\n  <table>\n    <thead><tr><th>Version<\/th><th>Ce qui change<\/th><th>Perf. au gauntlet<\/th><\/tr><\/thead>\n    <tbody>\n      <tr><td>v1 (27 oct.)<\/td><td>moteur moderne complet, trop lent pour le 6502<\/td><td>\u2248 1 300 (1 sur 10 contre le Forte A)<\/td><\/tr>\n      <tr><td>v2 \u00e0 v9<\/td><td>recherche r\u00e9accord\u00e9e pour 3-4 plis, tables d&#8217;\u00e9valuation, SEE bon march\u00e9, pions pass\u00e9s, livre<\/td><td>1727 (v9, 74 parties)<\/td><\/tr>\n      <tr><td>v10 (7 nov.)<\/td><td>ROM de 32 Ko pour le vrai MM IV<\/td><td>1702 \u00b115 (575 p.)<\/td><\/tr>\n      <tr><td>v11<\/td><td>tables d&#8217;\u00e9valuation r\u00e9gl\u00e9es<\/td><td>1753 \u00b114 (602 p.)<\/td><\/tr>\n      <tr><td>v12, v12b, v14, v15<\/td><td>vitesse et \u00e9valuation fine (v15 : 16 % de cycles en moins)<\/td><td>1733 \u00e0 1780<\/td><\/tr>\n      <tr><td>v15b<\/td><td>livre corrig\u00e9 par Stockfish, module HG440<\/td><td>1815 \u00b122 (283 p.)<\/td><\/tr>\n      <tr><td><strong>v16 (9 nov.)<\/strong><\/td><td>table de transposition de 512 entr\u00e9es dans 8 Ko de RAM, coups inutiles filtr\u00e9s avant d&#8217;\u00eatre jou\u00e9s<\/td><td><strong>1848 \u00b118 (423 p.)<\/strong><\/td><\/tr>\n    <\/tbody>\n  <\/table>\n  <p>Le r\u00e9sultat de la v16 adversaire par adversaire est plus bas, dans \u00ab O\u00f9 en est la v16 \u00bb. Le d\u00e9tail de chaque version, de chaque mesure et de chaque id\u00e9e abandonn\u00e9e est dans la <strong>chronique de Neo65<\/strong>, en bas de cette page.<\/p>\n\n  <p>En 1987, ce mat\u00e9riel, c&#8217;\u00e9tait 32 Ko de ROM, un module d&#8217;ouvertures, 8 Ko de RAM et un 65C02 \u00e0 4,9 MHz. Les meilleurs programmes de l&#8217;\u00e9poque \u2014 Spracklen, Schr\u00f6der, Kittinger, Lang \u2014 \u00e9taient le fruit de plusieurs ann\u00e9es de sueur en assembleur. L&#8217;id\u00e9e est de leur opposer, sur leur propre puce, quarante ans de th\u00e9orie accumul\u00e9e depuis.<\/p>\n  <p>Pas en trichant sur le mat\u00e9riel. Neo6502 n&#8217;est pas une version \u00ab turbo \u00bb. Il tourne sur le <strong>m\u00eame 65C02 \u00e9mul\u00e9, \u00e0 la m\u00eame fr\u00e9quence d&#8217;origine<\/strong> (le mat\u00e9riel du Mephisto MM IV : 4,9152 MHz, 8 Ko de RAM, ROM de 32 Ko et module d&#8217;ouvertures HG440), et il est cot\u00e9 contre les programmes d\u00e9di\u00e9s de l&#8217;\u00e9poque <em>sur ce m\u00eame mat\u00e9riel<\/em>. Un Mephisto MM IV ou MM V, un Novag Super Expert C, un Fidelity Par Excellence : tous des 65C02 \u00e0 ~5 MHz. C&#8217;est un combat \u00e0 armes strictement \u00e9gales \u2014 seul le code change.<\/p>\n  <h2>La r\u00e8gle du jeu : la v\u00e9rit\u00e9 au cycle pr\u00e8s<\/h2>\n  <p>Un programme moderne qui pr\u00e9tend jouer \u00ab comme en 1987 \u00bb doit prouver qu&#8217;il vit vraiment dans les contraintes de 1987. Toute la cha\u00eene de Neo6502 est b\u00e2tie l\u00e0-dessus. Le moteur a une <strong>r\u00e9f\u00e9rence C bit-\u00e0-bit identique \u00e0 l&#8217;assembleur 65C02<\/strong>, rev\u00e9rifi\u00e9e \u00e0 chaque modification : le simulateur <code>vboard<\/code>, fid\u00e8le au cycle, sert d&#8217;arbitre \u00e0 la fois de l&#8217;identit\u00e9 (m\u00eame coup, m\u00eames n\u0153uds) et du co\u00fbt (cycles r\u00e9ellement d\u00e9pens\u00e9s). La ROM d\u00e9ploy\u00e9e est reconstruite exactement par les sources. Chaque id\u00e9e est tranch\u00e9e par des matchs au <em>budget de n\u0153uds r\u00e9el<\/em>, avec un al\u00e9a de \u00b115 % pour \u00e9viter les parties dupliqu\u00e9es que donnent des moteurs d\u00e9terministes sur un livre fini.<\/p>\n  <p>Cette discipline n&#8217;est pas de la coquetterie : elle est la seule fa\u00e7on de savoir si un \u00ab progr\u00e8s \u00bb moderne en est vraiment un une fois ramen\u00e9 dans un espace o\u00f9 le cycle d&#8217;horloge se compte.<\/p>\n  <h2>v1 \u2014 le mur de la lenteur<\/h2>\n  <p>La premi\u00e8re version porte tout l&#8217;attirail d&#8217;un moteur contemporain : \u00e9lagages, recherche de calme, table de transposition, \u00e9valuation effil\u00e9e. R\u00e9sultat du premier gauntlet contre un Novag Constellation Forte A : <strong>1 sur 10<\/strong>, environ 300 Elo en dessous. Il r\u00e9fl\u00e9chit pourtant bien son temps \u2014 mais il perd par la tactique, en finissant les parties \u00e0 dix ou vingt pions de retard.<\/p>\n  <p>Le diagnostic est la cl\u00e9 de tout le projet. \u00c0 5 s par coup, le 65C02 n&#8217;abat qu&#8217;environ <strong>700 n\u0153uds par seconde<\/strong> : \u00e0 peine 4 000 n\u0153uds, soit une profondeur 3 compl\u00e8te et une profondeur 4 jamais termin\u00e9e. Les d\u00e9di\u00e9s de 1987, bien plus rapides par n\u0153ud, atteignaient 5 \u00e0 6 demi-coups. Neo tombait donc dans des fourchettes \u00e0 2-3 plis que ses adversaires voyaient. Pire : <strong>83 \u00e0 93 % des n\u0153uds<\/strong> partaient dans la recherche de calme. Le moteur \u00e9tait moderne ; le silicium, lui, \u00e9tait de 1987, et il ne pardonnait rien.<\/p>\n  <h2>v2 \u00e0 v4 \u2014 r\u00e9accorder la recherche pour trois plis<\/h2>\n  <p>Premi\u00e8re le\u00e7on, contre-intuitive : beaucoup de techniques \u00ab modernes \u00bb sont r\u00e9gl\u00e9es pour des recherches profondes et deviennent nuisibles \u00e0 3 plis. Il a fallu les d\u00e9saccorder, une \u00e0 une, mesure \u00e0 l&#8217;appui.<\/p>\n  <ul>\n    <li><strong>D\u00e9sactiver les r\u00e9ductions tardives (LMR) : +45.<\/strong> \u00c0 profondeur 3-4, r\u00e9duire, c&#8217;est rater des tactiques.<\/li>\n    <li><strong>Utiliser l&#8217;it\u00e9ration interrompue : +71.<\/strong> Avant, l&#8217;it\u00e9ration de profondeur 4, jamais finie, \u00e9tait jet\u00e9e \u2014 soit ~60 % du temps de r\u00e9flexion perdu.<\/li>\n    <li><strong>Futilit\u00e9 \u00e0 la fronti\u00e8re : +33<\/strong> \u00e0 temps fixe.<\/li>\n  <\/ul>\n  <p>Bilan v4 contre v1, \u00e0 temps \u00e9gal : <strong>+61 Elo<\/strong>. Aucune id\u00e9e neuve, seulement des r\u00e9glages adapt\u00e9s \u00e0 la profondeur r\u00e9elle. Et une s\u00e9rie de pistes s\u00e9duisantes sur le papier mais \u00e9cart\u00e9es apr\u00e8s mesure (extension de reprise \u221234, tri \u00e0 deux \u00e9tages gratuit en n\u0153uds mais nul en cycles\u2026) : sur ce mat\u00e9riel, <em>ce que dit la th\u00e9orie ne compte pas, seul compte ce que dit le chronom\u00e8tre<\/em>.<\/p>\n  <h2>Ce que Stockfish 11 avait \u00e0 nous apprendre<\/h2>\n  <p>Pour choisir les apports suivants, plut\u00f4t que de deviner, on a interrog\u00e9 un ma\u00eetre. Stockfish 11 (\u00e9valuation classique) a \u00e9t\u00e9 recompil\u00e9 avec <strong>24 interrupteurs<\/strong> : chaque version amput\u00e9e d&#8217;un \u00e9l\u00e9ment a jou\u00e9 600 parties contre le Stockfish complet, \u00e0 1 500 n\u0153uds par coup \u2014 l&#8217;\u00e9quivalent de Neo6502 \u00e0 15 s sur le 6502. On obtient ainsi, pour chaque id\u00e9e, un Elo \u00ab rapport\u00e9 \u00bb, qu&#8217;on croise avec son <strong>co\u00fbt en cycles sur 65C02<\/strong>.<\/p>\n  <p>Le classement est net. En or, pas cher : la <strong>futilit\u00e9 inverse<\/strong> (co\u00fbt nul), l&#8217;<strong>\u00e9lagage SEE<\/strong> de la recherche de calme et des coups vers une case attaqu\u00e9e (co\u00fbt moyen), les <strong>pions pass\u00e9s dynamiques<\/strong> (quasi gratuits avec des masques de pions incr\u00e9mentaux). Trop chers pour le 6502 : la s\u00e9curit\u00e9 du roi, la mobilit\u00e9. Inutiles ou nuisibles \u00e0 cette profondeur : extension singuli\u00e8re, ProbCut, \u00e9lagages par nombre de coups ou contre-coups. Une mesure r\u00e9sume l&#8217;\u00e9cart de r\u00e9gime : <strong>un n\u0153ud de Stockfish vaut environ sept n\u0153uds de Neo6502<\/strong>.<\/p>\n  <h2>v5 \u00e0 v9 \u2014 la mont\u00e9e<\/h2>\n  <p>\u00c0 partir de l\u00e0, chaque version ajoute un apport choisi pour son rapport Elo-par-cycle, et chacun est confirm\u00e9 par match natif au budget r\u00e9el.<\/p>\n  <table>\n    <thead>\n      <tr><th>Version<\/th><th>Apport<\/th><th>Gain<\/th><\/tr>\n    <\/thead>\n    <tbody>\n      <tr><td class=\"v\">v2\u2013v4<\/td><td>Recherche r\u00e9accord\u00e9e (sans LMR, it\u00e9ration partielle, futilit\u00e9)<\/td><td class=\"gain\">+61<\/td><\/tr>\n      <tr><td class=\"v\">v5<\/td><td>Tables d&#8217;\u00e9valuation effil\u00e9es, r\u00e9gl\u00e9es sur des positions \u00e9tiquet\u00e9es par Stockfish<\/td><td class=\"gain\">+40<\/td><\/tr>\n      <tr><td class=\"v\">v6<\/td><td>Futilit\u00e9 inverse (marge 120\/pli, prof. \u2264 3)<\/td><td class=\"gain\">+16<\/td><\/tr>\n      <tr><td class=\"v\">v7<\/td><td>SEE complet + carte des cases attaqu\u00e9es + \u00e9lagage avant de jouer<\/td><td class=\"gain\">+39*<\/td><\/tr>\n      <tr><td class=\"v\">v8<\/td><td>Pions pass\u00e9s dynamiques en finale (masques incr\u00e9mentaux)<\/td><td class=\"gain\">+38*<\/td><\/tr>\n      <tr><td class=\"v\">v9<\/td><td>Livre d&#8217;ouvertures tir\u00e9 de parties r\u00e9elles, v\u00e9rifi\u00e9 par Stockfish<\/td><td class=\"gain\">livre<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n  <p class=\"note\">* gains mesur\u00e9s <em>\u00e0 temps \u00e9gal<\/em> \u2014 le test le plus s\u00e9v\u00e8re, voir ci-dessous.<\/p>\n  <p>La v7 illustre la tension centrale du projet. Ajouter le SEE au complet rapporte beaucoup <em>\u00e0 nombre de n\u0153uds \u00e9gal<\/em> \u2014 mais il ralentit le n\u0153ud de 22 %, et \u00e0 <em>temps<\/em> \u00e9gal ce ralentissement mangeait tout le gain (\u22123). Il a fallu le rendre bon march\u00e9 : une carte des cases attaqu\u00e9es calcul\u00e9e une fois par n\u0153ud (treize fois moins de balayages), puis un \u00e9lagage effectu\u00e9 <em>avant<\/em> de jouer le coup. Alors seulement le SEE bascule de \u22123 \u00e0 <strong>+39 \u00e0 temps \u00e9gal<\/strong>. C&#8217;est tout le projet en miniature : sur ce silicium, <strong>une bonne id\u00e9e ne vaut que ce que co\u00fbtent ses cycles<\/strong>.<\/p>\n  <h2>O\u00f9 en est la v16<\/h2>\n  <p>La v16, du 9 novembre, a jou\u00e9 le m\u00eame gauntlet que toutes les versions : les huit machines d\u00e9di\u00e9es du panel, \u00e9mul\u00e9es \u00e0 leur fr\u00e9quence d&#8217;origine, 15 s de machine par coup. \u00c0 <strong>423 parties<\/strong>, elle marque <strong>273,5 points (64,7 %)<\/strong> pour une moyenne d&#8217;adversaires de 1743, soit une performance de <strong>1848 \u00b118<\/strong> sur la liste maison. C&#8217;est la meilleure de toutes les versions de Neo.<\/p>\n  <table>\n    <thead><tr><th>Adversaire (cote)<\/th><th>Score de Neo v16<\/th><\/tr><\/thead>\n    <tbody>\n      <tr><td>Novag Super Expert C (1880)<\/td><td>46 %<\/td><\/tr>\n      <tr><td>Mephisto MM V (1822)<\/td><td>59 %<\/td><\/tr>\n      <tr><td>Novag Constellation Forte A (1803)<\/td><td>61 %<\/td><\/tr>\n      <tr><td>Mephisto MM IV (1787)<\/td><td>55 %<\/td><\/tr>\n      <tr><td>Saitek Simultano (1747)<\/td><td>84 %<\/td><\/tr>\n      <tr><td>Fidelity Par Excellence (1725)<\/td><td>48 %<\/td><\/tr>\n      <tr><td>Saitek Prisma (1724)<\/td><td>75 %<\/td><\/tr>\n      <tr><td>Saitek Turbo 16K (1437)<\/td><td>96 %<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n  <p>Neo reste un peu intransitif : il bat nettement le MM V et le Forte A, qui lui r\u00e9sistaient \u00e0 70 % jusqu&#8217;\u00e0 la v15, mais rend encore des points au Par Excellence, pourtant moins bien cot\u00e9. \u00c0 ces profondeurs, le style de l&#8217;adversaire compte presque autant que sa force. Il marque autant avec les Noirs (65,9 %) qu&#8217;avec les Blancs (63,4 %).<\/p>\n  <p>La r\u00e9ponse \u00e0 la question de d\u00e9part est donc : <strong>presque.<\/strong> Sur le m\u00eame 65C02, Neo passe devant le MM IV, le Forte A et le MM V. Seul le Novag Super Expert C (1880) reste devant, et Neo lui prend d\u00e9j\u00e0 46 % des points.<\/p>\n  <h2>Une partie : le Forte A d\u00e9mont\u00e9<\/h2>\n  <p>Une moyenne cache les \u00e9clairs. Le plus net de la campagne est une victoire en <strong>24 coups sur le Novag Constellation Forte A<\/strong> (1803), l&#8217;un des plus forts du panel. D\u00e9fense fran\u00e7aise Winawer ; au dixi\u00e8me coup, le fou blanc se visse en <span class=\"mono\">f6<\/span> et fige le roque noir ; puis l&#8217;attaque d\u00e9ferle sur <span class=\"mono\">h7<\/span> et s&#8217;ach\u00e8ve par un <strong>sacrifice de dame<\/strong> : <span class=\"mono\">21.Dxh7+ Rxh7 22.Th3+ Dh6 23.Txh6+ Rg8 24.Th8#<\/span>. Un final de manuel \u2014 trouv\u00e9 par un moteur qui tourne sur un 65C02 \u00e0 4,9 MHz. La partie est rejouable coup \u00e0 coup dans l&#8217;\u00e9chiquier ci-dessous.<\/p>\n  <h2>Premi\u00e8res conclusions \u2014 code neuf contre code ancien<\/h2>\n  <p>Le chiffre qui compte n&#8217;est pas 1848. C&#8217;est qu&#8217;il aura fallu <strong>environ un an<\/strong> \u2014 debout sur quarante ans de th\u00e9orie \u2014 pour venir frapper \u00e0 la porte de machines m\u00fbries sur <em>plusieurs<\/em> ann\u00e9es par quelques-uns des meilleurs programmeurs d&#8217;\u00e9checs du monde, et parfois les bousculer. C&#8217;est court. Et \u00e7a dit quelque chose.<\/p>\n  <p>Ce que le code neuf apporte, c&#8217;est de la <strong>vitesse d&#8217;arriv\u00e9e<\/strong> et de la <strong>rigueur<\/strong>. Quarante ans de th\u00e9orie \u2014 \u00e9lagages principiels, SEE, \u00e9valuation effil\u00e9e r\u00e9gl\u00e9e par un moteur moderne, bon ordre des coups, table de transposition \u2014 am\u00e8nent tr\u00e8s vite \u00e0 un niveau d&#8217;amateur s\u00e9rieux, chaque pas \u00e9tant mesur\u00e9, r\u00e9versible, et l&#8217;assembleur prouv\u00e9 identique au C. On ne t\u00e2tonne pas : on sait quoi ajouter, et combien \u00e7a rapporte.<\/p>\n  <p>Ce que le code neuf ne fait <em>pas tout seul<\/em>, c&#8217;est renverser les meilleurs programmes de 1987 sur leur propre puce. Trois raisons, qui se r\u00e9pondent. D&#8217;abord la lenteur brutale du 6502 \u00e9crase la profondeur : \u00e0 3-4 plis, la moiti\u00e9 de l&#8217;arsenal moderne, pens\u00e9 pour des recherches profondes, perd sa valeur. Ensuite les programmes d&#8217;\u00e9poque \u00e9taient <strong>taill\u00e9s \u00e0 la main pour cette puce<\/strong> \u2014 plus de n\u0153uds par seconde, et des d\u00e9cennies de connaissance \u00e9chiqu\u00e9enne sp\u00e9cifique cuite dans l&#8217;ordre des coups. Enfin, et c&#8217;est la le\u00e7on qui revient \u00e0 chaque version : <strong>sur un mat\u00e9riel minuscule, le co\u00fbt par cycle commande tout<\/strong>, et le code g\u00e9n\u00e9rique moderne paie une taxe par n\u0153ud qu&#8217;il faut regagner, un n\u0153ud \u00e0 la fois.<\/p>\n  <p>Autrement dit : la connaissance moderne vous conduit aux portes du gratin en quelques jours ; pour y entrer, il faut payer le vieux prix, celui qui faisait la grandeur du code ancien. C&#8217;est ce qu&#8217;ont fait les versions 10 \u00e0 16 : une ROM de 32 Ko pour le vrai MM IV, 16 % de cycles en moins en v15, un livre corrig\u00e9 coup par coup, puis en v16 une table de transposition de 512 entr\u00e9es tass\u00e9e dans 8 Ko de RAM et des coups inutiles filtr\u00e9s avant d&#8217;\u00eatre jou\u00e9s. R\u00e9sultat : 1848, devant le MM IV, le Forte A et le MM V. Seul le Super Expert C reste devant.<\/p>\n  <p>La suite est donc \u00e9crite d&#8217;avance, et elle est de 1987 : tables d&#8217;attaque incr\u00e9mentales, g\u00e9n\u00e9ration des prises par victime, make\/unmake all\u00e9g\u00e9. Pour passer devant le dernier d&#8217;entre eux, le Super Expert C, Neo6502 devra faire ce qui a fait les ma\u00eetres.<\/p>\n  <p class=\"signature\">ShahMatic \u00b7 chess.lumn.eu \u2014 Neo6502 v16 sur le mat\u00e9riel du Mephisto MM IV, 65C02 \u00e0 4,9152 MHz. Toutes les cotes sont issues de parties jou\u00e9es sur la liste maison.<\/p>\n<\/article>\n<\/body>\n<\/html>\n\n\n\n<!doctype html>\n<html lang=\"fr\"><head>\n<meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>Neo6502 \u2013 Forte A, une partie<\/title>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=DM+Serif+Display:ital@0;1&#038;family=DM+Sans:ital,wght@0,400;0,500;0,700;1,400&#038;family=JetBrains+Mono:wght@400;600&#038;display=swap\" rel=\"stylesheet\">\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=DM+Serif+Display:ital@0;1&family=DM+Sans:ital,wght@0,400;0,500;0,700;1,400&family=JetBrains+Mono:wght@400;600&display=swap');\n.naum-body{--creme:#f7f4ee;--encre:#2b2b2b;--rouge:#c0392b;--or:#b8863b;--trait:#e3ddd0;--gris:#6b665c;\n --clair:#efe3cf;--fonce:#c9a66b;--surbril:rgba(184,134,59,.45);\n max-width:820px;margin:0 auto;padding:30px 24px 40px;background:var(--creme);color:var(--encre);\n font-family:\"DM Sans\",-apple-system,Segoe UI,Roboto,sans-serif;font-size:17px;line-height:1.6;}\n.naum-body *{box-sizing:border-box;}\n.naum-body .eyebrow{font-family:\"JetBrains Mono\",monospace;font-size:12px;letter-spacing:.18em;\n text-transform:uppercase;color:var(--or);margin:0 0 8px;font-weight:600;}\n.naum-body h2{font-family:\"DM Serif Display\",Georgia,serif;font-weight:400;font-size:27px;line-height:1.12;\n margin:0 0 4px;padding-bottom:7px;border-bottom:2px solid var(--rouge);}\n.naum-body .meta{font-family:\"JetBrains Mono\",monospace;font-size:12.5px;color:var(--gris);margin:8px 0 20px;}\n.naum-body .jeu{display:flex;gap:22px;align-items:flex-start;flex-wrap:wrap;}\n.naum-body .plateau-wrap{flex:0 0 auto;}\n.naum-body .plateau{width:min(58vw,420px);aspect-ratio:1;display:grid;\n grid-template-columns:repeat(8,1fr);grid-template-rows:repeat(8,1fr);\n border:3px solid #6f5a39;border-radius:4px;overflow:hidden;box-shadow:0 2px 10px rgba(0,0,0,.12);}\n.naum-body .case{position:relative;display:flex;align-items:center;justify-content:center;\n font-size:min(7.2vw,52px);line-height:1;user-select:none;}\n.naum-body .case.cl{background:var(--clair);}\n.naum-body .case.fo{background:var(--fonce);}\n.naum-body .case.hl::after{content:\"\";position:absolute;inset:0;background:var(--surbril);}\n.naum-body .p{position:relative;z-index:2;}\n.naum-body .p.b{color:#f8f5ef;text-shadow:0 0 1px #2b2b2b,0 1px 1px rgba(0,0,0,.35),0 0 2px #2b2b2b,\n  1px 0 0 #3a2f1c,-1px 0 0 #3a2f1c,0 1px 0 #3a2f1c,0 -1px 0 #3a2f1c;}\n.naum-body .p.n{color:#241d14;text-shadow:0 1px 1px rgba(0,0,0,.25);}\n.naum-body .coord{position:absolute;z-index:3;font-family:\"JetBrains Mono\",monospace;\n font-size:9px;color:rgba(40,30,15,.5);}\n.naum-body .coord.f{right:3px;bottom:2px;}\n.naum-body .coord.r{left:3px;top:2px;}\n.naum-body .controles{display:flex;gap:6px;margin:12px 0 0;}\n.naum-body .controles button{font-family:\"JetBrains Mono\",monospace;font-size:15px;\n background:#fffdf8;border:1px solid var(--trait);border-radius:5px;padding:7px 11px;cursor:pointer;color:var(--encre);}\n.naum-body .controles button:hover{border-color:var(--or);}\n.naum-body .controles .flip{margin-left:auto;font-size:12px;}\n.naum-body .panneau{flex:1 1 280px;min-width:260px;}\n.naum-body .coups{font-family:\"JetBrains Mono\",monospace;font-size:14px;line-height:1.5;\n background:#fffdf8;border:1px solid var(--trait);border-radius:5px;padding:10px 12px;\n max-height:270px;overflow:auto;}\n.naum-body .coups .n{color:var(--gris);}\n.naum-body .coups .c{cursor:pointer;padding:1px 4px;border-radius:3px;}\n.naum-body .coups .c:hover{background:#efe9dd;}\n.naum-body .coups .c.actif{background:var(--rouge);color:#fff;}\n.naum-body .note{margin:14px 0 0;background:#fffdf8;border:1px solid var(--trait);\n border-left:4px solid var(--or);border-radius:4px;padding:13px 15px;font-size:15.5px;min-height:70px;}\n.naum-body .note.mat{border-left-color:var(--rouge);}\n.naum-body .note b{font-family:\"JetBrains Mono\",monospace;}\n.naum-body .pied{font-family:\"JetBrains Mono\",monospace;font-size:11.5px;color:var(--gris);\n margin-top:22px;padding-top:12px;border-top:1px solid var(--trait);}\n@media(max-width:560px){.naum-body .plateau{width:92vw;}.naum-body .case{font-size:11vw;}}\n<\/style><\/head>\n<body>\n<article class=\"naum-body\">\n <p class=\"eyebrow\">Une partie \u00b7 6502 \u00b7 4,9152 MHz<\/p>\n <h2>Neo6502 d\u00e9monte le Forte A<\/h2>\n <p class=\"meta\" id=\"entete\"><\/p>\n <div class=\"jeu\">\n  <div class=\"plateau-wrap\">\n   <div class=\"plateau\" id=\"plateau\"><\/div>\n   <div class=\"controles\">\n    <button id=\"debut\" title=\"D\u00e9but\">&#9198;<\/button>\n    <button id=\"prec\" title=\"Pr\u00e9c\u00e9dent\">&#9664;<\/button>\n    <button id=\"suiv\" title=\"Suivant\">&#9654;<\/button>\n    <button id=\"fin\" title=\"Fin\">&#9197;<\/button>\n    <button id=\"flip\" class=\"flip\" title=\"Retourner\">Retourner<\/button>\n   <\/div>\n  <\/div>\n  <div class=\"panneau\">\n   <div class=\"coups\" id=\"coups\"><\/div>\n   <div class=\"note\" id=\"note\"><\/div>\n  <\/div>\n <\/div>\n <p class=\"pied\">ShahMatic \u00b7 chess.lumn.eu \u2014 partie du gauntlet maison, Neo6502 (Blancs) contre Novag Constellation Forte A, 15 s\/coup. Cliquez un coup, ou fl\u00e8ches \u2190 \u2192.<\/p>\n<\/article>\n<script>\nconst G = {\"white\": \"ShahMatic Neo6502\", \"black\": \"Novag Constellation Forte A (1803)\", \"result\": \"1\u20130\", \"event\": \"Gauntlet maison, 15 s\/coup, 03\/11\/2026\", \"fens\": [\"rnbqkbnr\/pppppppp\/8\/8\/8\/8\/PPPPPPPP\/RNBQKBNR w KQkq - 0 1\", \"rnbqkbnr\/pppppppp\/8\/8\/4P3\/8\/PPPP1PPP\/RNBQKBNR b KQkq - 0 1\", \"rnbqkbnr\/pppp1ppp\/4p3\/8\/4P3\/8\/PPPP1PPP\/RNBQKBNR w KQkq - 0 2\", \"rnbqkbnr\/pppp1ppp\/4p3\/8\/3PP3\/8\/PPP2PPP\/RNBQKBNR b KQkq - 0 2\", \"rnbqkbnr\/ppp2ppp\/4p3\/3p4\/3PP3\/8\/PPP2PPP\/RNBQKBNR w KQkq - 0 3\", \"rnbqkbnr\/ppp2ppp\/4p3\/3p4\/3PP3\/2N5\/PPP2PPP\/R1BQKBNR b KQkq - 1 3\", \"rnbqk1nr\/ppp2ppp\/4p3\/3p4\/1b1PP3\/2N5\/PPP2PPP\/R1BQKBNR w KQkq - 2 4\", \"rnbqk1nr\/ppp2ppp\/4p3\/3pP3\/1b1P4\/2N5\/PPP2PPP\/R1BQKBNR b KQkq - 0 4\", \"rnbqk1nr\/pp3ppp\/4p3\/2ppP3\/1b1P4\/2N5\/PPP2PPP\/R1BQKBNR w KQkq - 0 5\", \"rnbqk1nr\/pp3ppp\/4p3\/2ppP3\/1b1P4\/2N2N2\/PPP2PPP\/R1BQKB1R b KQkq - 1 5\", \"rnbqk1nr\/pp3ppp\/4p3\/3pP3\/1b1p4\/2N2N2\/PPP2PPP\/R1BQKB1R w KQkq - 0 6\", \"rnbqk1nr\/pp3ppp\/4p3\/3pP3\/1b1Q4\/2N2N2\/PPP2PPP\/R1B1KB1R b KQkq - 0 6\", \"r1bqk1nr\/pp3ppp\/2n1p3\/3pP3\/1b1Q4\/2N2N2\/PPP2PPP\/R1B1KB1R w KQkq - 1 7\", \"r1bqk1nr\/pp3ppp\/2n1p3\/3pP3\/1b4Q1\/2N2N2\/PPP2PPP\/R1B1KB1R b KQkq - 2 7\", \"r1bqk1nr\/pp3ppp\/2n1p3\/3pP3\/6Q1\/2b2N2\/PPP2PPP\/R1B1KB1R w KQkq - 0 8\", \"r1bqk1nr\/pp3ppp\/2n1p3\/3pP3\/6Q1\/2P2N2\/P1P2PPP\/R1B1KB1R b KQkq - 0 8\", \"r1bqk1nr\/pp3p1p\/2n1p1p1\/3pP3\/6Q1\/2P2N2\/P1P2PPP\/R1B1KB1R w KQkq - 0 9\", \"r1bqk1nr\/pp3p1p\/2n1p1p1\/3pP1B1\/6Q1\/2P2N2\/P1P2PPP\/R3KB1R b KQkq - 1 9\", \"r1bqk2r\/pp2np1p\/2n1p1p1\/3pP1B1\/6Q1\/2P2N2\/P1P2PPP\/R3KB1R w KQkq - 2 10\", \"r1bqk2r\/pp2np1p\/2n1pBp1\/3pP3\/6Q1\/2P2N2\/P1P2PPP\/R3KB1R b KQkq - 3 10\", \"r1b1k2r\/pp2np1p\/2n1pBp1\/q2pP3\/6Q1\/2P2N2\/P1P2PPP\/R3KB1R w KQkq - 4 11\", \"r1b1k2r\/pp2np1p\/2n1pBp1\/q2pP3\/6Q1\/2P2N2\/P1P2PPP\/2KR1B1R b kq - 5 11\", \"r1b1k2r\/pp2np1p\/2n1pBp1\/3pP3\/6Q1\/q1P2N2\/P1P2PPP\/2KR1B1R w kq - 6 12\", \"r1b1k2r\/pp2np1p\/2n1pBp1\/3pP3\/6Q1\/q1P2N2\/P1P2PPP\/1K1R1B1R b kq - 7 12\", \"r1b2rk1\/pp2np1p\/2n1pBp1\/3pP3\/6Q1\/q1P2N2\/P1P2PPP\/1K1R1B1R w - - 8 13\", \"r1b2rk1\/pp2np1p\/2n1pBp1\/3pP1Q1\/8\/q1P2N2\/P1P2PPP\/1K1R1B1R b - - 9 13\", \"r4rk1\/pp1bnp1p\/2n1pBp1\/3pP1Q1\/8\/q1P2N2\/P1P2PPP\/1K1R1B1R w - - 10 14\", \"r4rk1\/pp1bnp1p\/2n1pBp1\/3pP1Q1\/8\/q1PB1N2\/P1P2PPP\/1K1R3R b - - 11 14\", \"r1r3k1\/pp1bnp1p\/2n1pBp1\/3pP1Q1\/8\/q1PB1N2\/P1P2PPP\/1K1R3R w - - 12 15\", \"r1r3k1\/pp1bnp1p\/2n1pBp1\/3pP1Q1\/8\/q1PB1N2\/P1P2PPP\/1K1RR3 b - - 13 15\", \"r1r1b1k1\/pp2np1p\/2n1pBp1\/3pP1Q1\/8\/q1PB1N2\/P1P2PPP\/1K1RR3 w - - 14 16\", \"r1r1b1k1\/pp2np1p\/2n1pBp1\/3pP1Q1\/8\/q1PBRN2\/P1P2PPP\/1K1R4 b - - 15 16\", \"r1r1b1k1\/p3np1p\/2n1pBp1\/1p1pP1Q1\/8\/q1PBRN2\/P1P2PPP\/1K1R4 w - - 0 17\", \"r1r1b1k1\/p3np1p\/2n1pBp1\/1p1pP1Q1\/7N\/q1PBR3\/P1P2PPP\/1K1R4 b - - 1 17\", \"r1r1b1k1\/4np1p\/p1n1pBp1\/1p1pP1Q1\/7N\/q1PBR3\/P1P2PPP\/1K1R4 w - - 0 18\", \"r1r1b1k1\/4np1p\/p1n1pBp1\/1p1pP1Q1\/7N\/q1PB2R1\/P1P2PPP\/1K1R4 b - - 1 18\", \"r1r3k1\/3bnp1p\/p1n1pBp1\/1p1pP1Q1\/7N\/q1PB2R1\/P1P2PPP\/1K1R4 w - - 2 19\", \"r1r3k1\/3bnp1p\/p1n1pBpQ\/1p1pP3\/7N\/q1PB2R1\/P1P2PPP\/1K1R4 b - - 3 19\", \"r1r3k1\/3b1p1p\/p1n1pBpQ\/1p1pPn2\/7N\/q1PB2R1\/P1P2PPP\/1K1R4 w - - 4 20\", \"r1r3k1\/3b1p1p\/p1n1pBpQ\/1p1pPN2\/8\/q1PB2R1\/P1P2PPP\/1K1R4 b - - 0 20\", \"r1r2qk1\/3b1p1p\/p1n1pBpQ\/1p1pPN2\/8\/2PB2R1\/P1P2PPP\/1K1R4 w - - 1 21\", \"r1r2qk1\/3b1p1Q\/p1n1pBp1\/1p1pPN2\/8\/2PB2R1\/P1P2PPP\/1K1R4 b - - 0 21\", \"r1r2q2\/3b1p1k\/p1n1pBp1\/1p1pPN2\/8\/2PB2R1\/P1P2PPP\/1K1R4 w - - 0 22\", \"r1r2q2\/3b1p1k\/p1n1pBp1\/1p1pPN2\/8\/2PB3R\/P1P2PPP\/1K1R4 b - - 1 22\", \"r1r5\/3b1p1k\/p1n1pBpq\/1p1pPN2\/8\/2PB3R\/P1P2PPP\/1K1R4 w - - 2 23\", \"r1r5\/3b1p1k\/p1n1pBpR\/1p1pPN2\/8\/2PB4\/P1P2PPP\/1K1R4 b - - 0 23\", \"r1r3k1\/3b1p2\/p1n1pBpR\/1p1pPN2\/8\/2PB4\/P1P2PPP\/1K1R4 w - - 1 24\", \"r1r3kR\/3b1p2\/p1n1pBp1\/1p1pPN2\/8\/2PB4\/P1P2PPP\/1K1R4 b - - 2 24\"], \"sans\": [\"e4\", \"e6\", \"d4\", \"d5\", \"Nc3\", \"Bb4\", \"e5\", \"c5\", \"Nf3\", \"cxd4\", \"Qxd4\", \"Nc6\", \"Qg4\", \"Bxc3+\", \"bxc3\", \"g6\", \"Bg5\", \"Nge7\", \"Bf6\", \"Qa5\", \"O-O-O\", \"Qa3+\", \"Kb1\", \"O-O\", \"Qg5\", \"Bd7\", \"Bd3\", \"Rfc8\", \"Rhe1\", \"Be8\", \"Re3\", \"b5\", \"Nh4\", \"a6\", \"Rg3\", \"Bd7\", \"Qh6\", \"Nf5\", \"Nxf5\", \"Qf8\", \"Qxh7+\", \"Kxh7\", \"Rh3+\", \"Qh6\", \"Rxh6+\", \"Kg8\", \"Rh8#\"], \"from\": [\"e2\", \"e7\", \"d2\", \"d7\", \"b1\", \"f8\", \"e4\", \"c7\", \"g1\", \"c5\", \"d1\", \"b8\", \"d4\", \"b4\", \"b2\", \"g7\", \"c1\", \"g8\", \"g5\", \"d8\", \"e1\", \"a5\", \"c1\", \"e8\", \"g4\", \"c8\", \"f1\", \"f8\", \"h1\", \"d7\", \"e1\", \"b7\", \"f3\", \"a7\", \"e3\", \"e8\", \"g5\", \"e7\", \"h4\", \"a3\", \"h6\", \"g8\", \"g3\", \"f8\", \"h3\", \"h7\", \"h6\"], \"to\": [\"e4\", \"e6\", \"d4\", \"d5\", \"c3\", \"b4\", \"e5\", \"c5\", \"f3\", \"d4\", \"d4\", \"c6\", \"g4\", \"c3\", \"c3\", \"g6\", \"g5\", \"e7\", \"f6\", \"a5\", \"c1\", \"a3\", \"b1\", \"g8\", \"g5\", \"d7\", \"d3\", \"c8\", \"e1\", \"e8\", \"e3\", \"b5\", \"h4\", \"a6\", \"g3\", \"d7\", \"h6\", \"f5\", \"f5\", \"f8\", \"h7\", \"h7\", \"h3\", \"h6\", \"h6\", \"g8\", \"h8\"], \"notes\": {\"6\": \"D\u00e9fense fran\u00e7aise, variante Winawer (3\u2026Fb4). Les Noirs l\u00e2chent le fou de cases noires contre le cavalier c3.\", \"16\": \"10.Ff6 ! Le fou blanc s'installe au c\u0153ur du camp noir et fige le roque. Tout l'\u00e9difice d'attaque part de cette case.\", \"24\": \"13.Dg5 \u2014 les pi\u00e8ces blanches convergent vers le roi noir ; les Noirs, eux, s'agitent \u00e0 l'aile dame.\", \"37\": \"19.Dh6 \u2014 la dame rejoint l'attaque. La case faible, c'est h7.\", \"41\": \"21.Dxh7+ !! Sacrifice de dame. \u00c0 partir d'ici tout est forc\u00e9 \u2014 et c'est un 6502 \u00e0 4,9 MHz qui l'a vu.\", \"42\": \"21\u2026Rxh7 : le roi est tir\u00e9 au grand air, sans retour.\", \"44\": \"22.Th3+ Dh6 : la tour cloue le mat, les Noirs n'ont que l'interposition.\", \"46\": \"23.Txh6+ Rg8 : la derni\u00e8re d\u00e9fense tombe.\", \"47\": \"24.Th8# \u2014 mat. Un final de manuel, sign\u00e9 par un moteur n\u00e9 quarante ans trop tard, sur le silicium de 1987.\"}};\nconst GLY={p:'\u265f',n:'\u265e',b:'\u265d',r:'\u265c',q:'\u265b',k:'\u265a'};\nlet ply=0, flip=false;\nconst plateau=document.getElementById('plateau');\ndocument.getElementById('entete').textContent=G.white+\"  \u2014  \"+G.black+\"   \"+G.result+\"   \u00b7   \"+G.event;\nfunction parseFEN(fen){\n  const rows=fen.split(' ')[0].split('\/');const b=[];\n  for(const row of rows){const r=[];for(const ch of row){\n    if(\/\\d\/.test(ch)){for(let i=0;i<+ch;i++)r.push(null);}\n    else r.push(ch);}b.push(r);}\n  return b; \/\/ b[0]=rang 8 ... b[7]=rang 1\n}\nfunction sqName(fileIdx,rankIdx){ \/\/ rankIdx 0..7 top(8)->bottom(1)\n  return \"abcdefgh\"[fileIdx]+(8-rankIdx);\n}\nfunction render(){\n  const b=parseFEN(G.fens[ply]);\n  const mvFrom = ply>0 ? G.from[ply-1] : null;\n  const mvTo   = ply>0 ? G.to[ply-1]   : null;\n  plateau.innerHTML=\"\";\n  const order=[...Array(8).keys()];\n  const rows = flip ? order.slice().reverse() : order;      \/\/ index de rang (0=rang8)\n  for(const ri of rows){\n    const cols = flip ? order.slice().reverse() : order;\n    for(const ci of cols){\n      const cell=document.createElement('div');\n      const dark=(ri+ci)%2===1;\n      cell.className=\"case \"+(dark?\"fo\":\"cl\");\n      const name=sqName(ci,ri);\n      if(name===mvFrom||name===mvTo) cell.classList.add(\"hl\");\n      const pc=b[ri][ci];\n      if(pc){const span=document.createElement('span');\n        span.className=\"p \"+(pc===pc.toUpperCase()?\"b\":\"n\");\n        span.textContent=GLY[pc.toLowerCase()];cell.appendChild(span);}\n      \/\/ coordonnees sur les bords\n      const lastRow = flip ? ri===0 : ri===7;\n      const firstCol= flip ? ci===7 : ci===0;\n      if(lastRow){const c=document.createElement('span');c.className=\"coord f\";c.textContent=\"abcdefgh\"[ci];cell.appendChild(c);}\n      if(firstCol){const c=document.createElement('span');c.className=\"coord r\";c.textContent=(8-ri);cell.appendChild(c);}\n      plateau.appendChild(cell);\n    }\n  }\n  \/\/ liste des coups\n  renderMoves();\n  \/\/ note\n  const note=document.getElementById('note');\n  const n=G.notes[ply];\n  if(n){note.innerHTML=n;note.classList.toggle('mat', ply===G.sans.length);}\n  else{note.innerHTML=\"<span style='color:var(--gris)'>\"+(ply===0?\"Position de d\u00e9part. D\u00e9fense fran\u00e7aise \u00e0 venir.\":\"\")+\"<\/span>\";note.classList.remove('mat');}\n}\nfunction renderMoves(){\n  const box=document.getElementById('coups');box.innerHTML=\"\";\n  for(let i=0;i<G.sans.length;i++){\n    if(i%2===0){const num=document.createElement('span');num.className=\"n\";num.textContent=\" \"+(i\/2+1)+\".\";box.appendChild(num);}\n    const s=document.createElement('span');s.className=\"c\"+((i+1)===ply?\" actif\":\"\");\n    s.textContent=G.sans[i]+\" \";s.onclick=()=>{ply=i+1;render();};box.appendChild(s);\n  }\n  const act=box.querySelector('.actif'); if(act) act.scrollIntoView({block:'nearest'});\n}\ndocument.getElementById('debut').onclick=()=>{ply=0;render();};\ndocument.getElementById('prec').onclick =()=>{if(ply>0){ply--;render();}};\ndocument.getElementById('suiv').onclick =()=>{if(ply<G.sans.length){ply++;render();}};\ndocument.getElementById('fin').onclick  =()=>{ply=G.sans.length;render();};\ndocument.getElementById('flip').onclick =()=>{flip=!flip;render();};\ndocument.addEventListener('keydown',e=>{\n  if(e.key==='ArrowRight'){if(ply<G.sans.length){ply++;render();}e.preventDefault();}\n  if(e.key==='ArrowLeft'){if(ply>0){ply--;render();}e.preventDefault();}\n});\nrender();\n<\/script>\n<\/body><\/html>\n\n\n\n<title>Chronique Neo65<\/title>\n<meta name=\"claude:viewport-fit-sides\" content=\"cover\">\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=IBM+Plex+Sans:ital,wght@0,400;0,500;0,600;1,400&#038;family=IBM+Plex+Mono:wght@400;500&#038;family=IBM+Plex+Serif:wght@500;600&#038;display=swap\">\n<style>\n\/* Disposition : une colonne de lecture (68 ch), une frise des versions \u00e0 gauche sur grand \u00e9cran,\n   tableaux pleine largeur. Palette : ardoise bleut\u00e9e du panneau d'un Mephisto, accent ambre des diodes. *\/\n:root{\n  --bg:#f3f1ec; --paper:#fbfaf7; --fg:#1f2328; --muted:#5b636d; --rule:#d9d4ca;\n  --accent:#b4530e; --accent-soft:#f3e2d1; --ok:#2e7d4f; --ko:#a3322a; --neutre:#6b7280;\n  --mono:\"IBM Plex Mono\",ui-monospace,SFMono-Regular,Menlo,monospace;\n  --sans:\"IBM Plex Sans\",system-ui,-apple-system,\"Segoe UI\",sans-serif;\n  --serif:\"IBM Plex Serif\",Georgia,\"Times New Roman\",serif;\n}\n@media (prefers-color-scheme: dark){:root:not([data-theme=\"light\"]){\n  --bg:#15181c; --paper:#1c2026; --fg:#e6e3dc; --muted:#a3a9b2; --rule:#2e343c;\n  --accent:#f0a24a; --accent-soft:#3a2a18; --ok:#5fbf86; --ko:#e4766c; --neutre:#9aa3ad; color-scheme:dark}}\n:root[data-theme=\"dark\"]{\n  --bg:#15181c; --paper:#1c2026; --fg:#e6e3dc; --muted:#a3a9b2; --rule:#2e343c;\n  --accent:#f0a24a; --accent-soft:#3a2a18; --ok:#5fbf86; --ko:#e4766c; --neutre:#9aa3ad; color-scheme:dark}\n*{box-sizing:border-box}\nbody{background:var(--bg);color:var(--fg);font-family:var(--sans);font-size:16px;line-height:1.55;margin:0;\n  padding-block:0 4rem;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px))}\n.page{max-width:72rem;margin:0 auto}\nheader.titre{padding-block:3rem 2rem;border-bottom:1px solid var(--rule)}\n.sur{font-family:var(--mono);font-size:.8rem;letter-spacing:.08em;text-transform:uppercase;color:var(--accent)}\nh1{font-family:var(--serif);font-weight:600;font-size:clamp(2rem,5vw,3.2rem);line-height:1.1;margin:.4rem 0 .8rem;text-wrap:balance}\n.chapo{font-size:1.1rem;max-width:68ch;color:var(--muted);margin:0}\n.meta{font-family:var(--mono);font-size:.8rem;color:var(--muted);margin-top:1rem}\nh2{font-family:var(--serif);font-weight:600;font-size:1.6rem;margin:3rem 0 1rem;text-wrap:balance;scroll-margin-top:1rem}\nh3{font-size:1.1rem;font-weight:600;margin:1.6rem 0 .5rem}\np,li{max-width:68ch}\nsection>p,section>ul{margin-block:.6rem}\ncode,.mono{font-family:var(--mono);font-size:.9em}\n.grille{display:grid;grid-template-columns:repeat(auto-fit,minmax(14rem,1fr));gap:1rem;margin:1.5rem 0}\n.tuile{background:var(--paper);border:1px solid var(--rule);padding:1rem 1.1rem;min-width:0}\n.tuile .k{font-family:var(--mono);font-size:.75rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}\n.tuile .v{font-family:var(--serif);font-size:1.7rem;font-weight:600;margin:.2rem 0 .1rem;font-variant-numeric:tabular-nums}\n.tuile .s{font-size:.9rem;color:var(--muted)}\n.tabwrap{overflow-x:auto;margin:1rem 0 1.5rem}\ntable{border-collapse:collapse;width:100%;font-size:.93rem;font-variant-numeric:tabular-nums}\nth,td{text-align:left;padding:.5rem .7rem;border-bottom:1px solid var(--rule);vertical-align:top}\nth{font-family:var(--mono);font-weight:500;font-size:.75rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}\ntd.num,th.num{text-align:right}\ntr.fort td{font-weight:600}\n.etat{display:inline-block;font-family:var(--mono);font-size:.72rem;letter-spacing:.05em;text-transform:uppercase;padding:.1rem .45rem;border:1px solid currentColor;border-radius:2px;white-space:nowrap}\n.garde{color:var(--ok)} .abandon{color:var(--ko)} .reserve{color:var(--neutre)} .cours{color:var(--accent)}\n\/* frise des versions *\/\n.frise{display:grid;grid-template-columns:7.5rem 1fr;gap:0 1.5rem;margin-top:1.5rem}\n.frise .date{font-family:var(--mono);font-size:.8rem;color:var(--muted);padding-top:.35rem;text-align:right;border-right:2px solid var(--rule);padding-right:1rem;position:relative}\n.frise .date::after{content:\"\";position:absolute;right:-6px;top:.6rem;width:10px;height:10px;border-radius:50%;background:var(--accent);border:2px solid var(--bg)}\n.frise .corps{padding-bottom:2rem;min-width:0}\n.frise h3{margin-top:0}\n.frise .corps p,.frise .corps li{max-width:68ch}\n.chiffre{font-family:var(--mono);color:var(--accent);font-weight:500}\nblockquote{margin:1.2rem 0;padding:.8rem 1rem;border-left:3px solid var(--accent);background:var(--accent-soft);max-width:68ch}\nblockquote p{margin:0}\n.deux{display:grid;grid-template-columns:repeat(auto-fit,minmax(18rem,1fr));gap:1.5rem}\n.deux>div{min-width:0}\nul.serre{padding-left:1.2rem}\nul.serre li{margin:.25rem 0}\n.note{font-size:.9rem;color:var(--muted)}\nnav.sommaire{font-size:.92rem;margin-top:1.5rem;columns:2;column-gap:2rem}\nnav.sommaire a{color:var(--fg);text-decoration:none;border-bottom:1px solid var(--rule)}\nnav.sommaire a:hover,nav.sommaire a:focus{color:var(--accent);border-color:var(--accent)}\nnav.sommaire li{margin:.2rem 0;break-inside:avoid}\na{color:var(--accent)}\n@media (max-width:640px){.frise{grid-template-columns:1fr}.frise .date{text-align:left;border-right:0;border-left:2px solid var(--rule);padding-left:1rem;padding-right:0}.frise .date::after{right:auto;left:-6px}nav.sommaire{columns:1}}\n@media (prefers-reduced-motion:no-preference){a{transition:color .15s}}\n<\/style>\n\n<div class=\"page\">\n<header class=\"titre\">\n  <div class=\"sur\">Shahmatic Neo \u00b7 Mephisto MM IV \u00b7 65C02 \u00e0 4,9152 MHz<\/div>\n  <h1>Chronique de Neo65, du 27 octobre au 9 novembre 2026<\/h1>\n  <p class=\"chapo\">Un programme d&#8217;\u00e9checs \u00e9crit avec ce qu&#8217;on sait en 2026, comprim\u00e9 dans les 32 Ko de ROM et les 8 Ko de RAM d&#8217;un Mephisto modulaire de 1987, et cot\u00e9 contre les programmes de l&#8217;\u00e9poque sur le m\u00eame mat\u00e9riel \u00e9mul\u00e9. Toutes les \u00e9tapes, toutes les mesures, ce qui a \u00e9t\u00e9 gard\u00e9 et ce qui a \u00e9t\u00e9 jet\u00e9.<\/p>\n  <p class=\"meta\">R\u00e9dig\u00e9 le 08\/11\/2026, mis \u00e0 jour le 09\/11 \u00e0 23 h \u00b7 <strong>v16 : 1848 \u00b118 \u00e0 423 parties, la meilleure performance de Neo, Forte A et MM V enfin au-dessus de 50 %<\/strong> \u00b7 v15b (livre corrig\u00e9) : 1815 \u00b122 \u00e0 283 parties \u00b7 v15 : 1769 \u00b117 \u00e0 416 parties \u00b7 de la v10 \u00e0 la v16 : +146 en huit gauntlets (5 473 parties)<\/p>\n  <nav class=\"sommaire\"><ul class=\"serre\" style=\"list-style:none;padding:0\">\n    <li><a href=\"#cible\">1. La cible et la r\u00e8gle du jeu<\/a><\/li>\n    <li><a href=\"#methode\">2. La m\u00e9thode : C de r\u00e9f\u00e9rence, assembleur bit-identique, mesures<\/a><\/li>\n    <li><a href=\"#frise\">3. Les versions, une \u00e0 une<\/a><\/li>\n    <li><a href=\"#echelle\">4. Ce que valent les versions entre elles<\/a><\/li>\n    <li><a href=\"#essais\">5. Tout ce qui a \u00e9t\u00e9 essay\u00e9 : gard\u00e9, abandonn\u00e9, en r\u00e9serve<\/a><\/li>\n    <li><a href=\"#lecons\">6. Les le\u00e7ons<\/a><\/li>\n    <li><a href=\"#etat\">7. \u00c9tat des lieux au 8 novembre<\/a><\/li>\n    <li><a href=\"#derives\">8. Les d\u00e9riv\u00e9s de Neo : o\u00f9 il joue, ce qu&#8217;il faut r\u00e9percuter<\/a><\/li>\n    <li><a href=\"#perspectives\">9. Perspectives<\/a><\/li>\n  <\/ul><\/nav>\n<\/header>\n\n<div class=\"grille\">\n  <div class=\"tuile\"><div class=\"k\">N\u0153uds par seconde<\/div><div class=\"v\">\u2248 470<\/div><div class=\"s\">10 394 cycles par n\u0153ud \u00e0 4,9152 MHz (v12b). Un PC en fait 2 500 000.<\/div><\/div>\n  <div class=\"tuile\"><div class=\"k\">Performance Elo (liste du labo)<\/div><div class=\"v\">1 702 \u2192 1 848<\/div><div class=\"s\">v10 : 1702 \u00b115 sur 575 parties ; v16 : 1848 \u00b118 sur 423, soit +146 en trois jours de gauntlets (section 4).<\/div><\/div>\n  <div class=\"tuile\"><div class=\"k\">Progr\u00e8s mesur\u00e9 depuis la v1<\/div><div class=\"v\">\u2248 +430<\/div><div class=\"s\">v1 : 10 % contre le panel (~1 300). v10 \u2192 v12b : +62 au match natif.<\/div><\/div>\n  <div class=\"tuile\"><div class=\"k\">ROM libre<\/div><div class=\"v\">\u2248 830 o<\/div><div class=\"s\">v16 : le d\u00e9roulement de la v15 (4 Ko) puis les filtres et la table compacte ont presque tout repris ; 6 288 o libres en v14.<\/div><\/div>\n<\/div>\n\n<section id=\"cible\">\n<h2>1. La cible et la r\u00e8gle du jeu<\/h2>\n<p>Le point de d\u00e9part, le 27 octobre, s&#8217;appelait \u00ab si on avait su en 1987 \u00bb : prendre les algorithmes qui font la force des programmes d&#8217;aujourd&#8217;hui, les \u00e9crire en C puis en assembleur 65C02, et les faire tenir dans un Mephisto modulaire. La premi\u00e8re cible \u00e9tait le pilote MAME <code>mm4rebel<\/code> (65C02 \u00e0 4,9152 MHz, 8 Ko de RAM, 48 Ko de ROM). Le 7 novembre, Valter a resserr\u00e9 : <strong>la seule cible est \u00ab Shahmatic Neo \u00bb sur le mat\u00e9riel du vrai MM IV<\/strong>, ROM de 32 Ko en 0x8000-0xFFFF, la fente du module HG440 (0x4000-0x7FFF) laiss\u00e9e libre ou occup\u00e9e par un module de notre fabrication, et la version qui joue en ligne sur chess.lumn.eu doit \u00eatre la m\u00eame ROM. Tout ce qui n&#8217;\u00e9tait pas conforme (les ROM de 48 Ko, v1 \u00e0 v9) a \u00e9t\u00e9 effac\u00e9.<\/p>\n<p>Trois contraintes gouvernent tout le reste :<\/p>\n<ul class=\"serre\">\n  <li><strong>Le temps.<\/strong> \u00c0 15 s par coup, la machine voit 7 000 n\u0153uds environ. Une fonction d&#8217;\u00e9valuation qui co\u00fbte 10 % de cycles co\u00fbte 10 % de n\u0153uds, et \u00e0 cette profondeur un n\u0153ud vaut cher : tout gain \u00ab \u00e0 n\u0153uds \u00e9gaux \u00bb doit \u00eatre repay\u00e9 en vitesse.<\/li>\n  <li><strong>La m\u00e9moire.<\/strong> 8 Ko de RAM pour l&#8217;\u00e9chiquier, les piles, l&#8217;historique, la table de transposition (256 entr\u00e9es, 2 Ko) ; 32 Ko de ROM pour le code, les tables et, jusqu&#8217;\u00e0 la v13, le livre d&#8217;ouvertures.<\/li>\n  <li><strong>La mesure.<\/strong> Les adversaires du gauntlet sont huit machines d\u00e9di\u00e9es de 1986-1990 cot\u00e9es sur la liste du labo (Super Expert C 1880, MM V 1822, Forte A 1803, MM IV 1787, Simultano 1747, Par Excellence 1725, Prisma 1724, Turbo 16K 1437), \u00e9mul\u00e9es sous MAME avec leur fr\u00e9quence d&#8217;origine. Le gauntlet accroche Neo \u00e0 cette liste ; il ne d\u00e9partage pas deux versions voisines.<\/li>\n<\/ul>\n<\/section>\n\n<section id=\"methode\">\n<h2>2. La m\u00e9thode<\/h2>\n<div class=\"deux\">\n<div>\n<h3>Un seul programme, deux formes<\/h3>\n<p>Neo65 existe en C de r\u00e9f\u00e9rence et en assembleur 65C02 (<code>prim.s<\/code>, <code>recherche.s<\/code>), et les deux sont tenus <strong>identiques au bit pr\u00e8s<\/strong> : m\u00eame nombre de n\u0153uds, m\u00eame score \u00e0 chaque profondeur, sur des positions de milieu et de finale, v\u00e9rifi\u00e9 dans un \u00e9mulateur 65C02 du MM IV (NMI \u00e0 600 Hz acquitt\u00e9e en 0x3800) \u00e0 chaque changement. Le C se compile aussi sur PC : c&#8217;est l&#8217;instrument de mesure, et depuis le 8 novembre un moteur UCI \u00e0 part enti\u00e8re (Neo65 v14-UCI).<\/p>\n<h3>Cha\u00eene<\/h3>\n<p>llvm-mos pour le C 65C02, \u00e9dition de liens 0x8000-0xFFFF, <code>patch_reel.py<\/code> pour la variante du vrai MM IV (double lecture des capteurs par <code>JSR $FFF0<\/code>). \u00c9mulateur Node pour les cycles par fonction (<code>mesure2.py<\/code>, <code>agg.py<\/code>) et pour l&#8217;identit\u00e9 ROM\/natif (<code>cmp32.py<\/code>). R\u00e9glage des tables par m\u00e9thode de Texel sur 143 311 positions calmes de vraies parties, cibles Stockfish 16 profondeur 9 (80 %) et r\u00e9sultat (20 %).<\/p>\n<\/div>\n<div>\n<h3>Trois instruments, trois usages<\/h3>\n<table>\n<tr><th>Instrument<\/th><th>Pr\u00e9cision<\/th><th>Sert \u00e0<\/th><\/tr>\n<tr><td>Match natif, 2 000 parties, budget de n\u0153uds cal\u00e9 sur les cycles par n\u0153ud mesur\u00e9s<\/td><td class=\"num\">\u00b18 Elo<\/td><td>d\u00e9partager deux versions \u00e0 temps machine \u00e9gal, en 40 min<\/td><\/tr>\n<tr><td>Gauntlet Mac, 8 adversaires, \u00e9mulation \u00d710, 1,5 s r\u00e9elles = 15 s machine par coup, 6 parties de front<\/td><td class=\"num\">\u00b114 (600 p.) \u00b7 \u00b16 (3 040 p.)<\/td><td>fixer l&#8217;altitude sur la liste de cotes<\/td><\/tr>\n<tr><td>\u00c9tiquetage Stockfish de positions r\u00e9elles, r\u00e9gression des r\u00e9sidus<\/td><td class=\"num\">\u2014<\/td><td>trouver quoi \u00e9valuer ; jamais pour d\u00e9cider (voir v13)<\/td><\/tr>\n<\/table>\n<blockquote><p>R\u00e8gle fix\u00e9e le 8 novembre : rien n&#8217;entre dans Neo sur la foi d&#8217;un \u00e9tiquetage ou d&#8217;un raisonnement ; seulement sur un match natif \u00e0 temps \u00e9gal, et \u00e0 \u2265 +8 Elo mesur\u00e9s.<\/p><\/blockquote>\n<\/div>\n<\/div>\n<\/section>\n\n<section id=\"frise\">\n<h2>3. Les versions, une \u00e0 une<\/h2>\n<p class=\"note\">Les gains \u00ab natif \u00bb sont \u00e0 budget de n\u0153uds ou de temps machine \u00e9gal, 1 000 \u00e0 2 000 parties. Les performances de gauntlet sont celles du Mac, cotes de la liste du labo.<\/p>\n\n<div class=\"frise\">\n<div class=\"date\">27-28 oct.<\/div><div class=\"corps\">\n<h3>v1 \u2014 le point de d\u00e9part<\/h3>\n<p>Le moteur de base : \u00e9chiquier 0x88, listes de pi\u00e8ces, g\u00e9n\u00e9ration, alpha-b\u00eata avec table de transposition (256 entr\u00e9es), tueurs et historique, recherche de calme, r\u00e9ductions tardives, livre de 1 806 positions, ROM 48 Ko. Premier gauntlet \u00e0 5 s par coup : <span class=\"chiffre\">1,0 \/ 10<\/span>, quelque 300 Elo sous le Forte A. Diagnostic : \u00e0 ~700 n\u0153uds par seconde il voit la profondeur 3 compl\u00e8te, jamais la 4 ; 83-93 % des n\u0153uds sont dans la recherche de calme ; il tombe dans des tactiques \u00e0 deux plis.<\/p>\n<\/div>\n<div class=\"date\">28 oct.<\/div><div class=\"corps\">\n<h3>v2, v3, v4 \u2014 r\u00e9gler la recherche pour la profondeur r\u00e9elle<\/h3>\n<ul class=\"serre\">\n<li><strong>v2<\/strong> : sans r\u00e9ductions tardives (LMR), <span class=\"chiffre\">+45 \u00b110<\/span>. \u00c0 profondeur 3-4, LMR rate des tactiques.<\/li>\n<li><strong>v3<\/strong> : l&#8217;it\u00e9ration interrompue est utilis\u00e9e (<code>PARTIEL<\/code>), <span class=\"chiffre\">+71 \u00b111<\/span>. Avant, 60 % du temps de r\u00e9flexion \u00e9tait jet\u00e9 avec l&#8217;it\u00e9ration jamais finie.<\/li>\n<li><strong>v4<\/strong> : futilit\u00e9 \u00e0 la fronti\u00e8re (marge 150, profondeur 1), <span class=\"chiffre\">+33 \u00b111<\/span> \u00e0 temps fixe. Total v4 contre v1 : <span class=\"chiffre\">+61 \u00b111<\/span>.<\/li>\n<\/ul>\n<p>\u00c9cart\u00e9s apr\u00e8s mesure : calme born\u00e9e, coup nul (neutre), prises \u00e9gales seulement (\u221234 \u00e0 \u221253), parades en \u00e9chec (\u221213), extension de reprise (\u221234), tri \u00e0 deux \u00e9tages (+13 \u00e0 n\u0153uds \u00e9gaux mais 0 cycle gagn\u00e9). Tous conserv\u00e9s en macros, d\u00e9sactiv\u00e9s.<\/p>\n<\/div>\n<div class=\"date\">29 oct.-1er nov.<\/div><div class=\"corps\">\n<h3>v5 \u2014 premi\u00e8res tables r\u00e9gl\u00e9es<\/h3>\n<p>Tables pi\u00e8ce-case ajust\u00e9es par Texel sur les premi\u00e8res parties du labo. Tournoi Mac \u00e0 15 s par coup : <span class=\"chiffre\">9,5 \/ 47<\/span>, performance \u2248 1590. La table laissait un d\u00e9faut qu&#8217;on ne verra qu&#8217;en v10 : une tour en g1 valait 31 cp de plus qu&#8217;en h1, d&#8217;o\u00f9 des Tg1\/Tg8 pr\u00e9coces.<\/p>\n<\/div>\n<div class=\"date\">2 nov.<\/div><div class=\"corps\">\n<h3>L&#8217;ablation de Stockfish 11 : savoir quoi copier<\/h3>\n<p>Stockfish 11 (\u00e9valuation classique) compil\u00e9 avec 24 interrupteurs, chaque \u00e9l\u00e9ment retir\u00e9 joue 600 parties contre la version compl\u00e8te \u00e0 1 500 n\u0153uds par coup (l&#8217;\u00e9quivalent de Neo \u00e0 9 000). Ce qui rapporte \u00e0 ce budget : fen\u00eatres d&#8217;aspiration (\u2212112 sans), \u00e9lagage de la calme (\u2212107), <strong>futilit\u00e9 inverse (\u221297)<\/strong>, <strong>\u00e9lagage SEE (\u221275)<\/strong>, \u00e9checs calmes (\u221241) ; en \u00e9valuation, <strong>pions pass\u00e9s (\u221282)<\/strong>, s\u00e9curit\u00e9 du roi (\u221263), menaces (\u221258). Ce qui ne sert \u00e0 rien ou nuit : structure de pions (\u22124), mobilit\u00e9 (\u22123), LMR (0), \u00e9lagage au nombre de coups (+40), contre-coups (+97). Un n\u0153ud de Stockfish 11 vaut environ sept n\u0153uds de Neo.<\/p>\n<\/div>\n<div class=\"date\">2 nov.<\/div><div class=\"corps\">\n<h3>v6, v7 \u2014 futilit\u00e9 inverse et SEE<\/h3>\n<ul class=\"serre\">\n<li><strong>v6<\/strong> : futilit\u00e9 inverse (profondeur \u2264 3, marge 120 par pli), <span class=\"chiffre\">+16 \u00b18<\/span>, et le n\u0153ud passe de 8 300 \u00e0 7 050 cycles.<\/li>\n<li><strong>SEE<\/strong> (\u00e9change statique) : dans la calme +28, \u00e9lagage des prises perdantes +25, \u00e9lagage des coups tranquilles vers une case attaqu\u00e9e : <span class=\"chiffre\">+65 \u00b18<\/span> \u00e0 n\u0153uds \u00e9gaux. Mais la premi\u00e8re version (v8, 9 030 cycles par n\u0153ud) ne gagnait rien \u00e0 temps \u00e9gal : le ralentissement de 22 % mangeait tout.<\/li>\n<li><strong>v7<\/strong> : SEE all\u00e9g\u00e9 par une carte des cases attaqu\u00e9es (13 fois moins de balayages) et \u00e9lagage avant <code>joue()<\/code> : <span class=\"chiffre\">+39 \u00b111<\/span> \u00e0 temps \u00e9gal contre v6. Deux bogues trouv\u00e9s par la comparaison C\/asm (retour Z=1 pour un attaquant en a1, variable partag\u00e9e).<\/li>\n<\/ul>\n<\/div>\n<div class=\"date\">2-4 nov.<\/div><div class=\"corps\">\n<h3>v9 \u2014 pions pass\u00e9s, et la ROM de 32 Ko<\/h3>\n<p>\u00c9valuation dynamique des pions pass\u00e9s (le premier terme de l&#8217;ablation), v9 en ROM 48 Ko. Gauntlet Mac : <span class=\"chiffre\">605 parties, perf 1699<\/span>. Les 4 novembre naissent les premi\u00e8res ROM de 32 Ko pour le vrai MM IV (<code>mm4tk<\/code>, 0x8000) : on d\u00e9couvrira le 8 novembre, par comparaison binaire, qu&#8217;elles avaient \u00e9t\u00e9 reli\u00e9es \u00e0 partir des sources du 2 novembre, <em>sans<\/em> les pions pass\u00e9s, et que leurs sources n&#8217;existaient plus. Une version \u00e0 18 MHz a aussi \u00e9t\u00e9 essay\u00e9e puis \u00e9cart\u00e9e : Valter veut que le 6502 se mesure \u00e0 sa fr\u00e9quence d&#8217;origine.<\/p>\n<\/div>\n<div class=\"date\">7 nov.<\/div><div class=\"corps\">\n<h3>v10 \u2014 le livre tir\u00e9 des parties<\/h3>\n<p>Premi\u00e8re version officiellement \u00ab MM IV 32 Ko \u00bb : patch binaire de la ROM du 4 novembre. Livre de <strong>706 positions<\/strong> (7 013 octets) : 220 corrections Stockfish aux positions o\u00f9 Neo perdait 50 cp d\u00e8s la sortie, les 402 positions jou\u00e9es dans 630 parties repond\u00e9r\u00e9es selon les r\u00e9sultats, le haut de l&#8217;arbre complet jusqu&#8217;au niveau 8, consultation permanente. Le livre complet (<code>livre3<\/code>, 2 026 positions) ne tenait pas dans la ROM. Gauntlet : <span class=\"chiffre\">258 \/ 575, perf 1702 \u00b115<\/span>. Les pertes viennent des six premiers coups hors livre, et se r\u00e9p\u00e8tent parce que les adversaires sont d\u00e9terministes.<\/p>\n<\/div>\n<div class=\"date\">7 nov.<\/div><div class=\"corps\">\n<h3>v11 \u2014 les tables r\u00e9gl\u00e9es sur 143 311 positions<\/h3>\n<p>Seule la table <code>ptab<\/code> change (1 209 octets). R\u00e9glage prudent (r\u00e9gularisation vers v5) : natif <span class=\"chiffre\">+51<\/span> \u00e0 4 000 n\u0153uds sur les ouvertures d&#8217;entra\u00eenement, mais <span class=\"chiffre\">+30 \u00b18<\/span> \u00e0 9 000 n\u0153uds sur des ouvertures neutres, qui est le vrai chiffre. Gauntlet : <span class=\"chiffre\">312 \/ 602, perf 1753 \u00b114<\/span>, soit +51 \u00b120 sur la v10. Plus gros gains contre le MM IV (+19 %), le Par Excellence (+13 %), le Forte A et le Turbo 16K (+12 %).<\/p>\n<\/div>\n<div class=\"date\">7-8 nov.<\/div><div class=\"corps\">\n<h3>v12 \u2014 cinq termes d&#8217;\u00e9valuation, et la ROM reconstruite<\/h3>\n<p>Analyse des 602 parties v11 : Neo perd 30 cp par coup hors livre contre 35 pour ses adversaires ; il est meilleur qu&#8217;eux du coup 20 au coup 90 et <strong>moins bon en finale<\/strong> ; 99 fois Tb1\/Tb8 dans les 40 premiers plis parce que la colonne ouverte n&#8217;\u00e9tait pas \u00e9valu\u00e9e. D&#8217;o\u00f9 cinq termes sur les masques de pions d\u00e9j\u00e0 tenus \u00e0 jour : tour sur colonne ouverte ou semi-ouverte, pions doubl\u00e9s, isol\u00e9s, bouclier du roi. Natif \u00e0 n\u0153uds \u00e9gaux : <span class=\"chiffre\">+40 \u00b111<\/span>.<\/p>\n<p>Pour la mettre en ROM 32 Ko il a fallu, dans la nuit du 7 au 8, <strong>reconstituer la variante 32 Ko des sources<\/strong> (\u00e9diteur de liens, <code>machine.c<\/code> en taille minimale, plus d&#8217;analyseur FEN, seuil du livre sans division) : il manquait 2 Ko. Co\u00fbt r\u00e9el des termes : <strong>+10 \u00e0 15 % de cycles par n\u0153ud<\/strong>, pas les 0-2 % estim\u00e9s la veille. Gauntlet : <span class=\"chiffre\">323,5 \/ 602, perf 1766 \u00b114<\/span>, +13 \u00b120 sur la v11 : dans le bruit.<\/p>\n<\/div>\n<div class=\"date\">8 nov. matin<\/div><div class=\"corps\">\n<h3>v12b \u2014 la vitesse<\/h3>\n<p>M\u00eames coups, m\u00eame \u00e9valuation, <span class=\"chiffre\">11 046 \u2192 10 394 cycles par n\u0153ud (\u22125,9 %)<\/span> : SEE par listes de pi\u00e8ces au lieu de huit rayons, table <code>ptab<\/code> r\u00e9organis\u00e9e pour que le passage \u00e0 la famille suivante soit un seul <code>INC<\/code>, <code>pm_bascule<\/code> r\u00e9\u00e9crit (95 cycles au lieu de 115), structure et tours en cache. Le gauntlet long (3 040 parties, \u00b16) est lanc\u00e9 : \u00e0 1 597 parties, <span class=\"chiffre\">50 %, perf 1737<\/span>.<\/p>\n<\/div>\n<div class=\"date\">8 nov. midi<\/div><div class=\"corps\">\n<h3>v13 \u2014 finales de pions <span class=\"etat abandon\">abandonn\u00e9e<\/span><\/h3>\n<p>Constat : dans 76 finales de pions pures du gauntlet v12, Neo marque 30 %. 5 431 positions de finales de pions \u00e9tiquet\u00e9es par Stockfish 11 ; deux termes (pion pass\u00e9 imprenable par la r\u00e8gle du carr\u00e9, +600 ; chaque pion +200 en finale de pions) ram\u00e8nent l&#8217;erreur statique de 451 \u00e0 205 cp. Natif : +12 \u00b111 sur 1 000 parties. Il ne restait que 65 octets de ROM.<\/p>\n<p>Le soir, le doute de Valter sur la v12b a conduit au tableau toutes-rondes (section 4) : v13 contre v12b <span class=\"chiffre\">\u22124 \u00b18<\/span> en parties enti\u00e8res, <span class=\"chiffre\">\u22124 \u00b18<\/span> depuis des finales, <span class=\"chiffre\">\u221210 \u00b18<\/span> depuis des finales de pions pures, son propre terrain. Trois mesures, m\u00eame signe : une \u00e9valuation statique plus juste au sens de Stockfish qui ne gagne pas une partie de plus. La recherche faisait d\u00e9j\u00e0 le travail et les bonus d\u00e9forment le choix ailleurs. Abandonn\u00e9e, et avec elle le principe de d\u00e9cider sur un \u00e9tiquetage.<\/p>\n<\/div>\n<div class=\"date\">8 nov. soir<\/div><div class=\"corps\">\n<h3>v14 \u2014 le livre quitte la ROM pour le module HG440 <span class=\"etat garde\">valid\u00e9e<\/span><\/h3>\n<p>Base : les sources v12b, moteur inchang\u00e9. Le livre d&#8217;ouvertures va dans un module de 16 Ko en 0x4000 : <strong>2 026 positions, 2 611 coups<\/strong> (le livre3 complet, dont la v10 n&#8217;\u00e9tait qu&#8217;un extrait) en 12 415 octets, format \u00e0 index de 257 entr\u00e9es et enregistrements compacts (cl\u00e9 24 bits, coups pond\u00e9r\u00e9s). La ROM garde un livre de secours de 115 positions (8 premiers plis, 915 octets) : une seule ROM joue avec ou sans module. <strong>6 288 octets de ROM lib\u00e9r\u00e9s<\/strong>. V\u00e9rifi\u00e9 en natif (les 2 026 positions retrouv\u00e9es, tous les coups conformes, 15 faux positifs sur 100 000 cl\u00e9s au hasard) et dans l&#8217;\u00e9mulateur ; identit\u00e9 ROM\/natif confirm\u00e9e sur deux positions. D\u00e9ploy\u00e9e sur le Mac (pilote <code>neo65mm4v14<\/code>, <code>-cart<\/code>), gauntlet de 3 040 parties pr\u00eat avec un pr\u00e9-vol qui v\u00e9rifie que MAME lit bien le module. Image du module pour une EPROM 27C128 dans une coque de module, pour le vrai MM IV.<\/p>\n<p>Gauntlet Mac du 9 novembre (m\u00eames huit adversaires, \u00d710, 1,5 s), arr\u00eat\u00e9 \u00e0 376 parties pour lib\u00e9rer le Mac : <span class=\"chiffre\">208 \/ 376 (55 %), perf 1780 \u00b118<\/span>, contre une moyenne pond\u00e9r\u00e9e des adversaires de 1742. C&#8217;est la meilleure performance de Neo \u00e0 ce jour, +14 \u00b123 sur la v12 (1766) : le moteur est celui de la v12b, la diff\u00e9rence tient au livre complet et au bruit. Par adversaire : Turbo 16K 86 %, MM IV 64 % (perf 1888), Simultano 68 % (1881), Prisma 64 % (1823), Super Expert C 39 % (1799), Par Excellence 56 % (1764), Forte A 38 % (1718), MM V 29 % (1664). Les deux points faibles restent le MM V et le Forte A. Ces 376 parties tiennent lieu de mesure de la v14.<\/p>\n<\/div>\n<div class=\"date\">9 nov. matin<\/div><div class=\"corps\">\n<h3>v15 \u00ab \u00e9valuation \u00bb \u2014 dix termes de plus <span class=\"etat abandon\">abandonn\u00e9e<\/span><\/h3>\n<p>Treize termes candidats calcul\u00e9s sur les 143 311 positions, r\u00e9gl\u00e9s par Texel en gardant la v14 fig\u00e9e ; dix retenus (pions soutenus, en phalange, arri\u00e9r\u00e9s, tour derri\u00e8re son pass\u00e9, avant-postes de cavalier et de fou, colonnes sans pion devant le roi, mauvais fou, pion pass\u00e9 imparable). En natif : <span class=\"chiffre\">+18 \u00b115 \u00e0 n\u0153uds \u00e9gaux<\/span>, <span class=\"chiffre\">+10 \u00b17<\/span> sur 6 000 parties en retirant un co\u00fbt estim\u00e9 \u00e0 6 %. Port\u00e9 en assembleur (variante l\u00e9g\u00e8re, \u00e9valuations et arbres identiques au C), le co\u00fbt r\u00e9el est de <strong>+13 % de cycles par n\u0153ud<\/strong> : le recalcul de la structure de pions tombe dans 58 % des \u00e9valuations, car elle change \u00e0 chaque coup de pion et \u00e0 chaque annulation. D\u00e9j\u00e0 \u00e0 4 % de co\u00fbt la variante l\u00e9g\u00e8re ne faisait plus que +3 : abandonn\u00e9e. Le\u00e7on : sur ce processeur, un terme doit co\u00fbter moins d&#8217;environ 1 % de vitesse par point d&#8217;Elo qu&#8217;il rapporte.<\/p>\n<\/div>\n<div class=\"date\">9 nov.<\/div><div class=\"corps\">\n<h3>v15 \u00ab vitesse \u00bb \u2014 le m\u00eame programme, 16 % plus rapide <span class=\"etat cours\">au gauntlet<\/span><\/h3>\n<p>M\u00eames coups, m\u00eame \u00e9valuation, m\u00eame arbre que la v14 (v\u00e9rifi\u00e9 n\u0153ud pour n\u0153ud contre le C sur 63 positions et dans la ROM compl\u00e8te jusqu&#8217;\u00e0 la profondeur 9 ; deux parties enti\u00e8res avec le module). Dans l&#8217;\u00e9mulateur du MM IV, interruptions comprises : <span class=\"chiffre\">10 397 \u2192 8 738 cycles par n\u0153ud (\u221216 %)<\/span>, soit 19 % de n\u0153uds de plus dans le m\u00eame temps. Le match natif \u00e9quivalent (la m\u00eame machine avec 6 190 n\u0153uds contre 5 202) donne <span class=\"chiffre\">+38 \u00b110 Elo<\/span>.<\/p>\n<p>D&#8217;o\u00f9 viennent les cycles : le test \u00ab case attaqu\u00e9e \u00bb passe par les listes de pi\u00e8ces au lieu de 24 balayages (\u22125 %) ; les variables chaudes vont en page z\u00e9ro (\u22123,6 %) ; l&#8217;\u00e9chiquier est align\u00e9 sur une page m\u00e9moire (0x0300) ; les rayons des pi\u00e8ces \u00e0 longue port\u00e9e, du cavalier et du roi sont d\u00e9roul\u00e9s dans la g\u00e9n\u00e9ration des coups, l&#8217;\u00e9change de pi\u00e8ces (SEE) et la carte des cases attaqu\u00e9es ; le choix du meilleur coup ne rebalaye plus toute la liste quand plusieurs coups ont le m\u00eame score ; les caches de l&#8217;\u00e9valuation savent quand rien n&#8217;a boug\u00e9 ; la phase de jeu est recalcul\u00e9e \u00e0 l&#8217;annulation, ce qui rend 36 octets de RAM. Le d\u00e9roulement co\u00fbte environ 4 Ko de ROM : il en reste 2 100. Cons\u00e9quence pratique : l&#8217;\u00e9chiquier n&#8217;est plus en 0x07FC mais en 0x0300 ; l&#8217;octet de version de la ROM passe \u00e0 15 et le greffon de la fa\u00e7ade (v1.2) choisit la bonne adresse.<\/p>\n<p><strong>Gauntlet Mac, point \u00e0 416 parties (9 novembre, 15 h 21)<\/strong> : <span class=\"chiffre\">225 \/ 416 (54 %), perf 1769 \u00b117<\/span> contre une moyenne pond\u00e9r\u00e9e de 1741. Par adversaire : Turbo 16K 83 %, Simultano 68 %, Par Excellence 62 %, Prisma 59 %, MM IV 53 %, Super Expert C 48 %, Forte A 30 %, MM V 30 %. C&#8217;est dans la marge de la v14 (1780 \u00b118 \u00e0 376 parties) : les +38 attendus de la vitesse ne se voient pas encore, et ne se verront peut-\u00eatre qu&#8217;au millier de parties. Les deux points faibles sont les m\u00eames qu&#8217;avant : Forte A et MM V, \u00e0 30 % chacun, soit une centaine de points au-dessous de ce que Neo fait contre le reste du panel.<\/p>\n<\/div>\n<div class=\"date\">9 nov.<\/div><div class=\"corps\">\n<h3>v15b \u2014 m\u00eame ROM, livre corrig\u00e9 par Stockfish <span class=\"etat cours\">au gauntlet : 1815 \u00e0 283 parties<\/span><\/h3>\n<p>Le moteur ne change pas d&#8217;un octet (ROM v15, md5 a52062b1 ; le livre de secours compil\u00e9 dans la ROM non plus). Seul le module HG440 change : <strong>livre v14 + 577 corrections = 2 603 positions, 3 188 coups, 15 300 octets<\/strong> (1 084 libres). M\u00e9thode : toutes les parties des gauntlets Mac v10 \u00e0 v15 sont rejou\u00e9es ; chaque position o\u00f9 Neo sort du livre (huit premiers coups apr\u00e8s la sortie) est compt\u00e9e avec ses occurrences et son score ; Stockfish 16 \u00e0 400 000 n\u0153uds note le meilleur coup et le coup de Neo (4 189 positions). Une correction est retenue si Neo perd au moins 50 centipions sur le meilleur coup et que son score dans la position ne d\u00e9passe pas 60 % (ou si la perte atteint 150). Le coup de Stockfish entre seul, au poids maximal. Perte moyenne \u00e9vit\u00e9e 127 cp ; les positions corrig\u00e9es sont revenues 3 263 fois dans les gauntlets, d&#8217;abord contre Forte A (524), Super Expert C (520), MM V (513) et Par Excellence (470), c&#8217;est-\u00e0-dire exactement l\u00e0 o\u00f9 Neo souffre.<\/p>\n<p>Contr\u00f4le dans l&#8217;\u00e9mulateur du MM IV : sur 25 positions corrig\u00e9es tir\u00e9es au hasard et rejou\u00e9es depuis la position initiale, la ROM v15 avec le nouveau module joue la correction 24 fois (la 25e est une position \u00e0 deux dames que le banc ne reconstitue pas). Le gain ne peut se mesurer qu&#8217;au gauntlet, puisque le moteur est identique : <code>gauntlet_neo65_v15b_x10.command<\/code>, m\u00eames adversaires et m\u00eame cadence que la v15 ; il attend la fin du gauntlet v15 s&#8217;il tourne encore. Ce qu&#8217;il faut en attendre : quelques dizaines de points au mieux, et surtout une lecture du poids r\u00e9el de l&#8217;ouverture dans les d\u00e9faites contre Forte A et MM V.<\/p>\n<p><strong>Gauntlet Mac, point \u00e0 283 parties (9 novembre, 18 h 44)<\/strong> : <span class=\"chiffre\">174 \/ 283 (61 %), perf 1815 \u00b122<\/span> contre une moyenne pond\u00e9r\u00e9e de 1734 \u2014 <strong>+46 sur la v15<\/strong> au m\u00eame stade, et exactement l\u00e0 o\u00f9 le livre devait porter : Forte A 46 % (30 % en v15), MM V 47 % (30 %), Super Expert C 41 % (48 %), Par Excellence 65 %, Prisma 62 %, MM IV 54 %, Simultano 82 %, Turbo 16K 89 %. \u00c0 283 parties la barre est encore large, mais le signe est net : la moiti\u00e9 \u00ab glissement positionnel d\u00e8s l&#8217;ouverture \u00bb des d\u00e9faites contre Forte A et MM V \u00e9tait une affaire de livre. Les 577 corrections sont des coups de Stockfish aux positions que les adversaires d\u00e9terministes r\u00e9p\u00e8tent ; la boucle (gauntlet \u2192 positions perdantes hors livre \u2192 corrections \u2192 module) est \u00e0 refaire apr\u00e8s chaque gauntlet.<\/p>\n<p>Une ombre : depuis la v14 (livre dans le module <code>-cart<\/code>), <strong>un cinqui\u00e8me des parties de Neo s&#8217;arr\u00eate<\/strong> (\u00ab s&#8217;est arr\u00eat\u00e9 \u00bb : le relais meurt) et est rejou\u00e9e \u2014 v12b 61 incidents sur 2 196 parties, v14 78\/376, v15 67\/416, v15b 74\/283. Ce n&#8217;est pas le livre (10 arr\u00eats sur 74 en position de livre, pli m\u00e9dian 56). Les r\u00e9sultats restent valides (les parties rejou\u00e9es comptent), mais 20 % du temps de gauntlet est perdu ; cause \u00e0 trouver (MAME, relais ou ROM) avec un relais journalis\u00e9.<\/p>\n<\/div>\n<div class=\"date\">9 nov.<\/div><div class=\"corps\">\n<h3>v16 \u2014 la table de transposition \u00e9tait le verrou <span class=\"etat garde\">au gauntlet : 1848 \u00e0 423 parties<\/span><\/h3>\n<p>Journ\u00e9e partie pour \u00ab inventer des algorithmes \u00bb et finie sur une mesure simple : la table de transposition de 256 entr\u00e9es est trop petite. En natif \u00e0 n\u0153uds \u00e9gaux, <span class=\"chiffre\">512 entr\u00e9es : +16 \u00b18 ; 1 024 : +35 \u00b18 ; 4 096 : +35<\/span>. Le gain vient des coupures par transposition, pas des coups de table (une table de coups seuls de 1 024 entr\u00e9es ne vaut rien : +1). Dans 8 Ko de RAM, 512 entr\u00e9es tiennent avec une <strong>entr\u00e9e de 5 octets<\/strong> : v\u00e9rification 15 bits, profondeur plafonn\u00e9e \u00e0 7, score sur 8 bits (quart de pion), coup et borne log\u00e9s dans les bits libres des cases 0x88 ; un score hors de \u00b1508 (mats) n&#8217;est gard\u00e9 que pour son coup. Une v\u00e9rification sur 8 bits a \u00e9t\u00e9 essay\u00e9e : \u221238, les fausses coupures tuent. La RAM a \u00e9t\u00e9 rendue par ailleurs \u00e0 arbre quasi identique : profondeur maximale 32 \u2192 24 (le pli 20 n&#8217;est atteint que dans 0,06 % des n\u0153uds \u00e0 15 s, jamais le 24), pile de coups 384 \u2192 352, historique 120 \u2192 100 avec remise \u00e0 z\u00e9ro \u00e0 chaque coup irr\u00e9versible (ce qui corrige au passage la d\u00e9tection des r\u00e9p\u00e9titions au-del\u00e0 de 120 plis).<\/p>\n<p>Deuxi\u00e8me gain, \u00e0 arbre strictement identique : en comptant, Neo jouait puis d\u00e9faisait 44 000 coups sur 139 000 qui \u00e9taient soit ill\u00e9gaux \u00e0 coup s\u00fbr (en \u00e9chec, un coup qui ne pare pas ; roi vers une case attaqu\u00e9e), soit \u00e9lagu\u00e9s par la futilit\u00e9 juste apr\u00e8s. Filtres avant joue() en C puis en asm, plus un cache de l&#8217;\u00e9valuation statique par n\u0153ud : <span class=\"chiffre\">\u221232 % d&#8217;appels \u00e0 joue(), \u22124,9 % de cycles<\/span>. Le joue() asm rejetait d\u00e9j\u00e0 vite les coups ill\u00e9gaux, d&#8217;o\u00f9 un gain plus petit que les 12 % de cycles compt\u00e9s en C. Avec la table compacte (qui co\u00fbte ~1,5 %), la ROM v16 tourne \u00e0 <strong>8 420 cycles par n\u0153ud contre 8 762<\/strong> (\u22123,9 %).<\/p>\n<p>Essay\u00e9 et abandonn\u00e9 le m\u00eame jour, natif, 1 000 \u00e0 2 000 parties : calme born\u00e9e par le SEE (\u22129 et \u221231 : 75 % des n\u0153uds de calme ne sont que l&#8217;\u00e9valuation d&#8217;horizon) ; oracle \u00e0 la racine fa\u00e7on 1987 (s\u00e9curit\u00e9 du roi par proximit\u00e9, avant-postes, mauvais fou, tour en 7e : +5, et pire en for\u00e7ant les poids) ; tempo (+3) ; historique repli\u00e9 (\u22128) ou supprim\u00e9 (\u221215). Les 49 d\u00e9faites v15 contre Forte A et MM V pass\u00e9es \u00e0 Stockfish : 22 glissements positionnels sans bourde d\u00e8s les plis 11-40, 27 bourdes nettes au pli 61 en plein milieu \u2014 moiti\u00e9 connaissance, moiti\u00e9 horizon. Le protocole du labo met l&#8217;\u00e9mulation en pause entre les coups pour toutes les machines : pas de cerveau permanent possible.<\/p>\n<p><strong>Match natif \u00e0 temps \u00e9gal contre v15<\/strong> (budgets 8 622 et 8 400 n\u0153uds d&#8217;apr\u00e8s les cycles mesur\u00e9s, 2 000 parties) : <span class=\"chiffre\">+28 \u00b18<\/span> (les filtres seuls : +8 \u00b18). R\u00e8gle des +8 : adopt\u00e9e. Identit\u00e9 ROM = C v\u00e9rifi\u00e9e (banc 15 positions \u00d7 20 000 n\u0153uds, ROM compl\u00e8te jusqu&#8217;\u00e0 la profondeur 8, deux parties avec le module). ROM tk md5 4167caf6, mm4reel 98f753da, octet de version 16, greffon neoauto v1.2 compatible ; module v15b inchang\u00e9 ; Neo65 v16-UCI natif pour Windows, Mac et Linux.<\/p>\n<p><strong>Gauntlet Mac (9 novembre, m\u00eames huit adversaires, \u00d710, 1,5 s)<\/strong> : <span class=\"chiffre\">273,5 \/ 423 (64,7 %), perf 1848 \u00b118<\/span> contre une moyenne pond\u00e9r\u00e9e de 1743. C&#8217;est la meilleure performance de Neo, <strong>+33 sur la v15b et +79 sur la v15<\/strong>, un peu au-del\u00e0 des 1 840 attendus en additionnant le livre (+46) et le moteur (+28). Par adversaire : Turbo 16K 96 %, Simultano 84 %, Prisma 75 %, Forte A 61 %, MM V 59 %, MM IV 55 %, Par Excellence 48 %, Super Expert C 46 %. Les deux points faibles de toujours passent au-dessus de 50 % pour la premi\u00e8re fois : Forte A 30 % en v15, 46 % en v15b, 61 % en v16 ; MM V 30 %, 47 %, 59 %. Le livre a fait la moiti\u00e9 du chemin, la table de transposition et les filtres l&#8217;autre. Seul recul visible, le Par Excellence (65 % \u2192 48 %, 63 parties) : pr\u00e8s de deux \u00e9carts-types, \u00e0 surveiller sur la suite du gauntlet. Neo marque d\u00e9sormais autant avec les Noirs (65,9 %) qu&#8217;avec les Blancs (63,4 %), quand la v10 faisait 50 % et 40 %.<\/p>\n<\/div>\n<\/div>\n<\/section>\n\n<section id=\"echelle\">\n<h2>4. Ce que valent les versions entre elles<\/h2>\n<p>Tableau toutes-rondes natif du 8 novembre : dix paires, 2 000 parties chacune, budget de n\u0153uds par coup \u00e9gal \u00e0 11 s de machine \u00e0 4,9152 MHz divis\u00e9es par les cycles par n\u0153ud mesur\u00e9s de chaque ROM (v11 10 156, v12 11 046, v12b 10 394, v13 10 315 ; v10 non mesurable, budget de la v11). \u00c9chelle ajust\u00e9e par moindres carr\u00e9s, r\u00e9sidus 8,6 Elo, coh\u00e9rents avec la barre d&#8217;erreur.<\/p>\n<div class=\"tabwrap\"><table>\n<tr><th>Version<\/th><th class=\"num\">Elo relatif (natif, temps machine \u00e9gal)<\/th><th class=\"num\">Gauntlet Mac<\/th><th>Ce qui a chang\u00e9<\/th><\/tr>\n<tr><td>v10<\/td><td class=\"num\">0<\/td><td class=\"num\">1702 \u00b115 (575 p.)<\/td><td>livre de 706 positions, ROM 32 Ko<\/td><\/tr>\n<tr class=\"fort\"><td>v11<\/td><td class=\"num\">+41<\/td><td class=\"num\">1753 \u00b114 (602 p.)<\/td><td>tables r\u00e9gl\u00e9es \u2014 la vraie marche<\/td><\/tr>\n<tr><td>v12<\/td><td class=\"num\">+51<\/td><td class=\"num\">1766 \u00b114 (602 p.)<\/td><td>cinq termes d&#8217;\u00e9valuation, +10 r\u00e9els<\/td><\/tr>\n<tr><td>v12b<\/td><td class=\"num\">+62<\/td><td class=\"num\">1733 \u00b17 (2 196 p.)<\/td><td>m\u00eame programme 6 % plus vite : +11 par la seule vitesse<\/td><\/tr>\n<tr><td>v13<\/td><td class=\"num\">+58<\/td><td class=\"num\">\u2014<\/td><td>finales de pions : rien de mesurable, abandonn\u00e9e<\/td><\/tr>\n<tr><td>v14<\/td><td class=\"num\">= v12b<\/td><td class=\"num\">1780 \u00b118 (376 p., arr\u00eat\u00e9)<\/td><td>moteur v12b, livre dans le module<\/td><\/tr>\n<tr class=\"fort\"><td>v15 vitesse<\/td><td class=\"num\">\u2248 +100 (v14 + 38 \u00b110)<\/td><td class=\"num\">1769 \u00b117 (416 p.)<\/td><td>m\u00eame programme, 19 % de n\u0153uds en plus par seconde<\/td><\/tr>\n<tr class=\"fort\"><td>v15b<\/td><td class=\"num\">= v15 (moteur identique)<\/td><td class=\"num\">1815 \u00b122 (283 p.)<\/td><td>m\u00eame ROM, livre du module corrig\u00e9 par Stockfish (577 positions) : +46 au gauntlet, Forte A et MM V de 30 % \u00e0 46-47 %<\/td><\/tr>\n<tr class=\"fort\"><td>v16<\/td><td class=\"num\">\u2248 +128 (v15 + 28 \u00b18 \u00e0 temps \u00e9gal)<\/td><td class=\"num\">1848 \u00b118 (423 p.)<\/td><td>v15b + TT 512 entr\u00e9es (5 octets), filtres avant joue(), cache d&#8217;\u00e9valuation ; m\u00eame module que la v15b<\/td><\/tr>\n<\/table><\/div>\n<p>De la v15 \u00e0 la v16, en deux marches : le livre (v15b, +46 au gauntlet \u00e0 283 parties, moteur identique) puis le moteur (v16, +28 \u00b18 au match natif \u00e0 temps \u00e9gal, livre identique) ; si les deux tiennent, la v16 devrait se mesurer autour de 1 840 au gauntlet. C&#8217;est ce qui s&#8217;est pass\u00e9 : <strong>1848 \u00b118 \u00e0 423 parties<\/strong>. Coh\u00e9rence avec les gauntlets : v10 \u2192 v12 fait +64 au gauntlet et +51 au natif ; v11 \u2192 v12 fait +13 et +10. Le 1733 \u00b17 final de la v12b (2 196 parties) contre 1766 \u00b114 pour la v12 tient au bruit et aux s\u00e9ries d&#8217;adversaires d\u00e9terministes (2 \u03c3) : \u00e0 n\u0153uds \u00e9gaux les deux programmes sont identiques (\u22124 \u00b18).<\/p>\n<h3>La progression au gauntlet, de la v10 \u00e0 la v16<\/h3>\n<p>Huit gauntlets en trois jours, du 7 au 9 novembre, contre les m\u00eames huit machines \u00e0 leur fr\u00e9quence d&#8217;origine (moyenne pond\u00e9r\u00e9e des adversaires entre 1734 et 1743 selon les tirages), soit <strong>5 473 parties<\/strong>. Chaque point est la performance de la version sur la liste du labo ; les barres sont \u00e0 \u00b11 \u03c3.<\/p>\n<figure style=\"margin:1.2rem 0 .4rem\">\n<svg viewBox=\"0 0 760 320\" role=\"img\" aria-label=\"Performance de Neo65 au gauntlet, version par version\" style=\"width:100%;height:auto;font-family:var(--mono);font-size:11px\"><line x1=\"54\" x2=\"740\" y1=\"248.4\" y2=\"248.4\" stroke=\"var(--rule)\"\/><text x=\"48\" y=\"252.4\" text-anchor=\"end\" fill=\"var(--muted)\">1700<\/text><line x1=\"54\" x2=\"740\" y1=\"222.8\" y2=\"222.8\" stroke=\"var(--rule)\"\/><text x=\"48\" y=\"226.8\" text-anchor=\"end\" fill=\"var(--muted)\">1720<\/text><line x1=\"54\" x2=\"740\" y1=\"197.2\" y2=\"197.2\" stroke=\"var(--rule)\"\/><text x=\"48\" y=\"201.2\" text-anchor=\"end\" fill=\"var(--muted)\">1740<\/text><line x1=\"54\" x2=\"740\" y1=\"171.6\" y2=\"171.6\" stroke=\"var(--rule)\"\/><text x=\"48\" y=\"175.6\" text-anchor=\"end\" fill=\"var(--muted)\">1760<\/text><line x1=\"54\" x2=\"740\" y1=\"146.0\" y2=\"146.0\" stroke=\"var(--rule)\"\/><text x=\"48\" y=\"150.0\" text-anchor=\"end\" fill=\"var(--muted)\">1780<\/text><line x1=\"54\" x2=\"740\" y1=\"120.4\" y2=\"120.4\" stroke=\"var(--rule)\"\/><text x=\"48\" y=\"124.4\" text-anchor=\"end\" fill=\"var(--muted)\">1800<\/text><line x1=\"54\" x2=\"740\" y1=\"94.8\" y2=\"94.8\" stroke=\"var(--rule)\"\/><text x=\"48\" y=\"98.8\" text-anchor=\"end\" fill=\"var(--muted)\">1820<\/text><line x1=\"54\" x2=\"740\" y1=\"69.2\" y2=\"69.2\" stroke=\"var(--rule)\"\/><text x=\"48\" y=\"73.2\" text-anchor=\"end\" fill=\"var(--muted)\">1840<\/text><line x1=\"54\" x2=\"740\" y1=\"43.6\" y2=\"43.6\" stroke=\"var(--rule)\"\/><text x=\"48\" y=\"47.6\" text-anchor=\"end\" fill=\"var(--muted)\">1860<\/text><line x1=\"54\" x2=\"740\" y1=\"18.0\" y2=\"18.0\" stroke=\"var(--rule)\"\/><text x=\"48\" y=\"22.0\" text-anchor=\"end\" fill=\"var(--muted)\">1880<\/text><line x1=\"54\" x2=\"740\" y1=\"197.2\" y2=\"197.2\" stroke=\"var(--muted)\" stroke-dasharray=\"4 4\"\/><text x=\"736\" y=\"192.2\" text-anchor=\"end\" fill=\"var(--muted)\">moyenne des adversaires \u2248 1740<\/text><line x1=\"96.9\" x2=\"96.9\" y1=\"226.6\" y2=\"265.0\" stroke=\"var(--accent)\" stroke-width=\"2\" opacity=\".45\"\/><line x1=\"182.6\" x2=\"182.6\" y1=\"162.6\" y2=\"198.5\" stroke=\"var(--accent)\" stroke-width=\"2\" opacity=\".45\"\/><line x1=\"268.4\" x2=\"268.4\" y1=\"146.0\" y2=\"181.8\" stroke=\"var(--accent)\" stroke-width=\"2\" opacity=\".45\"\/><line x1=\"354.1\" x2=\"354.1\" y1=\"197.2\" y2=\"215.1\" stroke=\"var(--accent)\" stroke-width=\"2\" opacity=\".45\"\/><line x1=\"439.9\" x2=\"439.9\" y1=\"124.2\" y2=\"170.3\" stroke=\"var(--accent)\" stroke-width=\"2\" opacity=\".45\"\/><line x1=\"525.6\" x2=\"525.6\" y1=\"138.3\" y2=\"181.8\" stroke=\"var(--accent)\" stroke-width=\"2\" opacity=\".45\"\/><line x1=\"611.4\" x2=\"611.4\" y1=\"74.3\" y2=\"128.1\" stroke=\"var(--accent)\" stroke-width=\"2\" opacity=\".45\"\/><line x1=\"697.1\" x2=\"697.1\" y1=\"35.9\" y2=\"82.0\" stroke=\"var(--accent)\" stroke-width=\"2\" opacity=\".45\"\/><polyline points=\"96.9,245.8 182.6,180.6 268.4,163.9 354.1,206.2 439.9,147.3 525.6,160.1 611.4,101.2 697.1,59.0\" fill=\"none\" stroke=\"var(--accent)\" stroke-width=\"2\"\/><circle cx=\"96.9\" cy=\"245.8\" r=\"4.5\" fill=\"var(--paper)\" stroke=\"var(--accent)\" stroke-width=\"2\"\/><text x=\"96.9\" y=\"220.6\" text-anchor=\"middle\" fill=\"var(--fg)\" font-weight=\"500\">1702<\/text><text x=\"96.9\" y=\"294\" text-anchor=\"middle\" fill=\"var(--fg)\">v10<\/text><text x=\"96.9\" y=\"308\" text-anchor=\"middle\" fill=\"var(--muted)\">575 p.<\/text><circle cx=\"182.6\" cy=\"180.6\" r=\"4.5\" fill=\"var(--paper)\" stroke=\"var(--accent)\" stroke-width=\"2\"\/><text x=\"182.6\" y=\"156.6\" text-anchor=\"middle\" fill=\"var(--fg)\" font-weight=\"500\">1753<\/text><text x=\"182.6\" y=\"294\" text-anchor=\"middle\" fill=\"var(--fg)\">v11<\/text><text x=\"182.6\" y=\"308\" text-anchor=\"middle\" fill=\"var(--muted)\">602 p.<\/text><circle cx=\"268.4\" cy=\"163.9\" r=\"4.5\" fill=\"var(--paper)\" stroke=\"var(--accent)\" stroke-width=\"2\"\/><text x=\"268.4\" y=\"140.0\" text-anchor=\"middle\" fill=\"var(--fg)\" font-weight=\"500\">1766<\/text><text x=\"268.4\" y=\"294\" text-anchor=\"middle\" fill=\"var(--fg)\">v12<\/text><text x=\"268.4\" y=\"308\" text-anchor=\"middle\" fill=\"var(--muted)\">602 p.<\/text><circle cx=\"354.1\" cy=\"206.2\" r=\"4.5\" fill=\"var(--paper)\" stroke=\"var(--accent)\" stroke-width=\"2\"\/><text x=\"354.1\" y=\"191.2\" text-anchor=\"middle\" fill=\"var(--fg)\" font-weight=\"500\">1733<\/text><text x=\"354.1\" y=\"294\" text-anchor=\"middle\" fill=\"var(--fg)\">v12b<\/text><text x=\"354.1\" y=\"308\" text-anchor=\"middle\" fill=\"var(--muted)\">2196 p.<\/text><circle cx=\"439.9\" cy=\"147.3\" r=\"4.5\" fill=\"var(--paper)\" stroke=\"var(--accent)\" stroke-width=\"2\"\/><text x=\"439.9\" y=\"118.2\" text-anchor=\"middle\" fill=\"var(--fg)\" font-weight=\"500\">1780<\/text><text x=\"439.9\" y=\"294\" text-anchor=\"middle\" fill=\"var(--fg)\">v14<\/text><text x=\"439.9\" y=\"308\" text-anchor=\"middle\" fill=\"var(--muted)\">376 p.<\/text><circle cx=\"525.6\" cy=\"160.1\" r=\"4.5\" fill=\"var(--paper)\" stroke=\"var(--accent)\" stroke-width=\"2\"\/><text x=\"525.6\" y=\"132.3\" text-anchor=\"middle\" fill=\"var(--fg)\" font-weight=\"500\">1769<\/text><text x=\"525.6\" y=\"294\" text-anchor=\"middle\" fill=\"var(--fg)\">v15<\/text><text x=\"525.6\" y=\"308\" text-anchor=\"middle\" fill=\"var(--muted)\">416 p.<\/text><circle cx=\"611.4\" cy=\"101.2\" r=\"4.5\" fill=\"var(--paper)\" stroke=\"var(--accent)\" stroke-width=\"2\"\/><text x=\"611.4\" y=\"68.3\" text-anchor=\"middle\" fill=\"var(--fg)\" font-weight=\"500\">1815<\/text><text x=\"611.4\" y=\"294\" text-anchor=\"middle\" fill=\"var(--fg)\">v15b<\/text><text x=\"611.4\" y=\"308\" text-anchor=\"middle\" fill=\"var(--muted)\">283 p.<\/text><circle cx=\"697.1\" cy=\"59.0\" r=\"4.5\" fill=\"var(--paper)\" stroke=\"var(--accent)\" stroke-width=\"2\"\/><text x=\"697.1\" y=\"29.9\" text-anchor=\"middle\" fill=\"var(--fg)\" font-weight=\"500\">1848<\/text><text x=\"697.1\" y=\"294\" text-anchor=\"middle\" fill=\"var(--fg)\">v16<\/text><text x=\"697.1\" y=\"308\" text-anchor=\"middle\" fill=\"var(--muted)\">423 p.<\/text><\/svg>\n<figcaption class=\"note\">Performance au gauntlet Mac (\u00d710, 1,5 s r\u00e9elles = 15 s de machine par coup), cotes de la liste du labo. Sous chaque version, le nombre de parties.<\/figcaption>\n<\/figure>\n<div class=\"tabwrap\"><table>\n<tr><th>Version<\/th><th class=\"num\">Parties<\/th><th class=\"num\">+<\/th><th class=\"num\">=<\/th><th class=\"num\">\u2212<\/th><th class=\"num\">Score<\/th><th class=\"num\">Blancs<\/th><th class=\"num\">Noirs<\/th><th class=\"num\">Perf.<\/th><th class=\"num\">\u00c9cart sur la pr\u00e9c\u00e9dente<\/th><\/tr>\n<tr><td>v10<\/td><td class=\"num\">575<\/td><td class=\"num\">213<\/td><td class=\"num\">90<\/td><td class=\"num\">272<\/td><td class=\"num\">44,9&nbsp;%<\/td><td class=\"num\">50,2&nbsp;%<\/td><td class=\"num\">39,5&nbsp;%<\/td><td class=\"num\">1702 \u00b115<\/td><td class=\"num\"><\/td><\/tr>\n<tr class=\"fort\"><td>v11<\/td><td class=\"num\">602<\/td><td class=\"num\">241<\/td><td class=\"num\">142<\/td><td class=\"num\">219<\/td><td class=\"num\">51,8&nbsp;%<\/td><td class=\"num\">54,0&nbsp;%<\/td><td class=\"num\">49,7&nbsp;%<\/td><td class=\"num\">1753 \u00b114<\/td><td class=\"num\">+51<\/td><\/tr>\n<tr><td>v12<\/td><td class=\"num\">602<\/td><td class=\"num\">267<\/td><td class=\"num\">113<\/td><td class=\"num\">222<\/td><td class=\"num\">53,7&nbsp;%<\/td><td class=\"num\">54,2&nbsp;%<\/td><td class=\"num\">53,3&nbsp;%<\/td><td class=\"num\">1766 \u00b114<\/td><td class=\"num\">+13<\/td><\/tr>\n<tr><td>v12b<\/td><td class=\"num\">2196<\/td><td class=\"num\">896<\/td><td class=\"num\">380<\/td><td class=\"num\">920<\/td><td class=\"num\">49,5&nbsp;%<\/td><td class=\"num\">51,3&nbsp;%<\/td><td class=\"num\">47,6&nbsp;%<\/td><td class=\"num\">1733 \u00b17<\/td><td class=\"num\">\u221233<\/td><\/tr>\n<tr><td>v14<\/td><td class=\"num\">376<\/td><td class=\"num\">178<\/td><td class=\"num\">60<\/td><td class=\"num\">138<\/td><td class=\"num\">55,3&nbsp;%<\/td><td class=\"num\">56,9&nbsp;%<\/td><td class=\"num\">53,7&nbsp;%<\/td><td class=\"num\">1780 \u00b118<\/td><td class=\"num\">+47<\/td><\/tr>\n<tr><td>v15<\/td><td class=\"num\">416<\/td><td class=\"num\">191<\/td><td class=\"num\">68<\/td><td class=\"num\">157<\/td><td class=\"num\">54,1&nbsp;%<\/td><td class=\"num\">55,2&nbsp;%<\/td><td class=\"num\">52,9&nbsp;%<\/td><td class=\"num\">1769 \u00b117<\/td><td class=\"num\">\u221211<\/td><\/tr>\n<tr class=\"fort\"><td>v15b<\/td><td class=\"num\">283<\/td><td class=\"num\">148<\/td><td class=\"num\">52<\/td><td class=\"num\">83<\/td><td class=\"num\">61,5&nbsp;%<\/td><td class=\"num\">65,3&nbsp;%<\/td><td class=\"num\">57,6&nbsp;%<\/td><td class=\"num\">1815 \u00b122<\/td><td class=\"num\">+46<\/td><\/tr>\n<tr class=\"fort\"><td>v16<\/td><td class=\"num\">423<\/td><td class=\"num\">242<\/td><td class=\"num\">63<\/td><td class=\"num\">118<\/td><td class=\"num\">64,7&nbsp;%<\/td><td class=\"num\">63,4&nbsp;%<\/td><td class=\"num\">65,9&nbsp;%<\/td><td class=\"num\">1848 \u00b118<\/td><td class=\"num\">+33<\/td><\/tr>\n<\/table><\/div>\n<p>Trois marches se d\u00e9tachent, et ce sont celles que les matchs natifs annon\u00e7aient : les <strong>tables r\u00e9gl\u00e9es<\/strong> (v11, +51), le <strong>livre corrig\u00e9 par Stockfish<\/strong> (v15b, +46 sur la v15, moteur identique) et la <strong>table de transposition avec les filtres<\/strong> (v16, +33 sur la v15b, livre identique). Entre deux, les versions de vitesse ou d&#8217;\u00e9valuation fine (v12, v12b, v14, v15) restent dans une bande de 1733 \u00e0 1780 que le gauntlet ne sait pas d\u00e9partager : leurs \u00e9carts r\u00e9els, mesur\u00e9s en natif, sont de 10 \u00e0 40 points, de l&#8217;ordre de la barre d&#8217;erreur. <strong>De la v10 \u00e0 la v16 : +146 points en trois jours<\/strong>, sur le m\u00eame processeur \u00e0 la m\u00eame fr\u00e9quence et \u00e0 la m\u00eame cadence.<\/p>\n<h3>Adversaire par adversaire<\/h3>\n<div class=\"tabwrap\"><table>\n<tr><th>Adversaire (cote)<\/th><th class=\"num\">v10<\/th><th class=\"num\">v11<\/th><th class=\"num\">v12<\/th><th class=\"num\">v12b<\/th><th class=\"num\">v14<\/th><th class=\"num\">v15<\/th><th class=\"num\">v15b<\/th><th class=\"num\">v16<\/th><\/tr>\n<tr><td>Super Expert C (1880)<\/td><td class=\"num\" style=\"color:var(--ko)\">32&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ko)\">30&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ko)\">39&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ko)\">33&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ko)\">39&nbsp;%<\/td><td class=\"num\">48&nbsp;%<\/td><td class=\"num\">41&nbsp;%<\/td><td class=\"num\">46&nbsp;%<\/td><\/tr>\n<tr><td>MM V (1822)<\/td><td class=\"num\" style=\"color:var(--ko)\">38&nbsp;%<\/td><td class=\"num\">43&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ko)\">34&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ko)\">22&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ko)\">29&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ko)\">30&nbsp;%<\/td><td class=\"num\">47&nbsp;%<\/td><td class=\"num\">59&nbsp;%<\/td><\/tr>\n<tr><td>Forte A (1803)<\/td><td class=\"num\" style=\"color:var(--ko)\">30&nbsp;%<\/td><td class=\"num\">42&nbsp;%<\/td><td class=\"num\">44&nbsp;%<\/td><td class=\"num\">40&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ko)\">38&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ko)\">30&nbsp;%<\/td><td class=\"num\">46&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ok)\">61&nbsp;%<\/td><\/tr>\n<tr><td>MM IV (1787)<\/td><td class=\"num\" style=\"color:var(--ko)\">31&nbsp;%<\/td><td class=\"num\">50&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ok)\">71&nbsp;%<\/td><td class=\"num\">54&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ok)\">64&nbsp;%<\/td><td class=\"num\">53&nbsp;%<\/td><td class=\"num\">54&nbsp;%<\/td><td class=\"num\">55&nbsp;%<\/td><\/tr>\n<tr><td>Simultano (1747)<\/td><td class=\"num\">48&nbsp;%<\/td><td class=\"num\">50&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ok)\">75&nbsp;%<\/td><td class=\"num\">55&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ok)\">68&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ok)\">68&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ok)\">82&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ok)\">84&nbsp;%<\/td><\/tr>\n<tr><td>Par Excellence (1725)<\/td><td class=\"num\">54&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ok)\">67&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ko)\">38&nbsp;%<\/td><td class=\"num\">52&nbsp;%<\/td><td class=\"num\">56&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ok)\">62&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ok)\">65&nbsp;%<\/td><td class=\"num\">48&nbsp;%<\/td><\/tr>\n<tr><td>Prisma (1724)<\/td><td class=\"num\">51&nbsp;%<\/td><td class=\"num\">47&nbsp;%<\/td><td class=\"num\">55&nbsp;%<\/td><td class=\"num\">55&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ok)\">64&nbsp;%<\/td><td class=\"num\">59&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ok)\">62&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ok)\">75&nbsp;%<\/td><\/tr>\n<tr><td>Turbo 16K (1437)<\/td><td class=\"num\" style=\"color:var(--ok)\">72&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ok)\">85&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ok)\">75&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ok)\">82&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ok)\">86&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ok)\">83&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ok)\">89&nbsp;%<\/td><td class=\"num\" style=\"color:var(--ok)\">96&nbsp;%<\/td><\/tr>\n<\/table><\/div>\n<p class=\"note\">Pourcentage marqu\u00e9 par Neo. En vert, 60 % et plus ; en rouge, moins de 40 %.<\/p>\n<p>Le tableau raconte la m\u00eame histoire que la courbe, adversaire par adversaire. Le Turbo 16K (1437) n&#8217;a jamais \u00e9t\u00e9 un probl\u00e8me et tombe \u00e0 96 %. Les progr\u00e8s des tables (v11) se voient surtout contre le MM IV et le Par Excellence. Le Forte A et le MM V, les deux machines contre lesquelles Neo plafonnait \u00e0 30 % jusqu&#8217;\u00e0 la v15, ne c\u00e8dent qu&#8217;au livre corrig\u00e9 puis \u00e0 la table de transposition : leurs d\u00e9faites \u00e9taient pour moiti\u00e9 des sorties de livre perdantes, pour moiti\u00e9 des bourdes d&#8217;horizon. Depuis la v15b, plus aucun adversaire n&#8217;est sous 40 % ; avec la v16, il n&#8217;en reste que deux sous 50 % : le Super Expert C (1880), le plus fort du panel, et le Par Excellence.<\/p>\n<h3>Et avant la v10 ?<\/h3>\n<p>Les versions 48 Ko ne sont pas sur la m\u00eame \u00e9chelle (livre diff\u00e9rent, pas de pions pass\u00e9s dans les premi\u00e8res 32 Ko), mais l&#8217;ordre de grandeur est connu : v1 \u00e0 10 % contre le panel, v4 +61 natif sur v1, v5 \u00e0 20 % \u00e0 15 s par coup (\u2248 1590), v6-v7 +55 environ \u00e0 temps \u00e9gal, v9 \u00e0 1699. Du 27 octobre au 8 novembre, <strong>quelque 400 \u00e0 450 Elo<\/strong> sur le m\u00eame mat\u00e9riel.<\/p>\n<\/section>\n\n<section id=\"essais\">\n<h2>5. Tout ce qui a \u00e9t\u00e9 essay\u00e9<\/h2>\n<p class=\"note\">Les Elo sont ceux des matchs natifs (1 000 \u00e0 2 000 parties, \u00b18 \u00e0 \u00b111). \u00ab R\u00e9serve \u00bb : code pr\u00e9sent, d\u00e9sactiv\u00e9 par macro.<\/p>\n<div class=\"tabwrap\"><table>\n<tr><th>\u00c9l\u00e9ment<\/th><th>Mesure<\/th><th>D\u00e9cision<\/th><th>Pourquoi<\/th><\/tr>\n<tr><td>It\u00e9ration interrompue utilis\u00e9e (PARTIEL)<\/td><td>+71 \u00b111<\/td><td><span class=\"etat garde\">gard\u00e9<\/span><\/td><td>60 % du temps \u00e9tait jet\u00e9<\/td><\/tr>\n<tr><td>Sans r\u00e9ductions tardives (LMR)<\/td><td>+45 \u00b110 \u00e0 4k ; +7 \u00e0 16k, \u221221 \u00e0 256k<\/td><td><span class=\"etat garde\">gard\u00e9<\/span><\/td><td>\u00e0 profondeur 3-5, LMR rate des tactiques ; \u00e0 revoir si la profondeur monte (UCI natif)<\/td><\/tr>\n<tr><td>Futilit\u00e9 \u00e0 la fronti\u00e8re (150, prof. 1)<\/td><td>+33 \u00b111 (temps fixe)<\/td><td><span class=\"etat garde\">gard\u00e9<\/span><\/td><td><\/td><\/tr>\n<tr><td>Futilit\u00e9 inverse (prof. \u2264 3, 120\/pli)<\/td><td>+16 \u00b18, n\u0153ud \u221215 % de cycles<\/td><td><span class=\"etat garde\">gard\u00e9<\/span><\/td><td>premier \u00e9l\u00e9ment de l&#8217;ablation transpos\u00e9<\/td><\/tr>\n<tr><td>SEE : calme, prises perdantes, coups tranquilles vers case attaqu\u00e9e<\/td><td>+65 \u00b18 \u00e0 n\u0153uds \u00e9gaux ; +39 \u00b111 \u00e0 temps \u00e9gal une fois all\u00e9g\u00e9<\/td><td><span class=\"etat garde\">gard\u00e9<\/span><\/td><td>la premi\u00e8re version (+22 % de cycles) ne gagnait rien<\/td><\/tr>\n<tr><td>Extensions d&#8217;\u00e9chec<\/td><td>\u221255 \u00e0 \u221261 sans elles<\/td><td><span class=\"etat garde\">gard\u00e9<\/span><\/td><td>essentielles<\/td><\/tr>\n<tr><td>Pions pass\u00e9s dynamiques<\/td><td>\u221282 dans Stockfish ; pr\u00e9sent depuis v9<\/td><td><span class=\"etat garde\">gard\u00e9<\/span><\/td><td>absents par erreur des ROM 32 Ko du 4\/11, r\u00e9tablis en v12<\/td><\/tr>\n<tr><td>Tables r\u00e9gl\u00e9es (Texel, 143 k positions, r\u00e9gularis\u00e9es)<\/td><td>+30 \u00b18 (9k, ouvertures neutres)<\/td><td><span class=\"etat garde\">gard\u00e9<\/span> (v11)<\/td><td>le r\u00e9glage libre faisait +53 \u00e0 4k mais +14 \u00e0 9k : sur-apprentissage<\/td><\/tr>\n<tr><td>Tour colonne ouverte \/ semi, doubl\u00e9s, isol\u00e9s, bouclier<\/td><td>+40 \u00b111 \u00e0 n\u0153uds \u00e9gaux, +10 \u00e0 temps \u00e9gal<\/td><td><span class=\"etat garde\">gard\u00e9<\/span> (v12)<\/td><td>co\u00fbt +10-15 % de cycles<\/td><\/tr>\n<tr><td>SEE par listes, ptab +256, pm_bascule, caches<\/td><td>\u22125,9 % de cycles, +11 Elo<\/td><td><span class=\"etat garde\">gard\u00e9<\/span> (v12b)<\/td><td><\/td><\/tr>\n<tr><td>Livre dans le module HG440, 2 026 positions<\/td><td>jeu identique, 6,3 Ko de ROM libres<\/td><td><span class=\"etat garde\">gard\u00e9<\/span> (v14)<\/td><td>gauntlet 1780 \u00b118<\/td><\/tr>\n<tr><td>Dix termes d&#8217;\u00e9valuation (structure de pions, avant-postes, roi, mauvais fou, pass\u00e9 imparable)<\/td><td>+18 \u00e0 n\u0153uds \u00e9gaux ; co\u00fbt r\u00e9el +13 % de cycles<\/td><td><span class=\"etat abandon\">abandonn\u00e9<\/span><\/td><td>le recalcul des pions tombe dans 58 % des \u00e9valuations<\/td><\/tr>\n<tr><td>Case attaqu\u00e9e par les listes de pi\u00e8ces, page z\u00e9ro, plateau align\u00e9, rayons d\u00e9roul\u00e9s, caches \u00ab sales \u00bb, choisit avec compte des \u00e9galit\u00e9s<\/td><td>\u221216 % de cycles, +38 \u00b110<\/td><td><span class=\"etat garde\">gard\u00e9<\/span> (v15)<\/td><td>m\u00eame arbre que la v14 ; gauntlet 1769 \u00b117 \u00e0 416 p.<\/td><\/tr>\n<tr><td>Livre du module corrig\u00e9 par Stockfish : 577 positions des gauntlets o\u00f9 Neo perdait \u2265 50 cp en sortant du livre<\/td><td>gauntlet 1815 \u00b122 \u00e0 283 p. (v15 : 1769) ; Forte A et MM V de 30 % \u00e0 46-47 %<\/td><td><span class=\"etat garde\">gard\u00e9<\/span> (v15b)<\/td><td>2 603 positions, 1 084 octets libres ; boucle \u00e0 refaire apr\u00e8s chaque gauntlet<\/td><\/tr>\n<tr><td>Finales de pions : pass\u00e9 imprenable +600, pion +200<\/td><td>\u22124 \/ \u22124 \/ \u221210 \u00b18<\/td><td><span class=\"etat abandon\">abandonn\u00e9<\/span><\/td><td>plus juste au sens de Stockfish, pas plus fort en jeu<\/td><\/tr>\n<tr><td>\u00c9valuation riche EVAL_PLUS (v4-v5)<\/td><td>+75 \u00e0 n\u0153uds \u00e9gaux, \u221223 \u00e0 \u221272 \u00e0 temps \u00e9gal<\/td><td><span class=\"etat abandon\">abandonn\u00e9<\/span><\/td><td>\u00d71,83 par n\u0153ud ; ses termes utiles sont revenus un \u00e0 un, all\u00e9g\u00e9s, en v12<\/td><\/tr>\n<tr><td>Texel sur auto-parties<\/td><td>r\u00e9gression<\/td><td><span class=\"etat abandon\">abandonn\u00e9<\/span><\/td><td>sur-apprentissage ; il faut de vraies parties<\/td><\/tr>\n<tr><td>Parades en \u00e9chec dans la calme (Q_EVASIONS)<\/td><td>\u221213<\/td><td><span class=\"etat reserve\">r\u00e9serve<\/span><\/td><td>trop de n\u0153uds \u00e0 ce budget<\/td><\/tr>\n<tr><td>Calme born\u00e9e (Q_MAX 4 \/ 6)<\/td><td>+43 seule, +2 avec sans-LMR ; Q_MAX 6 : rien<\/td><td><span class=\"etat reserve\">r\u00e9serve<\/span><\/td><td><\/td><\/tr>\n<tr><td>Coup nul (R=2), razoring, futilit\u00e9 prof. 2 (350)<\/td><td>\u22127 \/ \u2014 \/ +6<\/td><td><span class=\"etat reserve\">r\u00e9serve<\/span><\/td><td>neutres<\/td><\/tr>\n<tr><td>Futilit\u00e9 inverse 160 \/ 90<\/td><td>\u221212 \/ 0<\/td><td><span class=\"etat reserve\">r\u00e9serve<\/span><\/td><td><\/td><\/tr>\n<tr><td>Aspiration 25, IID prof. 3 \/ 4<\/td><td>+2 \/ +2 \/ \u221211<\/td><td><span class=\"etat reserve\">r\u00e9serve<\/span><\/td><td><\/td><\/tr>\n<tr><td>Table de transposition 512 entr\u00e9es, entr\u00e9e de 5 octets (v\u00e9rif. 15 bits, score\/4)<\/td><td>+16 \u00b18 \u00e0 n\u0153uds \u00e9gaux ; 1 024 : +35 ; 4 096 : +35<\/td><td><span class=\"etat garde\">gard\u00e9<\/span> (v16)<\/td><td>le gain vient des coupures, pas des coups de table (+1) ; v\u00e9rif. 8 bits : \u221238<\/td><\/tr>\n<tr><td>Filtres avant joue() : parades en \u00e9chec, roi vers case attaqu\u00e9e, futilit\u00e9 avant joue (l\u00e9galit\u00e9 certaine) ; cache d&#8217;\u00e9valuation par n\u0153ud<\/td><td>arbre identique, \u221232 % de joue(), \u22124,9 % de cycles<\/td><td><span class=\"etat garde\">gard\u00e9<\/span> (v16)<\/td><td>+8 \u00b18 \u00e0 temps \u00e9gal<\/td><\/tr>\n<tr><td>Calme born\u00e9e par SEE (quota 8 \/ 2 + swap-off)<\/td><td>\u22129 \/ \u221231<\/td><td><span class=\"etat abandon\">abandonn\u00e9<\/span><\/td><td>75 % des n\u0153uds de calme sont l&#8217;\u00e9valuation d&#8217;horizon<\/td><\/tr>\n<tr><td>Oracle \u00e0 la racine (pr\u00e9-processeur 1987 : roi, avant-postes, mauvais fou, 7e, cibles)<\/td><td>+5 \u00b111 ; \u00d72 \u22121 ; \u00d73 \u221220<\/td><td><span class=\"etat abandon\">abandonn\u00e9<\/span><\/td><td>infrastructure gard\u00e9e (oracle.c, SPSA)<\/td><\/tr>\n<tr><td>Tempo 12 \/ 20 ; historique repli\u00e9 \/ supprim\u00e9 ; TT 384 repli\u00e9e<\/td><td>+3 \/ \u22121 ; \u22128 \/ \u221215 ; \u221218<\/td><td><span class=\"etat abandon\">abandonn\u00e9<\/span><\/td><td><\/td><\/tr>\n<tr><td>Extension de reprise (RECAP), tri \u00e0 deux \u00e9tages, sortie anticip\u00e9e de choisit<\/td><td>\u221234 \/ +13 mais 0 cycle \/ +0,1 % de cycles<\/td><td><span class=\"etat abandon\">abandonn\u00e9<\/span><\/td><td><\/td><\/tr>\n<tr><td>Q_ENTREE (pas de g\u00e9n\u00e9ration en calme si la plus grosse prise ne remonte pas alpha)<\/td><td>\u221239 % de g\u00e9n\u00e9rations en finale de dames, \u22121,5 % en milieu<\/td><td><span class=\"etat reserve\">r\u00e9serve<\/span><\/td><td>\u00e0 r\u00e9server aux phases basses<\/td><\/tr>\n<tr><td>Version 18 MHz (TurboKit)<\/td><td>gauntlets faits<\/td><td><span class=\"etat abandon\">abandonn\u00e9<\/span><\/td><td>d\u00e9cision de Valter : fr\u00e9quence d&#8217;origine seulement<\/td><\/tr>\n<tr><td>Tablebases dans la fente HG440<\/td><td>\u2014<\/td><td><span class=\"etat abandon\">abandonn\u00e9<\/span><\/td><td>seule une bitbase KPK tiendrait, pour 14 parties sur 602<\/td><\/tr>\n<tr><td>Corrections de livre cibl\u00e9es (v10)<\/td><td>220 positions<\/td><td><span class=\"etat garde\">gard\u00e9<\/span><\/td><td>biais assum\u00e9 : elles exploitent le d\u00e9terminisme des adversaires du labo<\/td><\/tr>\n<\/table><\/div>\n<\/section>\n\n<section id=\"lecons\">\n<h2>6. Les le\u00e7ons<\/h2>\n<ul class=\"serre\">\n<li><strong>\u00c0 ce budget, la vitesse vaut autant que l&#8217;id\u00e9e.<\/strong> Deux fois (SEE v8, EVAL_PLUS) un gain net \u00e0 n\u0153uds \u00e9gaux a \u00e9t\u00e9 annul\u00e9 par son co\u00fbt en cycles ; la v12b gagne autant par 6 % de vitesse que la v12 par cinq termes d&#8217;\u00e9valuation.<\/li>\n<li><strong>Mesurer au bon budget et sur des ouvertures neutres.<\/strong> \u00c0 4 000 n\u0153uds sur les ouvertures d&#8217;entra\u00eenement, les r\u00e9glages paraissent deux fois meilleurs qu&#8217;ils ne sont.<\/li>\n<li><strong>Le gauntlet n&#8217;est pas un comparateur.<\/strong> \u00b114 Elo pour 600 parties ; les versions diff\u00e8rent de 10 \u00e0 30. Le match natif \u00e0 temps machine \u00e9gal, 2 000 parties en 40 minutes, est l&#8217;instrument.<\/li>\n<li><strong>Un \u00e9tiquetage n&#8217;est pas une preuve.<\/strong> La v13 divisait par deux l&#8217;erreur statique mesur\u00e9e contre Stockfish et perdait des parties. Seul le match compte.<\/li>\n<li><strong>Garder les sources de chaque ROM.<\/strong> La perte des sources 32 Ko du 4 novembre a co\u00fbt\u00e9 une nuit de reconstruction et cach\u00e9 pendant trois jours l&#8217;absence des pions pass\u00e9s.<\/li>\n<li><strong>Les adversaires d\u00e9terministes trompent.<\/strong> Un changement d&#8217;\u00e9valuation d\u00e9place les lignes de sortie de livre, et des s\u00e9ries enti\u00e8res basculent dans un sens ou l&#8217;autre : d&#8217;o\u00f9 les gauntlets de 3 040 parties.<\/li>\n<\/ul>\n<\/section>\n\n<section id=\"etat\">\n<h2>7. \u00c9tat des lieux au 9 novembre, 11 h<\/h2>\n<div class=\"deux\">\n<div>\n<h3>ROM et module<\/h3>\n<ul class=\"serre\">\n<li>v14 : <code>neo65_v14_mm4tk.rom<\/code> (md5 f553b8eb), <code>_mm4reel<\/code> pour le vrai MM IV (7b32b798), module <code>neo65_v14_module_hg440.bin<\/code> (e3ffcdae). Texte 0x803B-0xC26F, ptab 0xC300, rodata jusqu&#8217;\u00e0 0xE76A.<\/li>\n<li>v15 : <code>CHESS\\Neo65\\v15\\<\/code> \u2014 <code>neo65_v15_mm4tk.rom<\/code> (md5 a52062b1), <code>_mm4reel<\/code> (b94085ae), m\u00eame module, sources, greffon neoauto v1.2. Plateau en 0x0300, octet de version 15.<\/li>\n<li>v16 : <code>CHESS\\Neo65\\v16\\<\/code> \u2014 <code>neo65_v16_mm4tk.rom<\/code> (md5 4167caf6), <code>_mm4reel<\/code> (98f753da), module v15b, <code>neo65_v16_uci.exe<\/code> \/ <code>_mac_arm64<\/code> \/ <code>_linux<\/code>, sources (<code>patch_asm.py<\/code> applique les blocs asm \u00e0 <code>recherche_v15.s<\/code>), LISEZMOI. RAM : bss 0x1E79, pile min 0x1EE1.<\/li>\n<li>v15b : <code>CHESS\\Neo65\\v15b\\<\/code> \u2014 m\u00eame ROM, module <code>neo65_v15b_module_hg440.bin<\/code> (md5 57be46ce), sources du livre (<code>extrait.py<\/code>, <code>analyse_sf.py<\/code>, <code>construire.py<\/code>, analyses Stockfish), LISEZMOI.<\/li>\n<li>Mac : gauntlet v14 arr\u00eat\u00e9 \u00e0 376 parties (perf 1780) ; gauntlet v15 en cours (1769 \u00e0 416 parties) ; v15b install\u00e9e (<code>module_v15b.bin<\/code>, entr\u00e9e \u00ab Neo65 v15b MM IV \u00bb, <code>gauntlet_neo65_v15b_x10.command<\/code>), elle d\u00e9marre seule \u00e0 la fin de la v15.<\/li>\n<li>PC et site : moteur \u00ab Shahmatic Neo6502 \u00bb encore en v11 ; v14 pr\u00e9par\u00e9e (<code>neo_uci.js<\/code> avec module embarqu\u00e9), \u00e0 d\u00e9poser quand le PC sera reli\u00e9.<\/li>\n<li>Vrai MM IV : ROM <code>_mm4reel<\/code> de chaque version ; contact pris avec Gerardo pour la gravure et une coque de module.<\/li>\n<\/ul>\n<\/div>\n<div>\n<h3>Neo lib\u00e9r\u00e9 du 6502<\/h3>\n<p><strong>Neo65 v14-UCI<\/strong> : le m\u00eame programme compil\u00e9 pour le PC (Windows x64), le Mac (arm64) et Linux. Il joue 2 \u00e0 4 millions de n\u0153uds par seconde, profondeur 9-10 en 3 s, avec gestion du temps, variante principale compl\u00e8te, \u00e9valuation, n\u0153uds et n\u0153uds par seconde \u00e0 chaque it\u00e9ration. La recherche est inchang\u00e9e (v\u00e9rifi\u00e9 : m\u00eame nombre de n\u0153uds que la r\u00e9f\u00e9rence \u00e0 profondeur fixe). Sa table de transposition de 256 entr\u00e9es, taill\u00e9e pour 8 Ko de RAM, est son principal handicap \u00e0 cette vitesse ; c&#8217;est voulu : il mesure les algorithmes de Neo, pas une autre machine.<\/p>\n<p>Usage pr\u00e9vu : quatri\u00e8me membre d&#8217;<strong>Orion+<\/strong> (Forte A + MM IV + Designer 2100 + Neo), dans le m\u00eame gauntlet qu&#8217;Orion, pour voir si Neo apporte des coups que les trois autres ne trouvent pas.<\/p>\n<\/div>\n<\/div>\n<\/section>\n\n<section id=\"derives\">\n<h2>8. Les d\u00e9riv\u00e9s de Neo : o\u00f9 il joue, ce qu&#8217;il faut r\u00e9percuter<\/h2>\n<p>Neo n&#8217;est pas un programme mais une ROM, et cette ROM vit \u00e0 neuf endroits. \u00c0 chaque version, chacun doit \u00eatre mis \u00e0 jour ou, au moins, on doit savoir qu&#8217;il ne l&#8217;a pas \u00e9t\u00e9. Le tableau est la liste de contr\u00f4le ; la colonne \u00ab version \u00bb dit o\u00f9 en est chaque d\u00e9riv\u00e9 au 8 novembre.<\/p>\n<div class=\"tabwrap\"><table>\n<tr><th>D\u00e9riv\u00e9<\/th><th>O\u00f9<\/th><th>Forme<\/th><th class=\"num\">Version<\/th><th>\u00c0 r\u00e9percuter \u00e0 chaque version<\/th><\/tr>\n<tr><td><strong>ROM du vrai MM IV<\/strong><\/td><td><code>CHESS\\Neo65\\rom_mm4_reel\\<\/code> (PC), <code>CHESS\/neo65\/<\/code> (Mac)<\/td><td><code>neo65_vNN_mm4tk_mm4reel.rom<\/code> (double lecture des capteurs) + image du module <code>_module_hg440.bin<\/code> (27C128)<\/td><td class=\"num\">v14<\/td><td><code>patch_reel.py<\/code> sur la ROM ; m\u00eame module. Gravure et coque de module : Gerardo.<\/td><\/tr>\n<tr><td><strong>Gauntlet Mac<\/strong> (la mesure officielle)<\/td><td><code>cbemu_mac\/neo65\/<\/code>, pilote <code>neo65mm4vNN<\/code> dans <code>mess_uci.py<\/code>, <code>machines_mac.tsv<\/code>, lanceur, <code>gauntlet_neo65_vNN_x10.command<\/code><\/td><td>ROM dans MAME <code>mm4<\/code> + <code>-cart neo65\/module_v14.bin<\/code><\/td><td class=\"num\">v14 pr\u00eat ; v12b en cours<\/td><td>ROM, pilote, ligne tsv, lanceur, .command avec pr\u00e9-vol du module.<\/td><\/tr>\n<tr><td><strong>Shahmatic Neo6502<\/strong> (moteur PC cot\u00e9 dans la liste)<\/td><td><code>cb-emu_UCI\\machines\\Shahmatic Neo6502\\<\/code><\/td><td><code>neo_uci.js<\/code> (\u00e9mulateur Node, ROM embarqu\u00e9e, premier octet 0x05 = niveau 5), <code>node.exe<\/code><\/td><td class=\"num\"><span class=\"etat abandon\">v11<\/span><\/td><td>Entr\u00e9e cot\u00e9e de la liste du labo : ne bascule qu&#8217;avec une d\u00e9cision, puisque la cote change d&#8217;objet. La v14 est \u00e0 c\u00f4t\u00e9, dans <code>Shahmatic Neo6502 v14<\/code>.<\/td><\/tr>\n<tr><td><strong>Shahmatic Neo65 v14<\/strong> (membre d&#8217;Orion+)<\/td><td><code>machines\\Shahmatic Neo6502 v14\\<\/code>, Banksia, <code>candidats_orion_plus.tsv<\/code><\/td><td><code>neo_uci.js<\/code> avec module embarqu\u00e9, <code>--sansmodule<\/code>, <code>--module<\/code>, <strong>rejeu en mode \u00e9dition<\/strong> apr\u00e8s un d\u00e9saveu<\/td><td class=\"num\">v14<\/td><td>ROM + module dans le .js ; le rejeu est indispensable \u00e0 tout m\u00e9ta-moteur.<\/td><\/tr>\n<tr><td><strong>Shahmatic Neo65 v14-UCI<\/strong> (natif, lib\u00e9r\u00e9 du 6502)<\/td><td><code>machines\\Neo65 v14-UCI\\<\/code>, Banksia ; Mac <code>neo65_v14_uci_mac_arm64<\/code><\/td><td><code>uci_pc.c<\/code> + sources C, compil\u00e9 <code>zig cc<\/code> pour Windows, macOS, Linux<\/td><td class=\"num\">v14<\/td><td>Recompiler \u00e0 chaque version ; m\u00eame nombre de n\u0153uds que la r\u00e9f\u00e9rence \u00e0 profondeur fixe (contr\u00f4le).<\/td><\/tr>\n<tr><td><strong>Orion+<\/strong> (m\u00e9ta-moteur)<\/td><td><code>machines\\trio\\Orion+ v14\\uci.bat<\/code>, <code>gauntlet_orion_plus_2050_2350.bat<\/code>, Banksia \u00ab Shahmatic Orion+ \u00bb<\/td><td>Forte A + MM IV + Designer 2100 + Shahmatic Neo65 v14, arbitre Stockfish 18<\/td><td class=\"num\">v14<\/td><td>Changer le membre Neo dans <code>candidats_orion_plus.tsv<\/code> et l&#8217;option <code>Trio<\/code>.<\/td><\/tr>\n<tr><td><strong>Jouer en ligne<\/strong> (site, page Neo6502)<\/td><td><code>ARTICLES\\en_ligne\\neo6502\\index.html<\/code> \u2192 chess.lumn.eu par FileZilla<\/td><td>\u00c9mulateur dans la page, ROM et module embarqu\u00e9s (base64), mention \u00ab By Valter Drazic &#8211; vNN \u00bb sur l&#8217;afficheur<\/td><td class=\"num\">v14 pr\u00e9par\u00e9e, <span class=\"etat cours\">\u00e0 mettre en ligne<\/span><\/td><td><code>ROM_B64<\/code>, <code>MODULE_B64<\/code>, la mention de version ; sauvegarde <code>index.sauvegarde_v11.html<\/code>.<\/td><\/tr>\n<tr><td><strong>Match en ligne<\/strong> (site, page Match)<\/td><td><code>ARTICLES\\en_ligne\\match\\index.html<\/code> + <code>data.js<\/code>, qui charge <code>..\/neo6502\/neo65.js<\/code> en Worker<\/td><td><code>neo65.js<\/code> (m\u00eame ROM et module que la page Neo) ; <code>data.js<\/code> d\u00e9clare \u00ab Shahmatic Neo6502 \u00b7 4,9 MHz \u00bb (1709) et \u00ab \u00b7 18 MHz \u00bb (1868)<\/td><td class=\"num\">v14 pr\u00e9par\u00e9e, <span class=\"etat cours\">\u00e0 mettre en ligne<\/span><\/td><td><code>neo65.js<\/code> ; les cotes de <code>data.js<\/code> ; la variante 18 MHz y figure encore alors qu&#8217;elle est abandonn\u00e9e : \u00e0 retirer ou \u00e0 assumer.<\/td><\/tr>\n<tr><td><strong>Version bureau<\/strong> (installateur Windows)<\/td><td><code>CHESS\\Neo65\\bureau\\Installer_Shahmatic_Neo6502_v14.exe<\/code><\/td><td>La page du site rendue autonome (chess.js inclus, ROM et module embarqu\u00e9s), install\u00e9e dans <code>%LocalAppData%\\Shahmatic Neo6502<\/code>, raccourcis, entr\u00e9e Programmes, fen\u00eatre Edge en mode application<\/td><td class=\"num\">v14<\/td><td>Reg\u00e9n\u00e9rer <code>Shahmatic_Neo6502.html<\/code> depuis la page du site, recompiler l&#8217;installateur (<code>installeur.c<\/code>, zig).<\/td><\/tr>\n<tr><td><strong>MSI<\/strong> (gauntlet \u00d75)<\/td><td><code>cb-emu_UCI<\/code> du MSI<\/td><td>M\u00eame moteur Node que le PC, 8 adversaires \u00ab x5 \u00bb<\/td><td class=\"num\"><span class=\"etat abandon\">v12<\/span><\/td><td>Sans objet depuis le tableau natif ; le MSI ne tient pas \u00d75 \u00e0 plus de 2 parties.<\/td><\/tr>\n<\/table><\/div>\n<p class=\"note\">R\u00e8gle : une version n&#8217;est \u00ab livr\u00e9e \u00bb que lorsque les six premi\u00e8res lignes sont \u00e0 son num\u00e9ro ; les pages du site suivent d\u00e8s la mise en ligne ; la version bureau et le moteur cot\u00e9 suivent sur d\u00e9cision.<\/p>\n<\/section>\n\n<section id=\"perspectives\">\n<h2>9. Perspectives<\/h2>\n<h3>Court terme<\/h3>\n<ul class=\"serre\">\n<li><strong>v16 mesur\u00e9e : 1848 \u00b118 \u00e0 423 parties<\/strong> (attendu \u2248 1 840). La pousser au millier de parties pour \u00b112 et confirmer le recul contre le Par Excellence ; puis refaire la boucle du livre sur les gauntlets v15b et v16 (positions o\u00f9 Neo sort du livre en perdant \u2265 50 cp).<\/li>\n<li>Trouver la cause des arr\u00eats de Neo depuis la v14 (20 % des parties rejou\u00e9es) : relais journalis\u00e9 (<code>CBEMU_LOG=1<\/code>) sur quelques parties avec <code>-cart<\/code>.<\/li>\n<li>Orion+ v14 et Neo65 v14-UCI dans le gauntlet d&#8217;Orion d\u00e8s que le PC est reli\u00e9 ; en parall\u00e8le, la variante \u00e0 vitesse 6502 (\u00ab Shahmatic Neo6502 v14 \u00bb) comme quatri\u00e8me membre, \u00e0 armes \u00e9gales avec les trois machines.<\/li>\n<li>Kit Mac <code>match_natif.command<\/code> : compiler les versions, jouer les paires, \u00e9crire le tableau, pour que la mesure interne se refasse en une demi-heure \u00e0 chaque version.<\/li>\n<\/ul>\n<h3>La ROM a de la place : \u00e9tape 2 de la v14<\/h3>\n<p>Les 6 288 octets lib\u00e9r\u00e9s servent \u00e0 des algorithmes, un par un, chacun admis \u00e0 \u2265 +8 Elo au match natif \u00e0 temps \u00e9gal. Dans l&#8217;ordre o\u00f9 l&#8217;ablation et les parties les d\u00e9signent :<\/p>\n<ul class=\"serre\">\n<li><strong>Finales<\/strong> : le vrai point faible (30 % dans les finales de pions, 26,6 cp par coup contre 20,8 en finale). Pistes c\u00f4t\u00e9 recherche plut\u00f4t qu&#8217;\u00e9valuation : profondeur ou extensions en finale, Q_ENTREE en phase basse, roi actif.<\/li>\n<li><strong>Menaces bon march\u00e9<\/strong> (pi\u00e8ces en prise, \u221258 dans l&#8217;ablation) et <strong>s\u00e9curit\u00e9 du roi<\/strong> (\u221263, mais ch\u00e8re : cartes d&#8217;attaque).<\/li>\n<li><strong>Pions arri\u00e9r\u00e9s, candidats, pass\u00e9s li\u00e9s ou prot\u00e9g\u00e9s<\/strong> : la structure de pions \u00e9tait \u00e0 \u22124 dans Stockfish ; \u00e0 n&#8217;essayer que parce que les masques existent d\u00e9j\u00e0 et que le co\u00fbt est faible.<\/li>\n<li><strong>Aspiration<\/strong> (\u2212112 dans l&#8217;ablation, +2 mesur\u00e9 chez Neo : \u00e0 comprendre).<\/li>\n<li><strong>Vitesse<\/strong> : faite en v15 (\u221216 % de cycles, +38) et v16 (\u22123,9 %). Ce qui reste est la sauvegarde d&#8217;\u00e9tat \u00e0 chaque coup jou\u00e9 et le balayage du tri : quelques pour cent au plus.<\/li>\n<li><strong>RAM<\/strong> : c&#8217;est elle qui limite maintenant (1 024 entr\u00e9es de TT vaudraient +35, il n&#8217;y a plus que 104 octets de marge). Pistes : entr\u00e9e de 4 octets sans coup de table (les coups de table valent peu) pour 640-768 entr\u00e9es, pile de coups 320, un seul coup tueur par niveau.<\/li>\n<li><strong>Refonte des tables d&#8217;attaque<\/strong> (le \u00d71,5-\u00d73 de 1987) : seule voie restante vers le pli manquant des bourdes du milieu de partie ; prototype chiffr\u00e9 en C d&#8217;abord.<\/li>\n<\/ul>\n<h3>Plus loin<\/h3>\n<ul class=\"serre\">\n<li>Module HG440 : fait en v15b (1 084 octets encore libres) ; la suite du livre passera par de nouvelles parties, ou par du code dans le module si la ROM se remplit.<\/li>\n<li>Gravure et test sur le vrai MM IV ; la page en ligne avec la m\u00eame ROM et le module.<\/li>\n<li>Neo680xx : la m\u00eame d\u00e9marche sur les modules Mephisto 68000\/68020 \u00e0 fr\u00e9quence d&#8217;origine (le m\u00eame C co\u00fbte 31 570 cycles par n\u0153ud sur 68000 : un 68000 \u00e0 12 MHz vaut \u00d71,2 le 6502 \u00e0 4,9 MHz).<\/li>\n<li>Pour Neo65-UCI, un jour, une variante \u00ab grande table \u00bb pour voir ce que valent les algorithmes sans la contrainte des 8 Ko : ce serait un autre programme, et il faudra le dire.<\/li>\n<\/ul>\n<\/section>\n<\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>Faire jouer les ordinateurs d&#8217;\u00e9checs de CB-Emu sur un MacBook Pro M1 Max sous MAME 0.289 : ce qui a chang\u00e9 depuis MessChess, la panne des \u00e9mulateurs orphelins, 510 parties de tournoi et un \u00e9talonnage contre le PC qui donne une quinzaine de machines conformes, mais pas toutes.<\/p>\n","protected":false},"author":1,"featured_media":4675,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":""},"categories":[72],"tags":[],"rttpg_featured_image_url":{"full":["https:\/\/www.chess.lumn.eu\/wordpress\/wp-content\/uploads\/2026\/11\/neo6502_une.png",1920,1008,false],"landscape":["https:\/\/www.chess.lumn.eu\/wordpress\/wp-content\/uploads\/2026\/11\/neo6502_une.png",1920,1008,false],"portraits":["https:\/\/www.chess.lumn.eu\/wordpress\/wp-content\/uploads\/2026\/11\/neo6502_une.png",1920,1008,false],"thumbnail":["https:\/\/www.chess.lumn.eu\/wordpress\/wp-content\/uploads\/2026\/11\/neo6502_une-150x150.png",150,150,true],"medium":["https:\/\/www.chess.lumn.eu\/wordpress\/wp-content\/uploads\/2026\/11\/neo6502_une-300x158.png",300,158,true],"large":["https:\/\/www.chess.lumn.eu\/wordpress\/wp-content\/uploads\/2026\/11\/neo6502_une-1024x538.png",1024,538,true],"1536x1536":["https:\/\/www.chess.lumn.eu\/wordpress\/wp-content\/uploads\/2026\/11\/neo6502_une-1536x806.png",1536,806,true],"2048x2048":["https:\/\/www.chess.lumn.eu\/wordpress\/wp-content\/uploads\/2026\/11\/neo6502_une.png",1920,1008,false],"neve-blog":["https:\/\/www.chess.lumn.eu\/wordpress\/wp-content\/uploads\/2026\/11\/neo6502_une-930x620.png",930,620,true]},"rttpg_author":{"display_name":"valterd","author_link":"https:\/\/www.chess.lumn.eu\/wordpress\/author\/valterd\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/www.chess.lumn.eu\/wordpress\/category\/developpements\/\" rel=\"category tag\">D\u00e9veloppements<\/a>","rttpg_excerpt":"Faire jouer les ordinateurs d'\u00e9checs de CB-Emu sur un MacBook Pro M1 Max sous MAME 0.289 : ce qui a chang\u00e9 depuis MessChess, la panne des \u00e9mulateurs orphelins, 510 parties de tournoi et un \u00e9talonnage contre le PC qui donne une quinzaine de machines conformes, mais pas toutes.","_links":{"self":[{"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/posts\/4674"}],"collection":[{"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/comments?post=4674"}],"version-history":[{"count":5,"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/posts\/4674\/revisions"}],"predecessor-version":[{"id":4846,"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/posts\/4674\/revisions\/4846"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/media\/4675"}],"wp:attachment":[{"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/media?parent=4674"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/categories?post=4674"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/tags?post=4674"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}